我最近发现了一个不错的培训平台 Frappe LMS,这个工具目前还没有完整的中文翻译,如果要在国内使用,还是需要一个完整的中文界面的。
该项目提供了 i18n 翻译的功能。正常来说,只要提供了 i18n 翻译功能,只需要对 pot 生成的 po 文件进行编辑即可。像翻译 WordPress 插件一样,去借助一些翻译工具修改它的 .po 文件,就可以完成本地化了。
然后我找到了一个 AI 翻译项目 🔗 Quilljou/transmart - GitHub 。它可以将 i18n 文件用 AI 进行翻译,只需要自行提供 OpenAI API 即可。我正想尝试部署,发现它还在开发中,且暂不支持 Vue i18n。
当我想探索其他方案的时候,突然意识到,AI 翻译不就在眼前吗?
AI 翻译效果如何
我之前介绍过 Cursor ,其中的 Cursor Tab 功能非常好用。于是我在 Cursor 中使用 Cursor Tab 进行尝试进行编辑。

从图中可以看到,翻译效率非常高,不需要找传统的 AI 服务一次一次复制内容后去提问翻译,获取结果,再复制回来。
只需要在文件中连续点击 Tab、Tab、Tab 即可。
Frappe LMS 是一个中小型的项目,实测下来,我翻译了一个 5000 行的文件,大约包含 1000 个字段,连 Tab 带校验,大约耗时 30 分钟左右。
加快翻译效率和速度
如果是机翻,在批量翻译时,同一个单词会翻译出不同的结果,导致后期需要大量的时间去校准。而 AI 翻译在准确率和速度方面都大大改善了。
相比使用外部的翻译服务,AI 翻译的准确率进一步提高。而且能识别一部分明显错误,比如把“body”翻译成“身体”这种明显不符合语境的,AI 会结合上下文翻译为“正文”。
再比如,将用在“用户资料”界面的“bio”翻译成“生物”,这种不多,但目前还是会出现。当我删除它并再次 Tab 时,Cursor Small 模型还会帮你自动尝试其他翻译比如“简历”“小传”“简介”,这就意味着我几乎不需要再次输入文字。
究其原因,Cursor Tab 会将附近的内容作为输入,从而学习已翻译的内容,给出更合适的结果。

比机翻好在哪里
还有一个细节是,翻译中有一些结尾带标点符号、文中带变量的情况,比如文末的句点和冒号、{0}
意味着一个变量,AI 也能自动处理。
以往机翻常出现的问题有不少:过度翻译,比如将 {0}
当成需要翻译的一部分;未本地化翻译,比如不翻译逗号句点等符号出现中文配句点的情况;翻译固定搭配。

逐行翻译会很慢吗
目前来讲,如果借助 Cursor Tab 翻译是需要一行一行去 Tab 的。
我并非专业的翻译人员,但我结合以往给 WordPress 插件做本地化的经历,也是通过机翻粗略翻译一遍,再从头校验到尾,才能确保翻译准确率的。就算这样,还是需要用到实际环境下,才能看到到底对不对。
所以,一行一行去 Tab,某种程度上也是一种“检查翻译是否正确”的手段,只是改变了工作顺序,可以在首次填充的时候就完成校验过程,Tab 时排除大部分明显的错误,同时减少一些不易察觉的误译。
比如图中的 Medium 有多种翻译,有一处是指国外写作平台 Medium、有一处是指“传播媒介”(在线学习、离线学习),而不能翻译成“中”和“中等”。这种一词多义、不同位置不同翻译的情况,就有点超出 AI 的能力了,还是需要人工鉴别。
逐行检查就能发现这些错误。

目前的缺点
实事求是的说,翻译工作是需要结合语境的,AI 从 po 文件中获取到的信息仍然是有限的。