快速支持多语言

523 阅读3分钟

在本文中,我们将通过以下三个步骤,快速为 Vue 项目实现多语言支持:

  1. 将项目中的硬编码文本替换为可配置的文本
  2. 使用工具(如 vue-i18n-extract)基于配置生成 locale 文件
  3. 通过 i18n 使用 locale 配置,验证无误后翻译生成其他语言的配置文件

第一步:将硬编码文本替换为可配置的文本

为了让项目支持多语言,我们需要将页面上的文本内容替换为可配置的文本。我们可以使用 Vue-i18n 插件实现这一功能。首先,将硬编码的文本替换为 Vue-i18n 配置:

这里要按照业务进行层级的定义和命名,以便于维护和理解

例如,将:

<span>你好</span>

替换为:

<span>{{ t('booktree.hello') }}</span>

其中,booktree.hello 是 Vue-i18n 的 key,用于在 locale 配置中查找对应的文本。

工程代码中的部分尽量人工修改较为可靠些,接下来关于配置相关的步骤我们尽量通过自动化脚本处理。

第二步:使用 vue-i18n-extract 生成 locale 配置

在替换了所有硬编码文本后,我们可以使用 vue-i18n-extract 工具自动检测这些文本,并生成相应的 locale 配置。首先,安装 vue-i18n-extract:

npm install -g vue-i18n-extract

接着,运行以下命令生成 report.json 文件:

npx vue-i18n-extract report --vueFiles ./src/**/*.?(js|vue) --languageFiles ./src/local.json --output report.json

这个命令会扫描 ./src 目录下的所有 .js.vue 文件,并将找到的 i18n 文本与 ./src/locales 目录下的 JSON 文件进行对比,生成一个包含缺失 key 的 report.json 文件。

第三步:使用 i18n 和 locale 配置生成其他语言的配置文件

在生成了 report.json 文件后,我们需要将其转换为 Vue-i18n 可用的 messages 配置。运行这个report-to-locale.js脚本: gist.github.com/yansenlei/b…

node report-to-locale.js ./i18n-report.json ./src/locales/zh-CN.json

接着,使用 i18n 将 messages 配置应用到项目中。记得将具体的文本内容写上。

{
  "booktree": {
    "hello": "你好"
  }
}

确认一切正常后,我们可以使用脚本将其翻译成其他语言的配置文件。我们可以使用 google-translate-api 这个库实现自动翻译功能。首先安装相关依赖:

npm install @vitalets/google-translate-api https-proxy-agent yargs

然后创建一个脚本文件,比如 translate.js,运行这个脚本,生成其他语言的配置文件: gist.github.com/yansenlei/1…

node translate.js -s zh-CN -t en

详细使用方式可以通过-h查看:

node translate.js -h

这条命令会将 messages.json 中的中文内容翻译成英文,并生成一个名为 messages-en.json 的新文件。

至此,您已经成功地为项目实现了多语言支持。

自动翻译的内容也许不会太准确,可以人工再检查一遍。

现在,项目中的文本已经可以根据用户的语言偏好自动切换。只需将生成的多语言配置文件添加到项目的 locale 配置中,即可实现多语言切换。

希望本教程能帮助您更轻松地为 Vue 项目实现多语言支持。如有任何问题,欢迎留言讨论。

(与GPT4协作完成代码编写,并生成文档内容)