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提供三个方法 useti18n 用于语言切换设置、国际化处理、i18n插件兼容以及自定义。详细内容请看注释源码。

use 方法参数为语言配置内容,用于语言切换。若参数为空,默认使用简体中文(zh-CN)。

i18n 方法用于外部插件方法的兼容和自定义处理方法引入。项目 i18nHandler方法的实现就是用来兼容外部插件vue-i18n@5.x

若传入自定义处理方法, i18nHandler方法实现将被覆盖。

t 方法用于组件国际化处理,它根据传入的 path 路径,从语言配置中找到对应的文案,然后在结合 options进行格式化处理。

0x02 组件国际化引用

接下来通过SelectPagination组件的示例讲解下国际化功能引入使用。

功能引入

前文可知 src/mixins/locale.js 引入src/locale/index.js中的 t 方法,通过 mixin 方式提供给组件页面使用。

Select组件源码中可以看到国际化处理逻辑。

t(path)

this.t('el.select.noData') 调用 t 方法据传入的 path 路径值 el.select.noData,参数optionsundefined ,默认情况下没有引入第三方插件或自定义方法,直接从默认语言(简体中文)配置中找到对应的文案 。

此时 value 值为 “无数据”,参数options 为 “undefined”,使用 format 方法(即 src/locale/format.js定义的 template 方法 )进行文本格式化。

组件效果如下 👇。

image.png

t(path, options)

Pagination分页组件中, this.t('el.pagination.total', { total: this.$parent.total }) 传入 path 路径值 el.pagination.total,参数 options{total: 1000}

carbon (1).png

根据 el.pagination.total 获取值为 共 {total} 条,是一个模板字符串。

此时 value 值为 共 {total} 条,参数options{total: 1000}, 使用 format 方法进行文本格式化。

不是所有的值都是纯文本,存在模板字符串。引入src/locale/format.js定义的 format 方法用于字符串格式化操作。

组件效果如下 👇。

image.png

0x03 项目国际化设置

通过上述篇幅详细讨论组件内部国际化方案实现。接下来介绍组件的使用中如何使用设置多语言,引入第三方插件、手动扩展方法等操作。

完整引入

使用 Vue.use()全局注册组件时,也可以传入一个可选的选项对象,locale 用于语言设置、i18n 自定义 i18n 的处理方法 。

src/index.js 中的 install 方法中提供 locale.use()locale.i18n() ,接收参数 opts,用于国际化全局设置。

按需引入

引入部分组件比如 ButtonSelect,可以使用两种方式进行注册:插件注册 Vue.use() 或 组件全局注册Vue.component();引入 locale 方法设置语言;引入 i18n 方法用于处理方法;。

src/index.js 中导出的 localei18n方法。 locale 等同于locale.usei18n 等同于locale.i18n

搭配vue-i18n使用

项目也可引入第三方插件,如vue-i18n,最新版本为 8.x ,使用需要手动处理 (Element 兼容 5.x) 。

测试页面

设置语言为zh, 页面输出内容:

image.png

设置语言为en, 页面输出内容:

image.png

最后更新于