持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第26天,点击查看活动详情
国际化处理
解决方案:
国际化(i18n)处理
vue项目中的多语言支持使用的是vue-i18n
参考: kazupon.github.io/vue-i18n/zh…
目的是实现多语言的(例如:中英文)切换功能
安装国际化包
npm i vue-i18n@8.22.2
注意:
vue-i18n现在有了一个新版本,对应的api有些不兼容,请还是使用8.22.2这个版本!
配置
在src目录下新建lang文件夹
引入语言包
en.js 英语对应 zh.js中文对应
配置文件
import Vue from 'vue'
import VueI18n from 'vue-i18n'
// 引入自定义中文包
import customZH from './zh'
// 引入自定义英文包
import customEN from './en'
Vue.use(VueI18n)
// 创建国际化插件的实例
export default new VueI18n({
locale: 'zh',// 指定语言类型
messages: { // 固定写法
en: {
...customEN // 将自定义英文包加入
},
zh: {
...customZH // 将自定义中文包加入
}
}
})
在main.js中挂载 i18n的插件
// 省略其他...
import i18n from '@/lang'
// 加入到根实例配置项中
new Vue({
el: '#app',
router,
store,
i18n,
render: h => h(App)
})
使用
因为我们把国际化挂载在main.js中所以可以使用this.$t代表国际化插件的使用
就像在main.js中挂载了router所以我么可以使用$router
在.vue中使用: this.$t('key')
在.js中使用: i18n.t('key')
国际化原理
1.在实例化vue中使用this.t)
在.vue中使用: this.$t('key')
在.js中使用: i18n.t('key')
2.根据src/lang/index.js中的语言确定语言类型
找到对应的语言包,找到对应key值的语言,
3.根据参数key值在对应的语言数据中匹配
例子
- 比如在index.vue中使用了this.$t('table')
- 然后在/lang/index.js中的语言确定语言类型
- 如果是英文到en.js中找匹配,table对应table,输出table
table: 'table',
- 如果当前是需要输出中文到zh中找匹配,table对应数据列表,输出数据列表
table: '数据列表',
ElementUI兼容i18n
在lang/index.js中引入ele语言包
import VueI18n from 'vue-i18n'
import Element from 'element-ui'
import elementEN from 'element-ui/lib/locale/lang/en'
import elementZH from 'element-ui/lib/locale/lang/zh-CN'
使用语言包
// 进行多语言支持配置
import Vue from 'vue' // 引入Vue
import VueI18n from 'vue-i18n' // 引入国际化的插件包
+ import locale from 'element-ui/lib/locale'
+ import elementEN from 'element-ui/lib/locale/lang/en' // 引入饿了么的英文包
+ import elementZH from 'element-ui/lib/locale/lang/zh-CN' // 引入饿了么的中文包
// 引入自定义中文包
import customZH from './zh'
// 引入自定义英文包
import customEN from './en'
Vue.use(VueI18n) // 全局注册国际化包
// 创建国际化插件的实例
const i18n = new VueI18n({
// 指定语言类型 zh表示中文 en表示英文
locale: 'zh',
// 将elementUI语言包加入到插件语言数据里
messages: {
// 英文环境下的语言数据
en: {
+ ...elementEN,
...customZH
},
// 中文环境下的语言数据
zh: {
+ ...elementZH,
...customEN
}
}
})
// 配置elementUI 语言转换关系
+ locale.i18n((key, value) => i18n.t(key, value))
export default i18n