由于 umi 搭建的项目国际化文件全部归纳于 locales 文件夹下,因此本次的国际化方案也是以 locales 目录为入口进行文件分析,读取文本进行国际化,在写到对应的文件夹下
- 提供同步和异步两种翻译方式
- 翻译的文件自动插入到对应的目录下
- 支持文件夹嵌套,多个层级的目录结构也不会影响翻译和结果的插入
- 支持翻译失败的自动重试
- 支持有道和谷歌两种 api
- 支持收集错误日志,日志记录翻译错误的文本、当前的路径以及对应的语言,并会生成 json 日志文件
- 支持每一个翻译结果的打印
以 ant-design-pro 演示项目的国际化文本目录为例,文件夹结构如下图
中文目录 zh-CN 下包含所有带翻译的文件,其中 zh-CN 目录下可以嵌套多个目录,如上图标注展示。翻译的入口为 zh-CN 文件夹,入口路径需要正确配置,否则无法正确的将翻译结果自动生成到其他语言的目录下,入口配置如下
// 需要翻译的语言以及翻译后生成的文件夹名
const pathMap = {
en: "en-Us",
ru: "ru-Ru",
vi: "vi-Vi",
}
// 需要进入的中文目录名称
const baseDir = "zh-CN"
// 需要翻译的文件夹路径,从当前脚本文件夹找到locales目录
const rootDir = path.resolve(__dirname, "../locales")
// 说明:翻译脚本会根据rootDir+baseDir拼接处入口,所以请保证入口配置正确(正确配置后的格式样例:/Users/bigboss/Codeing/yourProject/src/locales/zh-CN)
在保证入口正确后就可以进行正常的翻译和文件的生成了,如果你还需要更改一些配置,我们提供了以下可以修改的配置
const openLog = false // 是否开启翻译结果打印
const API = "youdao" //翻译api 可选值为 youdao || google
const async = false // 是否异步翻译 默认为true (同步翻译有较高的容错,但是时间较长)
-
请确保 pathMap 中对应的语言和最终翻译文件所在的文件夹正确对应,否则可能会在翻译结束后文件生成时产生错误。
-
请确保入口路径的正确配置,这是一切工作的前提
-
脚本会在每次翻译进行前清除 pathMap 中定义的语言对应的文件夹,并在翻译结束后重新生成对应的文件和文件夹,目录结构和中文的目录结构保持一致。因此哪怕你只有带翻译的中文文件目录,也可以帮你生成对应的其他语言目录和文件。
-
脚本不会对 locales 根目录下的 js 文件进行翻译,如下标注部分
因为这里包含了其他文件的导入,算是入口文件,因此并不在翻译的范围内,如果这部分文件需要翻译,您只能手动进行翻译了,因此不建议入口文件包含文本信息。
-
脚本默认过滤掉入口文件夹以及其所有子文件夹下以 index 命名的文件,我们认为这是入口文件,入口文件不应包含文本信息,所以我们会原封不动的将它写到其他语言对应的目录中。
正式版本在 translate 目录下,以日期命名的目录是历史改进的版本