JSON 翻译实战:jsontt 让多语言文件转换从一小时变成三分钟

JSON 翻译实战:jsontt 让多语言文件转换从一小时变成三分钟

【免费下载链接】json-translatorjsontt 💡 - AI JSON Translator with GPT / Gemma / Mixtral / llama + other FREE translation modules to translate your json/yaml files into other languages ✅ Check Readme ✌ Supports GPT / Gemma / Mixtral / llama / DeepL / Google / Bing / Libre / Argos项目地址: https://gitcode.com/gh_mirrors/js/json-translator

周五下午四点半,产品经理端着咖啡走过来:"下周要给 App 加日语、韩语、法语、德语四个语言版本。"如果你的团队还在靠"复制文件 → 逐条粘贴到网页翻译 → 贴回来 → 手工对齐结构"的方式干活,我建议你先看完这篇。jsontt是一个免费开源的 JSON/YAML 翻译工具,能一次性把一个语言文件翻译成上百种语言,自动保持嵌套结构、变量占位符和 URL 链接不变。这篇文章会带你从零跑通它的完整流程,并分享几个能显著提升效率的实用技巧。

多语言文件翻译的麻烦到底出在哪

先不急着介绍工具,说说大多数团队卡在哪儿。翻译 JSON 文件这件事,看起来只是"把值换成别的语言",实际操作时会踩到四类坑:

  1. 结构被搞乱:文件里常常嵌套好几层对象,还有数组套对象,手动粘贴最容易漏括号、错缩进。
  2. 不该翻的被翻了{{username}}{email}这类占位符一旦被翻译引擎改掉,整个页面直接渲染异常。
  3. URL 被破坏:文案里夹带的链接,翻译后可能变得残缺。
  4. 重复劳动:改了一个文案,五个语言文件都要跟着重新翻译一遍。

jsontt 恰好把这四个问题都处理掉了,而且它允许你用完全免费的方式完成这件事。

jsontt 是什么:免费开源的 JSON/YAML 翻译命令行工具

jsontt 是一个 Node.js 编写的开源命令行工具,核心能力就一句话:读取 JSON 或 YAML 文件,翻译其中的文案,再按原结构写回磁盘。它同时提供 CLI 和 npm 包两种使用方式,翻译引擎覆盖了 Google、Bing、Libre、Argos 等免费服务,也支持 GPT-4o、GPT-5、Gemma、Mixtral、Llama 等 AI 模型。

一个很省心的设计是:翻译结果默认生成在源文件同目录下,文件名按语言代码命名,你不需要额外指定输出路径。整个项目采用 MIT 协议开源,代码结构也值得翻一翻——CLI 入口在src/cli/cli.ts,翻译逻辑集中在src/modules/functions.ts,JSON 深层遍历在src/core/json_object.ts,文件读写则在src/core/json_file.ts

安装 jsontt:一条 npm 命令搞定

前置要求是 Node.js 16 及以上版本,安装只需一行命令(想用 CLI 就装全局):

npm install -g @parvineyvazov/json-translator

只想在某个项目里调用它的 API,用本地安装即可:

npm install @parvineyvazov/json-translator

装完在终端敲一下jsontt --help,能看到所有可用的参数,确认环境就绪。

第一次使用:一条命令翻译整个 JSON 文件

假设你手上有一个英文的en.json,结构长这样:

{ "login": { "title": "Login {{name}}", "email": "Please, enter your email" }, "homepage": { "welcoming": "Welcome!" } }

想翻译成简体中文、日语和法语,只需要一条命令:

jsontt en.json --module google --from en --to zh-CN ja fr

命令执行过程中,终端会实时显示翻译进度(已翻译条数 / 总条数)。跑完之后,en.json同目录下会多出三个文件:

├── en.json ├── zh-CN.json ├── ja.json └── fr.json

如果你希望自定义输出文件名,加上--name参数即可,比如--name myFiles会生成myFiles.zh-CN.json。注意默认参数可以省略:直接运行jsontt en.json会进入交互式问答,逐个询问你要用哪个引擎、源语言和目标语言。

变量和链接不会被误翻的翻译引擎

这是 jsontt 最让我放心的地方,它内置了一套"忽略机制",实现位于src/core/ignorer.ts。翻译前,工具会把两类内容先保护起来:

  • 占位符{{name}}{name}两种写法都会被原样保留。
  • URL:文本中的链接会被临时隐藏,翻译完成后再放回原位。

看一个实际效果,下面这段文案翻译成西班牙语:

{ "one": "Welcome {{name}}", "two": "Visit https://example.com for more info" }

输出为:

{ "one": "Bienvenido {{name}}", "two": "Visite https://example.com para obtener más información" }

{{name}}和链接都完好无损,这种细节在 i18n 项目里能帮你省掉大量排查 bug 的时间。

从免费引擎到 AI 模型:翻译引擎怎么选

jsontt 内置了 16 种翻译模块,分为免费和需要密钥两类。我整理了一张对照表:

类型模块说明
完全免费google / google2Google 翻译,覆盖 104 种语言
完全免费bingMicrosoft Bing 翻译,覆盖 110 种语言
完全免费libreLibre Translate,29 种语言
完全免费argosArgos Translate,17 种语言
完全免费llama-cpp本地运行的 llama 模型
需要密钥deepl需设置DEEPL_API_KEY环境变量
需要密钥gpt-4o / gpt-4 / gpt-3.5-turbo / gpt-5 系列需设置OPENAI_API_KEY
需要密钥gemma-7b / gemma2-9b / mixtral-8x7b / llama3 系列需设置GROQ_API_KEY

日常翻译我用--module google就足够;如果追求更好的语气和上下文一致性,可以切到 AI 引擎,比如:

jsontt en.json --module gpt-4o --from en --to zh-CN --name app

完整支持的语言清单在项目的docs/LANGUAGES.md里可以查到,支持 100 多种语言互译,源语言也可以填auto让工具自动识别。

三个值得打开的进阶开关

1. 故障自动切换:--fallback

在线翻译偶尔会抽风,超时或限流都会中断任务。开启 fallback 后,某个引擎失败会自动尝试其他可用模块,适合批量翻译时用:

jsontt en.json --module google --from en --to zh-CN ja --fallback yes

2. 翻译缓存:--cache

重复翻译相同的句子很浪费时间和请求额度。开启缓存后,工具会把已翻译的内容写入本地缓存文件(cache_语言对.json),下次遇到相同文案直接复用:

jsontt en.json --module bing --from en --to zh-CN --cache yes

3. 并发控制:--concurrencylimit

并发数越高翻译越快,但也更容易触发服务端的限流。默认值是 3,网络稳定时可以适当调高:

jsontt en.json --module google --from en --to zh-CN ja ko fr --concurrencylimit 10

另外还有一个容易被忽略的能力:增量翻译。如果目标语言文件已经存在,jsontt 会先读取旧文件,把已翻译过的文案直接复用,只翻译新增或修改的内容。这意味着日常迭代时,你每次跑命令的时间会越来越短。

把翻译能力写进代码:npm 包调用方式

不想敲命令行的话,可以把它作为依赖集成到自己的脚本里。比如翻译一个深层嵌套的 JSON 对象到多种语言:

import * as translator from '@parvineyvazov/json-translator'; const en_lang = { login: { title: 'Login', email: 'Please, enter your email', }, profile: { edit_screen: { edit: 'Edit your informations', }, }, }; const [french, japanese] = await translator.translateObject( en_lang, translator.languages.English, [translator.languages.French, translator.languages.Japanese] );

翻译文件同样简单,translateFile会直接把结果保存到源文件同目录:

await translator.translateFile('C:/files/en.json', translator.languages.English, [ translator.languages.German, ]);

顺带一提,翻译单个单词或句子可以调用translateWord,适合在构建脚本里做小规模处理。

谁适合用 jsontt

  • 前端开发:React / Vue / Angular 项目的 i18n 多语言文件批量生成,这是最典型的场景。
  • 后端与运维:把系统配置、错误提示、API 返回消息做多语言本地化。
  • 移动端团队:App 内文案、推送通知模板的本地化处理。
  • 独立开发者:没有预算买付费翻译服务,用免费引擎就能跑起来。

收尾建议:从一次小范围试用开始

别一上来就处理最大的文件。我建议你先拿一个十几个 key 的小配置文件跑通流程,确认输出结构符合预期,再上生产规模的目录。翻译完成后,记得抽查几条关键文案的人工质量,毕竟机器翻译只能保证"能看懂",不能保证"语气对"。

想动手体验的话,可以克隆仓库到本地研究源码,再全局安装跑一遍:

git clone https://gitcode.com/gh_mirrors/js/json-translator cd json-translator npm install -g @parvineyvazov/json-translator

然后拿着你的第一个en.json试一下:

jsontt en.json --module google --from en --to zh-CN ja ko

三分钟后,你大概率会跟我一样,把复制粘贴翻译这个动作从工作流里彻底删掉。

【免费下载链接】json-translatorjsontt 💡 - AI JSON Translator with GPT / Gemma / Mixtral / llama + other FREE translation modules to translate your json/yaml files into other languages ✅ Check Readme ✌ Supports GPT / Gemma / Mixtral / llama / DeepL / Google / Bing / Libre / Argos项目地址: https://gitcode.com/gh_mirrors/js/json-translator

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考