Vue I18n学习 | 青训营笔记

84 阅读1分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 32 天

Vue I18n是vue(2和3都支持)的一个插件,可以用它来管理语言环境,目前已经有了v9版本

注入

i18n具有多种注入方式,比如常用的$t,可以结合下面的例子理解。
它可以接受三个参数:message-path、locale、array或者object。
第一个参数是必选的,它是要选择的信息;第二个参数用来指定要选择的语言环境是可选的;第三个参数是数组或者对象可以用它来实现格式化,也是可选的。

格式化

const messages = {
    en: {
        message: {
            hello: 'world'
        }
    }
    cn:{
        //...
    }
}

在这个例子中,创建了一个英语的环境,它具有一个message对象属性,这个对象的属性值我们可以对其进行格式化。 现在还没对其进行格式化,可以这样使用它。

<p>{{ $t(message.hello) }}</p>

这会输出world。

具名格式化{}

const messages = {
    en: {
        message: {
            hello: '{msg} world'
        }
    }
}

msg就是这个名,我们可以在注入的时候用对象(上面提到的可选的、第三个参数)给他传入值。

<p>{{ $t(message.hello,  { msg : 'hello'})}}</p>

列表格式化[]

这里的列表并不是值html的列表,而是一个格式方式,感觉这个起名有点误导人。

const messages = {
    en: {
        message: {
            hello: '{0} world'
        }
    }
}

在给它格式化的时候既可以用对象也可以用数组。

<p>{{ $t(message.hello,  ['hello'])}}</p>

感觉这种方式有点像数组,对象参照上文。

HTML格式化

你甚至可以在message输出的信息增加html的标签来让它用html的格式输出。

当然这种操作是不能用{{}}文本插值的,而是要用v-model指令,这和在vue中是一样的,所以好像不需要大惊小怪。

其它

官网中有提到还支持ruby的特定格式,但是ruby应该很少用到了吧在现在。

自定义格式化就需要ES2015的class了,不过只是简单的语言管理的话应该用不到。

复数

字面意思,一个属性可以有多个值并用 | 分割。 这就要使用$tc这个注入了,相比$t,它增加了一个参数用来选择要输出的信息,注意下标是从1开始的,默认值也是1。

因为项目要求只用到了这些就写到这里了。