一、咱们得先有开发环境,先有项目跑起来,我推荐若是是喜欢用 vue 的小伙伴,能够尝试 vue-cli 官方脚手架html
二、咱们须要安装 vue-i18n, 推荐 npm 包依赖:前端
$ npm install vue-i18n
复制代码
固然你也能够这样:vue
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-i18n/dist/vue-i18n.js"></script>
复制代码
三、注入 vue 实例中,项目中实现调用 api 和 模板语法 这边我是顺着使用 npm 安装依赖进行。先在 main.js 中引入 vue-i18n。vue-cli
import VueI18n from 'vue-i18n'
Vue.use(VueI18n) // 经过插件的形式挂载
const i18n = new VueI18n({
locale: 'zh-CN', // 语言标识
//this.$i18n.locale // 经过切换locale的值来实现语言切换
messages: {
'zh-CN': require('./common/lang/zh'), // 中文语言包
'en-US': require('./common/lang/en') // 英文语言包
}
})
/* eslint-disable no-new */
new Vue({
el: '#app',
i18n, // 不要忘记
store,
router,
template: '<App/>',
components: { App }
})
复制代码
上面的代码正式将 vue-i18n 引入 vue 项目中,建立一个 i18n 实例对象,方便全局调用。咱们经过 this.$i18n.locale 来进行语言的切换,一样的我这边的例子里就是经过点击事件,点击‘’网易云音乐‘’,来触发事件,切换locale 的值。npm
四、ok, 引入的事情就是这样,那么既然实现国际化,这边简单的是中英文切换,那么天然咱们须要中英文两套语言的文件,vue-i18n中相对简单,只须要两个 js 文件,经过 require 的形式引入到 main.js。 api
export const m = {
music: 'Music',//网易云音乐
findMusic: 'FIND MUSIC',//发现音乐
myMusic: 'MY MUSIC',//个人音乐
friend: 'FRIEND',//朋友
musician: 'MUSICIAN',//音乐人
download: 'DOWNLOAD'//下载客户端
}
复制代码
zh.js中文语言包:app
export const m = {
music: '网易云音乐',
findMusic: '发现音乐',
myMusic: '个人音乐',
friend: '朋友',
musician: '音乐人',
download: '下载客户端'
}
复制代码
最后咱们只须要经过触发事件的形式,来控制 locale 的值,去调用对应的语言包就能够实现国际化。模块化
五、组件中如何去切换 locale 的值,实现语言切换。ui
locale: 'zh-CN', // 语言标识
messages: {
'zh-CN': require('./common/lang/zh'), // 中文语言包
'en-US': require('./common/lang/en') // 英文语言包
}
复制代码
在 main.js 中的代码中,能够看到,当 locale 的值为‘zh-CN’时,版本为中文;当 locale 的值为‘en-US’,版本为英文。固然你也能够换成 zh 和 en,这个不固定,只须要对应上。 好了,如今来看一下,我组件中的一个点击事件中如何进行切换。this
/**
* 切换语言
*/
changeLangEvent() {
this.$confirm('肯定切换语言吗?', '提示', {
confirmButtonText: '肯定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
if ( this.lang === 'zh-CN' ) {
this.lang = 'en-US';
this.$i18n.locale = this.lang;//关键语句
}else {
this.lang = 'zh-CN';
this.$i18n.locale = this.lang;//关键语句
}
}).catch(() => {
this.$message({
type: 'info',
});
});
}
复制代码
这边的重点就是,点出的‘’关键语句‘’:this.$i18n.locale
,当你赋值为‘zh-CN’时,导航栏就变成中文;当赋值为 ‘en-US’时,就变成英文。效果图就是文章前面的样子。
六、到这,前端 vue-i18n 国际化插件在 vue-cli 模块化环境中的开发实践就所有完成了。
咱们知道 vue 中对于文字数据的渲染,有以‘’{{}}‘’或者 v-text、v-html等的形式,一样的使用国际化后,依旧能够沿用,但须要一点修改。 v-text:
<span v-text="$t('m.music')"></span>
{{}}:
<span>{{$t('m.music')}}</span>
复制代码