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 文件这件事,看起来只是"把值换成别的语言",实际操作时会踩到四类坑:
- 结构被搞乱:文件里常常嵌套好几层对象,还有数组套对象,手动粘贴最容易漏括号、错缩进。
- 不该翻的被翻了:
{{username}}、{email}这类占位符一旦被翻译引擎改掉,整个页面直接渲染异常。 - URL 被破坏:文案里夹带的链接,翻译后可能变得残缺。
- 重复劳动:改了一个文案,五个语言文件都要跟着重新翻译一遍。
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 / google2 | Google 翻译,覆盖 104 种语言 |
| 完全免费 | bing | Microsoft Bing 翻译,覆盖 110 种语言 |
| 完全免费 | libre | Libre Translate,29 种语言 |
| 完全免费 | argos | Argos 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 yes2. 翻译缓存:--cache
重复翻译相同的句子很浪费时间和请求额度。开启缓存后,工具会把已翻译的内容写入本地缓存文件(cache_语言对.json),下次遇到相同文案直接复用:
jsontt en.json --module bing --from en --to zh-CN --cache yes3. 并发控制:--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),仅供参考