3.2 国际化
0x00 前言
本文将系统讲解 element 国际化方案实现,项目内置了 51 门语言。src/locale 目录下存放了语言配置文件、国际化处理方法、文本格式等,下面将逐一讲解,耐心读完,相信会对您有所帮助。
0x01 国际化方案
element 的国际化方案没有引入第三方插件如 vue-i18n,通过自定义实现的。它兼容 vue-i18n,搭配使用能十分方便。
📁 src/locale/lang
用于存放支持语言的配置文件,默认语言为简体中文语言(zh-CN),src/locale/lang/zh-CN.js文件返回一个 JSON 格式的数据,内容为各组件相关描述翻译。
export default {
el: {
// 组件 select 选择器
select: {
loading: "加载中",
noMatch: "无匹配数据",
noData: "无数据",
placeholder: "请选择",
},
// ...
},
};若需要使用其他的语言,在该目录下添加一个语言配置文件即可。
📃 src/locale/format.js
提供字符串模板函数,支持索引或命名关键字参数。 代码实现参考 npm/string-template。
📃 src/locale/index.js
index.js提供三个方法 use、 t、 i18n 用于语言切换设置、国际化处理、i18n插件兼容以及自定义。详细内容请看注释源码。
use 方法参数为语言配置内容,用于语言切换。若参数为空,默认使用简体中文(zh-CN)。
i18n 方法用于外部插件方法的兼容和自定义处理方法引入。项目 i18nHandler方法的实现就是用来兼容外部插件vue-i18n@5.x 。
若传入自定义处理方法, i18nHandler方法实现将被覆盖。
t 方法用于组件国际化处理,它根据传入的 path 路径,从语言配置中找到对应的文案,然后在结合 options进行格式化处理。
0x02 组件国际化引用
接下来通过Select 、Pagination组件的示例讲解下国际化功能引入使用。
功能引入
前文可知 src/mixins/locale.js 引入src/locale/index.js中的 t 方法,通过 mixin 方式提供给组件页面使用。
Select组件源码中可以看到国际化处理逻辑。
t(path)
this.t('el.select.noData') 调用 t 方法据传入的 path 路径值 el.select.noData,参数options 为 undefined ,默认情况下没有引入第三方插件或自定义方法,直接从默认语言(简体中文)配置中找到对应的文案 。
此时 value 值为 “无数据”,参数options 为 “undefined”,使用 format 方法(即 src/locale/format.js定义的 template 方法 )进行文本格式化。
组件效果如下 👇。
t(path, options)
在Pagination分页组件中, this.t('el.pagination.total', { total: this.$parent.total }) 传入 path 路径值 el.pagination.total,参数 options 为 {total: 1000} 。
根据 el.pagination.total 获取值为 共 {total} 条,是一个模板字符串。
此时 value 值为 共 {total} 条,参数options 为 {total: 1000}, 使用 format 方法进行文本格式化。
不是所有的值都是纯文本,存在模板字符串。引入
src/locale/format.js定义的format方法用于字符串格式化操作。
组件效果如下 👇。
0x03 项目国际化设置
通过上述篇幅详细讨论组件内部国际化方案实现。接下来介绍组件的使用中如何使用设置多语言,引入第三方插件、手动扩展方法等操作。
完整引入
使用 Vue.use()全局注册组件时,也可以传入一个可选的选项对象,locale 用于语言设置、i18n 自定义 i18n 的处理方法 。
src/index.js 中的 install 方法中提供 locale.use() 、 locale.i18n() ,接收参数 opts,用于国际化全局设置。
按需引入
引入部分组件比如 Button 和Select,可以使用两种方式进行注册:插件注册 Vue.use() 或 组件全局注册Vue.component();引入 locale 方法设置语言;引入 i18n 方法用于处理方法;。
src/index.js 中导出的 locale 、 i18n方法。 locale 等同于locale.use, i18n 等同于locale.i18n。
搭配vue-i18n使用
vue-i18n使用项目也可引入第三方插件,如vue-i18n,最新版本为 8.x ,使用需要手动处理 (Element 兼容 5.x) 。
测试页面
设置语言为zh, 页面输出内容:
设置语言为en, 页面输出内容:
最后更新于