npm i -S element-ui vue-i18n js-cookie
复制代码
zh.js
export default {
common: {
confirm: '肯定',
cancel: '取消',
home: '首页'
},
login: {
login: '登陆',
logout: '退出'
},
header: {
message: '这是公共的头部组件'
},
footer: {
message: '这是公共的底部组件'
}
}
en.js
export default {
common: {
confirm: 'confirm',
cancel: 'cancel',
home: 'home'
},
header: {
message: 'this is a common header component'
},
footer: {
message: 'this is a common footer component'
},
login: {
login: 'login',
logout: 'logout'
}
}
复制代码
import VueI18n from 'vue-i18n'
import enLocale from './en'
import zhLocale from './zh'
const messages = {
en: {
...enLocale
},
zh: {
...zhLocale
}
}
const i18n = new VueI18n({
locale: 'zh',
messages
})
export default i18n
复制代码
import Vue from 'vue'
import i18n from './lang'
Vue.use(i18n)
new Vue({
el: '#app',
router,
store,
i18n, // 便于能够直接在组件中经过this.$i18n使用,也能够按需引用
render: h => h(App)
})
复制代码
<template>
<div class="common_header">
<el-row>
<el-col :span="12">
{{$t('header.message')}}
</el-col>
<el-col :span="12">
<el-button type="primary" @click="login">{{$t('login.login')}}</el-button>
</el-col>
</el-row>
</div>
</template>
复制代码
因为咱们VueI18n中定义的是中文,这是页面显示的'这是公共的头部组件',login: '登陆',修该VueI18n实例属性locale的值为en,刷新页面,页面显示 'this is a common header component','login',说明多语言配置成功。vue
<el-select v-model="language" placeholder="请选择语言" @change="changeLanguage">
<el-option
v-for="item in languageOptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
复制代码
changeLanguage (language) {
this.$i18n.locale = language
}
复制代码
const i18n = new VueI18n({
locale: Cookies.get('language') || 'zh',
messages
})
切换语言时候保存到Cookies
Cookies.set('language', language)
复制代码
这是再去刷新页面,将会采用最后咱们保存在cookie中的语言。vuex
changeLanguage (v) {
this.$store.dispatch('switchLanguage', v)
this.$i18n.locale = v
}
在state中:
language: Cookies.get('language') || 'zh'
复制代码
languageOptions () {
let languageOptions
if (this.$store.state.language === 'zh') {
languageOptions = [
{
value: 'zh',
label: '中文'
},
{
value: 'en',
label: '英文'
}
]
} else {
languageOptions = [
{
value: 'zh',
label: 'Chinese'
},
{
value: 'en',
label: 'English'
}
]
}
return languageOptions
}
复制代码
效果以下: npm
import elementEnLocale from 'element-ui/lib/locale/lang/en'
import elementZhLocale from 'element-ui/lib/locale/lang/zh-CN'
复制代码
const messages = {
en: {
...enLocale,
...elementEnLocale
},
zh: {
...zhLocale,
...elementZhLocale
}
}
复制代码
Vue.use(i18n)
修改成
Vue.use(ElementUI, {
i18n: (key, value) => i18n.t(key, value)
})
复制代码