Dev.to · 1 min read

AI 辅助 i18n:我是怎么把 3 小时翻译压缩到 30 分钟的

AI 辅助 i18n:我是怎么把 3 小时翻译压缩到 30 分钟的

接手老项目第一天,打开代码仓库,语言文件里躺着三千多条键值对,重复两百多条,还有一百多条压根找不到引用。下午产品经理又丢来二十个新文案,要求当晚全部翻成中英日韩四种语言。 以前碰上这种事,基本就是打开在线翻译网页,复制粘贴,手动调格式,一干就是三四个小时。现在不一样了,AI 助手两分钟生成全部文件,我再花十分钟检查修正。 这篇文章把我这几周折腾出来的方法、踩过的坑和总结的经验完整写出来,希望能帮你少走弯路。 我负责一个面向海外市场的 SaaS 产品,前端用 React,国际化方案是传统的 i18next 加 JSON 文件。每个语言一个文件,结构是嵌套对象。项目跑了一年多,语言文件从最初的一千条涨到了三千多条。 维护成本越来越高,人工翻译跟不上迭代速度,漏翻错翻是家常便饭。我试用过几款商业翻译管理平台,功能确实强大,但价格不菲,而且需要把整个工作流迁移过去,团队学习成本太高。 所以我开始琢磨,能不能用 AI 助手直接生成和更新这些文件。 直接丢一个三千行的 JSON 文件给 AI,它很可能被绕晕,输出还可能截断。 我的做法是,先写个脚本,把最外层节点的键名和每个键对应值的长度统计出来,生成一个结构摘要。比如 common.ok 对应字符串,form.username 对应字符串,errors.networkTimeout 对应字符串。 然后把这个摘要发给 AI,让它先用自己的话复述一遍这个结构是什么意思。确认它理解了之后,再给它一个真实的片段,大概五十条,让它模仿着写出一段新内容。 这一步很关键,AI 只有理解了你的数据结构,才能生成符合规范的代码。 产品经理给的新文案是中文,需要翻译成英文、日文和韩文。 我写了一个 Node.js 脚本,读取一个包含新文案的 TXT 文件,然后调用 AI 的 API,把每条文案和它的上下文一起发给模型,让它返回四种语言的 JSON 对象。 这里有个细节,上下文很重要。比如按钮文字“保存”,如果上下文是“保存草稿”,翻译成英文是 Save Draft,如果上下文是“保存设置”,就是 Save Settings。所以我会在每条文案前面加上它的位置信息,比如从哪个页面的哪个模块提取的。 脚本把 AI 返回的结果直接写入对应的语言文件,并且自动格式化,保持缩进一致。 第一次跑通这个流程,我只花了五分钟就生成了四个语言文件,每个文件新增了二十条内容。 但检查的时候发现,日文翻译里有一处把“打开”翻译成了“オープン”,而项目里其他地方用的是“開く”。还有一处英文翻译把“删除”写成了 Delete,但项目里统一用的是 Remove。 这说明 AI 没有充分学习项目现有的术语表。于是我调整了策略,在调用 AI 之前,先扫描现有语言文件,提取高频词和对应翻译,生成一个术语表,然后把这个术语表作为提示词的一部分发给 AI。 比如在提示词里写明:在项目中,“删除”统一用 Remove,“打开”统一用 Open,“保存”统一用 Save,不要用 Delete 或 Open 的变体。 加了术语表之后,翻译的一致性明显提升了。 老项目里重复键有两种情况。 一种是完全一样的键名,但值不同,这通常是不同人维护时覆盖了。另一种是不同键名但值相同,比如 login.title 和 login.header 都是“登录”。 我写了一个脚本,遍历所有语言文件,找出键名相同但值不同的条目,以及值相同的条目,生成一个报告。然后把这个报告发给 AI,让它判断哪些键应该保留,哪些应该合并,并给出理由。 AI 给出的建议大部分是合理的,比如 login.title 和 login.header 都指向同一个页面标题,建议合并成 login.title。但有时候 AI 也会判断失误,比如两个值相同但语义不同,一个是动词一个是名词。所以最终的决策还是我来做,AI 只是提供参考。 再说说废弃键。项目重构后,有些页面删除了,但语言文件里的键还留着。 我写了一个脚本,扫描前端代码,提取出所有被引用的 i18n 键名,然后和语言文件里的键做差集,找出那些没有被引用的键。 这个差集列表我交给 AI,让它检查一下是否有遗漏的引用,因为有些键可能是通过变量拼接的,静态扫描找不到。AI 会给出一个置信度,对于置信度高的,我直接删除;对于置信度低的,我保留并标记为待确认。 这样一轮下来,语言文件从三千多条精简到了两千八百条,体积小了百分之七,加载速度也快了一点。 语言文件不是一次性生成的,项目每天都在迭代。 我建立了一个 GitHub Action,每次有新的文案提交时,自动触发一个脚本,提取新增的文案,调用 AI 生成翻译,然后提交一个 PR,让开发者检查。 这个流程跑了两周,一共提交了十一个 PR,每个 PR 平均包含五到十条新翻译。开发者只需要点一下合并按钮,不用再手动复制粘贴。 当然,AI 不是万能的,有些翻译需要人工润色,比如涉及品牌名、法律条款、文化敏感的内容,我都会在 PR 描述里标注“AI 生成,请人工复核”。 有一次 AI 返回的 JSON 里多了一个逗号,导致整个前端白屏。从那以后,我每次生成完都先跑一遍 JSON 解析,确保格式正确再写入文件。 还有一次,我让它翻译一条新文案,它可能顺手把键名也改了,导致前端引用不到。解决方法是,在提示词里明确要求,键名必须从原文中提取,不能改动。 如果我一次给 AI 太多条文案,它可能会忘记前面的术语表,导致翻译不一致。所以我控制每次最多二十条,并且每十条就重新强调一次术语表。 我让 AI 生成翻译后,会把生成的文件和旧文件做 diff,重点检查那些值没有变化的条目,因为 AI 可能偷懒,直接把原文复制过来。 另外,对于日文和韩文,AI 的翻译质量明显高于英文,但偶尔会有敬语使用不当的问题。所以我建议,如果项目有海外用户,最好找一个母语者做抽检,哪怕每个月只抽检一次,也能发现很多 AI 察觉不到的细节。 这个流程已经在我团队里跑了一个月,整体效率提升了大概百分之六十。以前一个迭代周期要花半天来处理国际化,现在压缩到半小时。 但我并不打算完全放手,AI 生成的内容始终需要人工把关,尤其是涉及品牌形象和用户体验的文案。 我的原则是:AI 负责把基础翻译做到八十分,剩下的二十分靠人补足。 如果你也想尝试,建议从一个小模块开始,比如先让 AI 生成一个新增页面的语言文件,跑通流程后再逐步扩大范围。 工具不在多,关键是用对方法。

This is a summary aggregated from Dev.to. Read the complete article on the original site:

Read full article at Dev.to

More Programming & Dev News