Element-UI国际化配置
原创
©著作权归作者所有:来自51CTO博客作者会下蛋的咯咯的原创作品,请联系作者获取转载授权,否则将追究法律责任
1、安装vue-i18n依赖包
2、新建语言包文件
1、新建文件夹(任意命名) lang
2、在 lang 文件夹下新建三个js文件:zh.js en.js index.js
(1)zh.js
export default {
common: {
input: '请输入'
}
}
------------------------------------------------------------------
(2)en.js
export default {
common: {
input: 'please input'
}
}
------------------------------------------------------------------
(3)index.js
import Vue from 'vue'
// 引入自己的语言包
import chinese from './zh' // 中文
import english from './en' // 英文
// 国际化
import VueI18n from 'vue-i18n'
Vue.use(VueI18n)
// 配置i18n语言包
const messages = {
en: {
message: 'hello',
...english // 或者用 Object.assign({ message: 'hello' }, enLocale)
},
zh: {
message: '你好',
...chinese // 或者用 Object.assign({ message: '你好' }, zhLocale)
}
}
// 创建国际化实例
const i18n = new VueI18n({
// 设置中文为默认语言
locale: localStorage.getItem('locale') || 'zh', // set locale
// 添加多语言(每一种语言标识对应一个语言文件)
messages, // set locale messages
fallbackLocale: 'zh', // 若某个语言环境变量,则使用fallbackLocale环境下对应的变量
silentFallbackWarn: true, // 抑制警告
globalInjection: true // 全局注入
})
export default i18n
3、在 main.js 引入语言包并挂载到 vue 实例上
// 引入语言包
import i18n from '@/lang/index'
/* eslint-disable no-new */
new Vue({
el: '#app',
router,
store,
i18n, // 挂载
template: '<App/>',
components: { App }
})
/** 到这一步配置成功的话,则页面就实现国际化! */
4、配置全局切换语言组件
(1)
// 一键切换全局语言
<el-form-item label="切换语言">
<el-radio-group v-model="switchLanguage">
<el-radio :label="'zh'" border>中文</el-radio>
<el-radio :label="'en'" border>英文</el-radio>
</el-radio-group>
</el-form-item>
(2)
// 计算属性
computed: {
switchLanguage: {
get () { return this.$store.state.common.switchLanguage },
set (val) {
// 使用Vuex存储语言
this.$store.commit('common/updateSwitchLanguage', val)
// (关键)立即改变页面的语言类型展示
this.$i18n.locale = val
}
}
}
(3)
// Vuex中的变量
switchLanguage: localStorage.getItem('locale') || 'zh'
(4)
// Vuex中的修改方法
updateSwitchLanguage (state, language) {
console.log('state === ', state)
console.log('language === ', language)
state.switchLanguage = language
localStorage.setItem('locale', language)
}