使用步骤[#]
注意:下面操作是基于
vue2的版本
实现功能:
-
在vue单文件组件中如何使用
- 模版中使用
{{ $t('xxx') }}
- 模版中使用
-
点击"切换语言"
- 修改挂载在vue实例的
$i18n的locale
- 修改挂载在vue实例的
- 安装依赖 版本号 7.3.2,
npm install vue-i18n --save
- 在
src文件夹下创建lang文件夹
index.js
import Vue from 'vue'
import VueI18n from 'vue-i18n'
import Cookies from 'js-cookie'
import elementEnLocale from 'element-ui/lib/locale/lang/en' // element-ui lang
import elementZhLocale from 'element-ui/lib/locale/lang/zh-CN'// element-ui lang
import elementJaLocale from 'element-ui/lib/locale/lang/ja'// element-ui lang
import enLocale from './en'
import zhLocale from './zh'
import jaLocale from './ja'
Vue.use(VueI18n)
const messages = {
en: {
...enLocale,
...elementEnLocale
},
zh: {
...zhLocale,
...elementZhLocale
},
ja: {
...jaLocale,
...elementJaLocale
}
}
export function getLanguage() {
const chooseLanguage = Cookies.get('language')
if (chooseLanguage) return chooseLanguage
// if has not choose language
const language = (navigator.language || navigator.browserLanguage).toLowerCase()
const locales = Object.keys(messages)
for (const locale of locales) {
if (language.indexOf(locale) > -1) {
return locale
}
}
return 'en'
}
const i18n = new VueI18n({
// set locale
// options: en | zh | es
locale: getLanguage(),
// set locale messages
messages
})
export default i18n
zh.js
注意:在对zh.js文件新增字段后需要同步在en.js中同样新增字段
/** 修改zh.js文件后,应将修改或新增的自动同步到en.js
* zh.js 和 en.js 字段数量应一致,如不熟悉字段使用范围,应尽量新增字段,避免修改现有字段
*/
export default {
navbar: {
dashboard: '首页',
github: '项目地址',
logOut: '退出登录',
profile: '个人中心',
theme: '换肤',
size: '布局大小'
}
}
en.js
export default {
navbar: {
dashboard: 'Dashboard',
github: 'Github',
logOut: 'Log Out',
profile: 'Profile',
theme: 'Theme',
size: 'Global Size'
}
}
3.需要在main.js中引入并挂载
import i18n from './lang' // internationalization
Vue.use(Element, {
size: Cookies.get('size') || 'medium', // set element-ui default size
i18n: (key, value) => i18n.t(key, value)
})
new Vue({
el: '#app',
router,
store,
i18n,
render: h => h(App)
})
4.使用APP.vue
<button @click="toggleLanguage('zh')">切换成 中文</button>
<button @click="toggleLanguage('en')">切换成 English</button>
<hr />
<h1>title:{{ $t('navbar.logOut') }}</h1>
export default {
data: function () {
return {}
},
methods: {
toggleLanguage(lang) {
this.$i18n.locale = lang
console.log(this.$i18n)
},
},
}
小结[#]
-
模版中的使用
{{ $t('xxx') }}
-
vue文件以外的地方,比如js使用
import i18n from '@/lang'const loginTitle = i18n.t('login.title')