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

vue

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属性里,切换语言不起作用

data是一次性生产的,你这么写只能是在 data 初始化的时候拿到这些被国际化的值,并不能响应变化。

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

3. 后台获取过来的动态数据,在切换国际语言后不起作用

在witch中监听 i18n语言变化,重新调取接口。

4. 注意拷贝后数组中的数据,在切换国际化时不管用,因为浅复制只拷贝了之前没变的数据。







部分内容摘自:
作者:LeonWuV

来源:CSDN

https://blog.csdn.net/wxl1555/article/details/85112530

以上是 vue-i18n国际化在data中切换不起作用 的全部内容, 来源链接: utcz.com/z/378761.html

回到顶部