vue-i18n国际化在data中切换不起作用

vue-i18n是一个针对于vue的国际化插件,使用非常简单,具体使用方式看我细细道来。

实现方式

1. 下载包
npm install vue-i18n
2. 配置

在main.js文件中加入如下配置

// 引入插件和语言包
import VueI18n from ‘vue-i18n‘
import zh from ‘@/i18n/langs/zh‘
import en from ‘@/i18n/langs/en‘
Vue.use(VueI18n)

//实例化vue-i18n
const i18n = new VueI18n({

  // 从本地存储中取,如果没有默认为中文,
  // 这样可以解决切换语言后,没记住选择的语言,刷新页面后还是默认的语言
  locale: localStorage.getItem(‘lang‘) || ‘zh‘,

  messages: {
    ‘zh‘: zh, // 中文语言包
    ‘en‘: en // 英文语言包
  }
})

// 将i18n实例挂载到vue上
new Vue({
  el: ‘#app‘,
  i18n,
  router,
  store,
  template: ‘<App/>‘,
  components: { App }
})
3. 创建中、英文包文件
创建两个文件,一个为zh.js代表中文,en.js代表英文,具体内容格式如下
//zh.js
export default {
  nav: {
    home: ‘首页‘,
    monitor: ‘监控‘,
    analyze: ‘分析‘,
    alarm: ‘报警‘,
    maintenance: ‘运维‘,
    config: ‘配置‘,
    device: ‘设备‘,
    scada: ‘画面‘
  },
  confirm: {
    ok: ‘确认‘,
    cancel: ‘取消‘,
    content: ‘你确认要退出系统吗?‘,
    logout: ‘退 出‘
  },
}
//en.js
export default {
  nav: {
    home: ‘Home‘, //首页
    monitor: ‘Monitor‘, //监控
    analyze: ‘Analyze‘, //分析
    alarm: ‘Alarm‘, // 报警
    maintenance: ‘Maintenance‘, //运维
    config: ‘Config‘, //配置
    device: ‘Device‘, //设备
    scada: ‘Scada‘ //画面
  },
  confirm: {
    ok: ‘Logout‘, //退出
    cancel: ‘Cancel‘, //取消
    content: ‘Are you sure you want to quit the system?‘, //你确认要退出系统吗
    logout: ‘Logout‘ //
  }
}
4. 在组件中使用

我们先看vue-i18n的模板语法

//第一种
<span v-text="$t(‘nav.home‘)"></span>

//第二种
<span>{{$t(‘nav.home‘)}}</span>
5. 如何切换中英文

关于这点,vue-i18n给我们提供了一个全局变量locale,通过他我们可以查看当前使用的语言,也可以通过他改变当前使用的语言;

具体用法:

// 查看当前使用的语言
console.log(this.$i18n.locale)

// 改变当前使用的语言
this.$i18n.locale = ‘en‘  // 将当前使用的语言切换到英文

一般在项目中,我们会使用如下方式切换语言

// 切换语言按钮
<v-list-tile  @click="onChangeLang">
  <v-list-tile-title>中文 / EN</v-list-tile-title>
</v-list-tile>
<v-list-tile  @click="onLogOutClick">
  <v-list-tile-title >{{$t(‘confirm.logout‘)}}</v-list-tile-title>
</v-list-tile>

// 切换方法onChangeLang的处理, 这里的弹出框是element-ui的组件
onChangeLang() {
  this.$confirm(this.$t(‘changeLang.content‘), this.$t(‘changeLang.tip‘), {
    confirmButtonText: this.$t(‘changeLang.ok‘),
    cancelButtonText: this.$t(‘confirm.cancel‘),
    type: ‘warning‘
  })
    .then(() => {
      let lang = this.$i18n.locale
      if (lang === ‘zh‘) {
        this.$i18n.locale = ‘en‘
        // 对应main.js配置文件中的localStorage的get方法
        localStorage.setItem(‘lang‘, this.lang)
      } else {
        this.$i18n.locale = ‘zh‘
        localStorage.setItem(‘lang‘, this.lang)
      }
    })
    .catch(() => {})
}

可能会遇到的问题

1. 记不住切换后的语言

就是我们切换语言后,刷新又是默认语言,这点我们在上面已经用本地存储localStorage解决了;

2. 将this.$t() 写到了data属性里,切换语言不起作用

官方的解决办法是,建议我们将表达式写到computed属性里,不要写到data里


作者:LeonWuV
来源:CSDN
原文:https://blog.csdn.net/wxl1555/article/details/85112530
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/listen9436/p/10525532.html

时间: 2024-09-30 20:40:01

vue-i18n国际化在data中切换不起作用的相关文章

vue i18n 国际化 使用方法

1 先安装 npm install vue-i18n 2  新建文件assets/js/i18n.js 3  引入vue-i18n并注册到vue上 import VueI18n from 'vue-i18n' import Vue from 'vue' Vue.use(VueI18n) let locale = 'zh-CN' // 我这里进行了sessionStoraage配置 // sessionStorage.getItem('vuex') ? sessionStorage.getItem

Vue beaforeCreate时获取data中的数据

异步获取即:通过    $this.$nextTick或者settimeout,这连dom都可以拿出来 beforeCreate() { this.$nextTick(function() { console.log(this.属性名); }) }) 同步获取:在beforeCreate之前,所有的iptions都会先存到vm.$options中,也就是说使用this.$options.data就行了 原文地址:https://www.cnblogs.com/katydids/p/9944671

[iOS]如何在iOS开发中切换显示语言实现国际化

1.在Project设置,添加中英两种语言: 2.新建Localizable.strings文件,作为多语言对应的词典,存储多种语言,点击右侧Localization,勾选中英: 3.添加一个字段, 在English中,添加:"SUBMIT_BTN_TITLE" = "Go"; 在Chinese中,添加:"SUBMIT_BTN_TITLE" = "开始"; 4.一个工具类GDLocalizableController,用来切换

vue调用组件,组件回调给data中的数组赋值,报错Invalid prop type check failed for prop value. Expecte

报错信息: 代码信息:调用一个tree组件,选择一些信息 <componentsTree ref="typeTreeComponent" @treeCheck="treeCheck" :isClearAllChecked=true :defaultProps="defaultProps"> </componentsTree> 选择之后返回选中数据信息,并且在父组件中给data中的数组(type.typeName)赋值: d

vue data中的对象的属性如何使用watch监听

在写项目的时候遇到了一个问题,就是需要动态监听data中一个对象的属性的变化.遇到了许多坑,在此过程中也发现了两种解决方案. 一.通过deep属性实现 data() { return { parent:{ child:1 } }; }, watch:{ 'parent.child':{ deep:true, handler: function(newV, oldV) { console.log(newV); } } } 二.通过computed做中介 computed:{ newChild(){

SpringBoot系列——i18n国际化

前言 国际化是项目中不可或缺的功能,本文将实现springboot + thymeleaf的HTML页面.js代码.java代码国际化过程记录下来. 代码编写 工程结构 每个文件里面的值(按工程结构循序从上往下) ##################默认值############################# welcome=Welcome ##################英文############################# welcome=Welcome ##########

Django1.9开发博客(12)- i18n国际化

国际化与本地化的目的为了能为各个不同的用户以他们最熟悉的语言和格式来显示网页. Django能完美支持文本翻译.日期时间和数字的格式化.时区. 另外,Django还有两点优势: 允许开发者和模板作者指定他们哪些app应该被翻译或被格式化为本地形式. 允许用户根据自己的偏好来实现本地化显示.翻译依据语言,格式化依据国家, 这些信息由浏览器中的Accept-Language头来决定.不过目前为止时区还未能实现. 参考官方文档:https://docs.djangoproject.com/en/1.9

Struts2的i18n国际化-关于默认资源文件

昨天接到一个新的任务,将之前的一个供货商管理系统进行国际化支持,该系统采用了Status2框架,因此对Struts2的国际化进行了一些研究,下面是关于国际化配置的一些结果,分享给大家参考: 1.    建立资源文件: 建立资源文件如:             message.properties:作为默认资源文件使用,当无法匹配其他资源文件时使用:             message_zh_CN.properties:中文语言资源文件. 因为需求目前仅需要英文语言和中文语言,因此只建立了这两

vim如何在多个文件中切换

如果我们一次打开多个文件 看一下当前目录里面的文件: [email protected] /data/webroot/testRoot/application/modules/Admin/views $ ll total 28 drwxr-xr-x 2 wangkongming wangkongming 4096 7月 17 17:15 . drwxr-xr-x 4 wangkongming wangkongming 4096 6月 10 13:27 .. -rw-r--r-- 1 wangko