上一篇文章我们讲了语言包的维护,今天继续讲讲语言包的自动翻译。
我们这里讲的自动翻译指的是机器翻译
,虽然机器翻译未必准确,但在它可以帮助我们快速实现原型,这在项目初期确实能很大地提升开发效率。
我们可以将国际化翻译的工作流拆成以下三个阶段:
源语言包
(Source Language)。比如将页面中的文案提取到 zh 语言包中。接着基于源语言
机器翻译到其他语种。这里有几个问题:
一) 怎么选择源语言?
如果从翻译的效果上看,英语通常是最好的源语言,以下是 ChatGPT 给出的几个原因:
然而作为英语非母语者,实施起来可能会比较麻烦: 一是从业者英语水平良莠不齐,二是我们的产品、需求、原型可能都是以中文为基准的。
因此大部分情况下,我们不得不将中文作为源语言。
二)Review 阶段有什么平台或者工具来支持?
Review 阶段的主要参与者不是开发人员,所以我们需要提供一些简单、易用的工具或平台来支撑他们的校对工作。
比如在我们公司采用的就是最为原始的烹饪方式 —— Excel 文件 ,这个下文会讲到。我们会将整个项目的语言包汇总到 Excel 中:
专业的翻译人员可以直接校对和编辑这个 Excel 文件,借助一些在线文档工具,可以实现基础的多人协同工作。
校对完毕后,回传给开发者,再同步到项目的语言包。
如果是大型项目,参与的人员会非常繁杂,工作流显然也会比较复杂,可能会涉及多团队、多角色协同…
这时候,可以选择市面上一些更专业的工具或者 SaaS 服务, 比如:
国际化、本地化有非常多成熟的商业化 SaaS 方案, 读者可以通过这个榜单找到更多选择。
不过对于中小型项目,会有中杀鸡用牛刀的感觉。
上一篇文章中,我们简单介绍了 i18n-ally 这个神器。它的能力远远不止这些, 现在我们继续挖掘它的能力。
ally 插件支持识别文件中的硬编码字符串,并支持一键提取。
它会根据当前的使用的框架来改写源文件:
只不过它默认生成的 key 有点不符合需求:
笔者建议手动进行精细化的提取:
i18n ally 插件还内置了强大的机器翻译功能:
ally 插件也内置了建议的翻译 Review 工作流:
这种方式简易、精妙。 Review 记录会跟随着代码仓库一起迭代,可以灵活地进行版本化和分支管理。
不用处理因为代码仓库
和 Review 工具流
的割裂而导致的额外同步问题。
i18n-ally 麻雀虽小五脏俱全,足以应付中小型项目的语言包维护、翻译工作流等需求。
如果你有更复杂的需求, 也可以考虑 i18n-ally 的背后维护团队的商业化产品 —— lokalise
最后,再次膜拜 Anthony Fu, 真奇人也。
为了更高效地翻译和生成语言包,我们也开发了一个工具 —— bbt。这是一个自动化管理和翻译语言包的命令行工具。
它的工作流如下所示:
bbt 提供了三个基础的子命令
,分别对应工作流的三个阶段:
源语言
为基准,发现并整合当前项目的所有语言包,然后统一写入到 bbt.csv
文件中。方便下一步处理。bbt.csv
之后, 就可以调用 bbt translate
命令进行‘机器翻译’。接着,可以选择将机器翻译之后的 bbt.csv
发送给专业的翻译人员进行校对bbt.csv
回写到语言包中。bbt 会以源语言包
为基准,将 bbt.csv 的所有变更回写到语言包,并自动补全缺失的语言包和 key/value。下面简单演示一下。关于 bbt 的安装和初始化过程,可以参考 Github ,这里就不赘述了。
假设我们的项目结构如下:
源语言包
。接着,我们可以执行 bbt collect
命令来汇总语言包:
$ bbt collect
bbt 会以源语言包为基准,将所有的 key/value 汇总到 bbt.csv
中:
我们可以看到这个文件包含了一些基础的信息,比如语言包的路径、key, 以及翻译的内容。
💡 为什么使用 csv? 因为它是一个纯文本格式,方便在代码编辑器中修改和展示;能够被版本库记录变更历史;最后是可以方便地处理合并冲突。
接下来就可以执行 bbt translate
对 CSV 进行机器翻译:
$ bbt translate
bbt 支持 Google、DeepL、ChatGPT(实验性) 等服务来翻译。翻译完成 bbt.csv
如下所示:
假设翻译和校对流程搞定了,bbt 支持将 bbt.csv
文件的内容同步回项目的语言包,只需要执行 bbt write
命令:
$ bbt write
bbt 会以源语言包的基准,补全缺失的语言包、Key/Value、更新变更的内容:
综上,bbt 的核心工作流围绕着单一数据源
—— bbt.csv
文件展开。和 i18n-ally
相比, bbt 更加擅长批量的语言包翻译和同步工作。
两者不是取代与被取代的关系,而是一种互补关系,笔者更建议将两者结合起来,DX++
本文简单介绍了多语言自动翻译的工作流,这个可盐可甜:
对于中小型项目,使用 i18n-ally 这个神器就可以满足基本需求,它给我们带来了很多便利的功能,让前端国际化的开发体验得到的指数级的提升。
接着我给我们团队开发的工具—— bbt ,带了下货,和 i18n-ally
相比, bbt 更加擅长批量的语言包翻译和同步工作,可以快速根据源语言
批量翻译和生成其他语言包。两者可以互补使用,进一步提升语言包的维护效率。
对于大型项目,涉及到复杂的多人协作、需要更专业的翻译服务、语言包管理服务,那么可以考虑市面上一些成熟的 SaaS 服务。
最后求✨✨✨ ⭐️ —— bbt