前言
当公司业务涉足国际市场时,语言的转化成为了开发过程中不可缺少的一环。想到之前完成的项目有所涉及,本文总结了实际开发中国际化的常规解决方案。
一、vue组件的国际化
可以使用vue-i18n库来实现组件的国际化;
- 在src目录中创建lang/index.js文件,来管理国际化模块;
- 创建i18n实例对象,并导出;
// 进行多语言支持配置
import Vue from 'vue' // 引入Vue
import VueI18n from 'vue-i18n' // 引入国际化的插件包
Vue.use(VueI18n) // 全局注册国际化包
// 创建国际化插件的实例
const i18n = new VueI18n({})
// 配置elementUI 语言转换关系
locale.i18n((key, value) => i18n.t(key, value))
export default i18n
- 引入elemntUI的语言包,并在i18n实例中进行配置;
// 进行多语言支持配置
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' // 引入饿了么的中文包
Vue.use(VueI18n) // 全局注册国际化包
// 创建国际化插件的实例
const i18n = new VueI18n({
// 指定语言类型 zh表示中文 en表示英文
locale: 'zh',
// 将elementUI语言包加入到插件语言数据里
messages: {
// 英文环境下的语言数据
en: {
...elementEN
},
// 中文环境下的语言数据
zh: {
...elementZH
}
}
})
// 配置elementUI 语言转换关系
locale.i18n((key, value) => i18n.t(key, value))
export default i18n
- 在main.js中引入i18n,并注入到Vue中。
// 省略其他...
import i18n from '@/lang'
// 加入到根实例配置项中
new Vue({
el: '#app',
router,
store,
i18n,
render: h => h(App)
})
二、项目中自定义内容的国际化
上述方法解决了第三方组件的国际化,那没有使用elementUI的部分如何实现国际化呢?
可以将需要转化的内容写到一个js文件中,并默认导出,直接写到对应语言的配置项中。
使用{{ $t('navbar.companyName') }}即可。
// 创建国际化插件的实例
export default new VueI18n({
// 指定语言类型
locale: 'zh',
messages: {
en: {
...elementEN, // 将饿了么的英文语言包引入
+ ...customEN // 将自定义英文包加入
},
zh: {
...elementZH, // 将饿了么的中文语言包引入
+ ...customZH // 将自定义中文包加入
}
}
})
配置流程图:
三、语言切换组件封装
很多项目都会用到国际化,可以将语言切换功能的组件进行封装,其他项目有需要拿来用即可,一定程度上提高了开发效率。
<template>
<el-dropdown trigger="click" @command="changeLanguage">
<div>
<svg-icon style="color:#fff;font-size:20px" icon-class="language" />
</div>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="zh" :disabled="'zh'=== $i18n.locale ">中文</el-dropdown-item>
<el-dropdown-item command="en" :disabled="'en'=== $i18n.locale ">en</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
<script>
export default {
methods: {
changeLanguage(lang) {
this.$i18n.locale = lang // 设置给本地的i18n插件
this.$message.success('切换多语言成功')
}
}
}
</script>
总结
以上就是我总结的开发中的一些解决方案。希望大家看的开心!