vue-i18n
是 vue
下的一个插件,用于让项目支持国际化多语言。
安装
1 | npm install vue-i18n --save |
引入vue-i18n
将
vue-i18n
注入到vue
中。注入后在任何vue组件
(.vue结尾的文件)内,都可以使用this.$t('xxxx')
来调用。新建
VueI18n
实例。- 新建默认语言。
- 新建待翻译语言(json文件)。
- 新建
VueI18n
实例时导入上面文件。
- 新建
Vue
实例时引入VueI18n
实例。
1 | // ./i18n/index.js |
使用
官方文档有详情的介绍,本文只介绍常用的几种使用方法。
json编写
使用
{}
设置变量使用
@xx:yy:zz
引用json
中已存在的变量1
2
3
4
5
6
7
8{
en: {
hello: 'hello { name }, nice to meet you ~',
},
en1: {
alsoHello: '@:en.hello' // 和en.hello一样,也要传入变量 { name:xx }
}
}
使用场景
vue
实例中:1
<span>{{$t('en.hello')}}</span>
1
2
3
4
5// vue中的 <script>内
hello () {
let hello = this.$t('en.hello')
console.log(hello)
}非vue
实例中(比如js文件
):1
2
3
4
5
6
7
8// 注意没有$符号
// ./demo.js
import i18n from './i18n'
hello () {
let hello = i18n.t('en.hello')
console.log(hello)
}
使用方式
常规翻译
直接使用即可。
1
2
3
4
5
6
7
8
9// en.json
{
en: {
hello: 'hello world'
}
}
// hello.vue
let hello = this.$t('hello')
带变量的翻译
使用
{}
设置变量。使用
Object
、Array
等传入变量。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21// ---------- 对象
// en.json
{
en: {
hello: 'hello { name }, nice to meet you ~'
}
}
// hello.vue
let hello = this.$t('en.hello', { name: 'Jack' })
// ---------- 数组
// en.json
{
en: {
hello: 'hello { 0 }, nice to meet { 1 } ~'
}
}
// hello.vue
let hello = this.$t('en.hello', ['Jack', 'you'])
优化
调用方式
我们发现,在 vue
组件中是通过 this.$t('xxx')
来调用,在 非vue
组件中是通过引入 i18n
,然后 i18n.t('xxx')
来调用。
那每次调用的时候,我们得区分是否是 vue
组件, 然后重复、多次引入 i18n
。
这明显增加了代码的复杂性。有个直接的解决方法就是,把 i18n
挂载到全局的 windows
下,之后在任何地方都可以通过 i18n.t()
来调用了。
1 | // ./i18n/index.js |
添加修改语言方法
我们在 i18n
里添加一个修改语言的方法。
- 该函数做了以下3件事情。
- 将当前语言保存到
localStorage
中; - 给
body
添加语种相关的class
,优化样式时使用。 - 将当前语种存到
Vue
的全局配置中,以便未来使用。
1 | // ./i18n/index.js |
热加载(待验证)
1 | // main.js |