本地化文件翻译工具
翻译应用本地化文件,键和占位符原样保留
上传 JSON、PO、strings.xml、.strings、.xcstrings 或 XLIFF 文件,选择语言,即可拿回格式不变的译文文件,直接放进项目就能用。键、注释、顺序和格式都与原文件完全一致,每条字符串里的 {name}、{{count}}、%1$s 等占位符都会逐一检查。前段字符串免费,无需注册;完整任务最多 20 个文件、5,000 条字符串,一次付费 $5,无需订阅。AI聊天机器人翻译十几条字符串没问题,但面对成千上万个键的文件,往往会中途截断,还可能改掉键名或占位符。
{
"home.greeting": "Good morning, {name}Buenos días, {name}",
"home.nearby": "{count, plural, =0 {No trails near you yet} one {# trail near you} other {# trails near you}}{count, plural, =0 {Aún no hay rutas cerca de ti} one {# ruta cerca de ti} other {# rutas cerca de ti}}",
"trail.offline_done": "<b>{name}</b> is saved on this phone. You can use the map without a signal.<b>{name}</b> está guardado en este teléfono. Puedes usar el mapa sin señal.",
"trail.share_text": "I just finished {trail} with Trailbook! {km} km and {meters} m up. 🥾¡Acabo de terminar {trail} con Trailbook! {km} km y {meters} m de subida. 🥾",
"saved.empty": "You have not saved any trails yet.\nTap the heart on a trail to keep it here.Aún no has guardado ninguna ruta.\nToca el corazón en una ruta para guardarla aquí."
}
黄色:占位符和 ICU 复数语法,逐条检查。青色:标签、转义符和表情符号,原样保留。
键名不变。占位符不变。换成新语言。
只改动值。文件以相同的嵌套结构和顺序返回,命名为 es.json;任何丢失占位符的字符串,都会先重新翻译,再进入你的构建。
本页专门编写的演示应用;西班牙语字符串为该工具的真实输出,来自一个含 85 条字符串的文件。
你会得到什么
译文文件格式不变,命名和存放位置也符合各平台的要求:en.json 变成 es.json,strings.xml 放进 values-es 文件夹,Localizable.strings 放进 es.lproj。多个文件会打包成一个 ZIP 一起下载。下载前,每条译文都会与原文并排显示在屏幕上,你可以随时修改。
- JSON 和 ARB:嵌套键、数组、键的顺序、缩进和空格都与原文件一致。{count, plural, one {# item} other {# items}} 这类 ICU 消息会保留原有结构。ARB 文件中的 "@" 元数据会保留,并设置 @@locale。
- PO 和 POT:msgid 和 msgctxt 绝不改动;空白条目和 fuzzy 条目会被翻译,已有译文的条目保持不变。复数条目会按目标语言所需生成相应数量的 msgstr[n],文件头会写入 Language 和 Plural-Forms。
- Android strings.xml:支持 <string>、<string-array> 和 <plurals>;跳过 translatable="false";撇号和引号按 Android 的要求转义;<xliff:g> 中的内容不会被翻译。
- iOS 和 macOS:.strings 文件保留注释和编码(通常为 UTF-16);.xcstrings 字符串目录会为你的语言新增本地化,包含复数变体,已翻译的字符串予以保留。
- XLIFF 1.2 和 2.0:在每个未翻译的 <source> 后添加 <target>,保留 <g>、<x/>、<ph>、<pc> 等行内代码,并在文件中设置目标语言。
用AI聊天机器人翻译字符串文件,与用本工具有何不同
AI聊天机器人翻译简短的界面文字效果不错,把十几条字符串贴进对话框,通常没什么问题。真正的本地化文件麻烦在于篇幅和语法:成千上万个键、占位符、复数规则和转义字符,只要错一个字符,编译器或库就会报错。
| 你的情况 | AI聊天机器人 | 本工具 |
|---|---|---|
| 十个按钮文字 | 通常翻译得不错 | 翻译后直接还你文件 |
| 含 3,000 个键的文件 | 回复的篇幅得和文件一样长,所以往往写到一半就停了 | 按每块最多 60 条分块翻译全部字符串,每个任务最多 5,000 条 |
| 键和嵌套结构 | 整个文件重写一遍,键可能被翻译、改名或丢失 | 键从不送去翻译,文件以你的原文件为基础重建 |
| {name}、%1$s 或 :attribute 之类的占位符 | 通常会保留,但没有任何检查 | 逐条检查;丢失占位符的字符串会重新翻译,仍不通过则保留原文并列入清单 |
| 俄语、波兰语或阿拉伯语的复数 | 常常直接照搬英语的两种形式 | 写出目标语言所需的每一种复数形式,并为每种形式附上示例数字 |
| Android 字符串中的撇号 | 可能留下未转义的撇号,导致构建失败 | 撇号和引号按 Android 的要求转义 |
如何翻译本地化文件
-
1
上传文件并选择语言
放入同一项目的一个或多个文件:JSON、ARB、PO 或 POT、strings.xml、.strings、.xcstrings 或 XLIFF。选择目标语言和语气,并列出需要保留的产品名称。
-
2
免费查看前段字符串
前段字符串会显示在屏幕上,键与原文并排呈现。可直接修改任意一条。这一步无需账号。
-
3
解锁并下载
对前段字符串满意?$5 解锁完整任务,然后下载译文文件;如有需要留意的地方,还会附上一份警告清单。
为什么长字符串文件会难倒通用AI助手
本地化文件既是文本,也是代码。要在聊天中翻译它,AI助手得把整个文件重新写出来,包括键、括号和转义字符;而一个有几千条字符串的文件,比单次回复能容纳的篇幅还要长。它会写到一半停下,或者让你继续,最后你还得自己把几段拼起来。
语法是第二个难题。误翻的键、变成 {cuenta} 的 {count}、丢了美元符号的 %1$s、strings.xml 里未转义的撇号:每一处都只是长篇回复里的微小改动,却都可能导致构建失败,或让用户看到原始的占位符。
本工具从不让模型重写你的文件。它把文件读取为一条条字符串,只发送文本,并附上键和开发者注释作为上下文,每块最多 60 条,并要求每条字符串都给出一个答复。行内标签会先替换成简短的标记。每个答复都会经过检查:占位符相同、\n 等转义相同、标记相同、你列出的名称保持不变,每种复数形式齐全。未通过的字符串会重新翻译;若两次都不通过,则保留原文,并把该字符串列入清单供你查看。最后,文件以你的原文件为基础重建。
大家都在翻译什么
- React、Vue、Angular 和 Next.js 应用:i18next、vue-i18n、react-intl 和 ngx-translate 的 JSON 文件
- Flutter 应用:.arb 文件,@metadata 中的描述会用作上下文
- WordPress 插件和主题、Django 及其他 gettext 项目:.pot 模板和 .po 文件
- Android 应用:带字符串数组和复数形式的 res/values/strings.xml
- iOS 和 macOS 应用,支持 Localizable.strings 和 String Catalogs (.xcstrings)
- 从翻译平台或 Xcode 导出的 XLIFF 文件
不支持的内容
暂不支持读取 YAML、.properties、.resx 或 .stringsdict 文件;源文件中缺少的 i18next 复数键(key_one、key_few)也不会自动补充:工具只翻译你已有的键。在 .xcstrings 文件中,使用替换项或设备变体的字符串会保持原样。
已有的译文不会被覆盖:已填写的 PO 条目、标记为已翻译的 XLIFF 目标文本,以及字符串目录中已有你所选语言的条目,都会原样保留。一次付费最多可处理 20 个文件、5,000 条字符串;无限版每个任务最多可处理 15,000 条字符串。
这是带结构校验的机器翻译,很适合快速上线某种语言的第一个版本,也适合让项目保持同步。应用商店介绍、法律文本或带有品牌调性的内容,建议请母语人士审校。
如何获得好的效果
上下文决定了翻译质量:同样是“Save”,可能是“保存”,也可能是“节省”。像 settings.save_button 这样的键,以及文件中的注释(PO 中的 #.、ARB 中的 @key 描述、.strings 中的 /* 注释 */),都会随每条字符串一并发送,所以键名有意义、带少量注释的文件翻译效果更好。
请把应用名和产品名列入“不翻译”,对于有正式和非正式称呼之分的语言,请选择其一。先用免费的字符串试一下效果,解锁完整结果后再查看警告列表:每一条都会显示键、问题,以及模型返回的内容。
按语言和场景
价格
小任务与前段免费
免费
不超过 300 条字符串的任务可完整免费翻译,含下载,结果直接在屏幕上显示,无需注册。未注册每天 1 个任务,注册免费账户后每天 3 个。
完整任务
$5
一次付费,最多可处理 20 个文件、5,000 条字符串。无需订阅,永不过期。
无限版
每周 $19
全站所有工具通用,单个任务最多可处理 15,000 条字符串。
常见问题
ChatGPT 能翻译 JSON 本地化文件吗?
小文件通常可以。但包含数千个键的文件必须在一次回复中完整返回,AI聊天机器人往往会中途截断,而且没有任何机制检查每个键和占位符是否都完好保留。本工具会分块翻译这些值,检查每一个占位符,并以你的原文件为基础重建文件。
支持哪些格式?
JSON(i18next、vue-i18n、react-intl、ngx-translate 及类似格式)、Flutter ARB、gettext PO 和 POT、Android strings.xml、iOS 和 macOS 的 .strings 和 .xcstrings,以及 XLIFF 1.2 和 2.0。每个文件最大 10 MB,一个任务最多 20 个文件。
键和占位符会保留吗?
键绝不会被送去翻译。每条字符串中的占位符(如 {name}、{{count}}、%s、%1$d、%@、:attribute 和 %{name})、转义字符(如 \n)、行内标签和 emoji 都会被检查。如果某条字符串丢失了其中任何一项,会重新翻译;若仍然不通过,则保留源文本,并将该字符串列入警告列表。
复数是如何处理的?
ICU 消息会保持原有结构,并采用目标语言使用的复数类别。带 msgid_plural 的 PO 条目会生成目标语言所需数量的 msgstr[n] 形式,文件头也会写入对应的 Plural-Forms。Android 的 <plurals> 和 Xcode 的复数变体会按目标语言的类别写入,例如俄语的 one、few、many 和 other。
已经翻译过的字符串会怎样?
会保留。只有空的或 fuzzy 的 PO 条目、没有完成目标文本的 XLIFF 单元,以及没有你所选语言的字符串目录条目才会被翻译。在 JSON、.strings 和 strings.xml 中,每个值都会被视为源文本。
可以翻译成哪些语言?
共 41 种语言,包括西班牙语、法语、德语、意大利语、葡萄牙语(巴西和葡萄牙)、荷兰语、波兰语、俄语、乌克兰语、土耳其语、阿拉伯语、希伯来语、印地语、印尼语、越南语、泰语、日语、韩语和中文(简体和繁体)。
免费吗?
每个任务的前几条字符串免费翻译,并直接显示在屏幕上,无需注册。完整任务连同下载文件,一次付费 $5。无限版每周 $19,全站所有工具通用。小任务例外:不超过 300 条字符串的任务全部免费,下载也不收费。
我的文件是保密的吗?
只有你本人能打开你的任务。字符串仅为翻译之目的发送给 AI 模型服务商,且所用线路不会将你的数据用于训练。无需注册上传的任务会在 7 天后删除,你也可以随时自行删除任何任务。
更新于 2026年10月23日 · APPFACT STUDIO LTD