1、项目中国际化的困扰
由于项目是面向海外用户的,需要多语言选择,项目使用的技术站为vue2 + elementui,所有引入了i18n来解决此问题。但项目开发中、重构和后续迭代开发过程中却出现了很多新的问题。
- 文案提取、文案 key 命名、语法转换过程繁琐低效,需要每一条都自己提取到安放的位置,重复操作,语法转换更是难受,十分耗时。
- 各种文案问题难以排查优化,包括重复定义的文案、失效文案、未提取的中文、错误引用。需要自己一个个去全局匹配,非常的麻烦。
- 页面制作过程中,无法进行外语页面展示效果的调试,需要自己逐个去翻译。
- 翻译结果交付较慢,影响提测进度:大部分产品经理翻译文案会先利用翻译工具得到参考的翻译结果,然后再进行微调,当文案较多时,翻译过程比较耗时
- 代码可读性变差:中文改成 Vue I18n 语法之后,无法直接确认代码中的中文内容
2、相关工具的调研
为了解决问题,网易对此进行了调研。
因网易项目中使用的都是 Vue I18n,因此首先调研了 Vue I18n 相关的 vscode 插件和命令行工具,对比结果汇总如下:
下载量最多的是 i18n-ally,它功能丰富、交互友好,且支持多种国际化插件;而命令行工具中,vue-i18n-cli 支持项目级别的文案批量操作,但是功能实现上存在的问题较多,不是很可靠,vue-i18n-extract 功能比较单一,只支持文案检查。
其次,我们还调研了阿里开源的一套国际化解决方案 kiwi,它集成国际化框架 kiwi-intl、vscode 插件 kiwi-linter、命令行工具 kiwi-cli 为一体,功能比较完整,基本解决了国际化开发中存在的大多痛点,但它并不适用于 Vue 项目。
3、方案选择及踩坑
综合上面的调研结果,项目的实现方案选择vscode插件i18n ally
3.1 安装
在vscode扩展应用中搜索i18n ally
,选择下图所示的插件进行安装
插件git地址及文档i18n-ally
3.2 多语言文件结构
首先需要了解支持的语言环境格式传送门
我项目中文件格式
zh.json中
{
"buffer": "缓冲液",
"search": "搜索",
"interpolation": "B: {0}"
}
en.json中
{
"buffer": "buffer",
"search": "search",
"interpolation": "B: {0}"
}
index.js中
import Vue from 'vue'
import VueI18n from 'vue-i18n'
Vue.use(VueI18n)
import localesZh from './zh.json'
import localesEn from './en.json'
const i18n = new VueI18n({
locale: 'en_US',
messages: {
zh_CN: { ...localesZh },
en_US: { ...localesEn }
}
})
export default i18n
3.3 启用i18n ally
这里有两种方式:
- 在VSCode设置文件中设置(全局修改)
- 在项目文件中找到
.vscode
文件夹,没有此文件夹的就新增一个,添加settings.json
个人比较喜欢第二种 配置项
{
"i18n-ally.localesPaths": "src/locales", // 相对于项目根目录的语言环境目录路径
"i18n-ally.sourceLanguage": "en", // 根据此语言文件翻译其他语言文件的变量和内容
"i18n-ally.displayLanguage": "en", // 显示语言
"i18n-ally.keystyle": "nested", // 翻译后变量格式 nested:嵌套式 flat:扁平式
"i18n-ally.preferredDelimiter": "_",
"i18n-ally.sortKeys": true,
"i18n-ally.extract.keygenStrategy": "random", // 生成密钥路径的策略。可以slug,random或empty
"i18n-ally.extract.keygenStyle": "camelCase", // 翻译字段命名样式采用驼峰
"i18n-ally.enabledParsers": ["json", "js"],
"i18n-ally.keysInUse": ["view.progress_submenu.translated_keys", "view.progress_submenu.missing_keys", "view.progress_submenu.empty_keys"],
"i18n-ally.theme.annotationMissingBorder": "#d37070",
"i18n-ally.theme.annotationMissing": "#d37070"
}
效果及展示
3.4 坑点(启用形式第二种的)
.vscode
需要放在package.json同级目录下,否则不起作用settings.json
只能管理项目一级,不能多层项目桥套,获取管理多个项目,如下就不起作用- 项目中需要安装
vue-i18n
插件,否则i18n ally
不起作用,vscode右侧导航栏上不显示插件启用