标准翻译工具无法理解 JSON。
通用翻译 API 将您的 JSON 视为一大段文本。它们会同时翻译键名和对应值。它们会扁平化嵌套对象。它们会错误地连接字符串。返回的结果是结构破损的 JSON,需要手动修正后才能使用。如果您维护生产应用的本地化文件,您会知道将它们输入标准翻译 API 反而增加了工作量。
问题不仅仅是键名。标准翻译 API 还会破坏插值变量。像“Hello {name}, you have {count} messages”这样的字符串,变量名会被翻译成“Hola {nombre}, tienes {cuenta} mensajes”,这会破坏所有期望原始变量名的运行时环境。接下来就是数小时的调试。
对于维护多语言生产应用本地化文件的团队来说,这不是理论问题,已经发生过。问题是每次手动修复需要多长时间。
PolyLingo 在翻译前遍历您的 JSON。
PolyLingo 理解 JSON 结构。它递归遍历您的对象,识别包含可翻译文本的字符串值,仅将这些值发送给翻译模型。键名绝不修改。数字、布尔值、null 和非字符串类型保持不变。输出是结构完全相同的有效 JSON——只是字符串值被翻译了。
插值变量——{name}、{{count}}、%s 及类似模式——在翻译过程中被识别并完整保留。它们在翻译前被替换为占位符,输出时恢复原状。翻译模型永远不会将它们视为可翻译文本。
数组处理正确:每个字符串元素被翻译,数字索引和数组结构保持不变。包含字符串和非字符串(数字、对象)的混合数组也被正确遍历,非字符串类型保持不变。
{
"nav_home": "Home",
"nav_pricing": "Pricing",
"hero_title": "Grow your audience globally",
"hero_cta": "Get started for free",
"footer_rights": "All rights reserved."
}{
"nav_home": "Accueil",
"nav_pricing": "Tarifs",
"hero_title": "Développez votre audience mondiale",
"hero_cta": "Commencer gratuitement",
"footer_rights": "Tous droits réservés."
}{
"nav": {
"home": "Home",
"pricing": "Pricing",
"blog": "Blog"
},
"hero": {
"title": "Grow your audience globally",
"subtitle": "Translate in seconds.",
"cta": "Get started for free"
},
"errors": {
"notFound": "Page not found",
"serverError": "Something went wrong"
}
}{
"nav": {
"home": "Inicio",
"pricing": "Precios",
"blog": "Blog"
},
"hero": {
"title": "Expande tu audiencia globalmente",
"subtitle": "Traduce en segundos.",
"cta": "Comienza gratis"
},
"errors": {
"notFound": "Página no encontrada",
"serverError": "Algo salió mal"
}
}curl -X POST https://api.usepolylingo.com/v1/translate \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "{\"nav_home\": \"Home\", \"hero_title\": \"Get started\"}",
"format": "json",
"targets": ["es", "fr", "de", "ja", "zh"],
"model": "standard"
}'
# Response:
# {
# "translations": {
# "es": "{\"nav_home\": \"Inicio\", \"hero_title\": \"Empezar\"}",
# "fr": "{\"nav_home\": \"Accueil\", \"hero_title\": \"Commencer\"}",
# ...
# }
# }PolyLingo 对每次 JSON 翻译的保证
- ✓键名绝不修改
- ✓递归处理嵌套对象和数组
- ✓数字、布尔值、null 保持不变
- ✓一次请求支持全部 43 种语言
- ✓自动检测为 JSON — 无需格式标记
- ✓支持扁平和深度嵌套的本地化文件
- ✓插值变量({name}、{{count}}、%s)完全保留
- ✓输出为有效 JSON — 可直接解析,无需修改
翻译本地化文件的三步法
粘贴您的 JSON 或调用 API
使用无代码翻译器进行一次性翻译:粘贴 JSON,选择语言,下载翻译文件。自动化请调用 POST /v1/translate,传入 JSON 内容和目标语言代码。
一次响应获取所有语言
API 返回一个 JSON 对象,每个目标语言一个条目,包含结构完全相同的完整翻译本地化文件。无需逐语言调用,无需循环,一次请求获取所有输出。
将输出文件放入 messages 目录
将每个翻译文件写入 messages/es.json、messages/fr.json、messages/de.json,或您的 i18n 库期望的位置。结构与源文件完全相同,无需额外处理。
JSON 翻译最重要的应用场景
使用 next-intl 或 i18next 进行应用国际化
直接翻译 messages/*.json 或 locales/*.json 文件。键名保持不变,嵌套保留,插值变量不变。将文件放入 messages 目录并部署。
CMS 内容导出
无头 CMS 平台通常以 JSON 格式导出结构化内容。PolyLingo 翻译字符串值,同时保留字段名、嵌套内容类型和非字符串值(如日期、布尔值、ID)。
API 响应和配置文件
任何包含可翻译字符串值的 JSON 结构——产品描述、通知模板、通过 API 提供的应用内文案——都可以翻译,且不修改应用依赖的结构。
关于 JSON 翻译的常见问题
插值变量如 {name} 或 {{count}} 会被保留吗?
会的。PolyLingo 会识别常见插值模式,包括 {variable}、{{variable}}、%(variable)s 和 %s,翻译前替换为稳定占位符,翻译后恢复原变量名。翻译模型不会将变量名视为可翻译内容。
非字符串值(数字、布尔值、null)会怎样?
非字符串值完全保持不变。PolyLingo 只翻译包含自然语言文本的字符串值。数字、布尔值、null 以及非字符串数组保持与源文件完全一致。
PolyLingo 能处理深度嵌套的 JSON 结构吗?
能。PolyLingo 递归遍历任意深度的对象结构,翻译所有字符串值,无论嵌套多深。
如果某些键包含不可翻译内容如 slug 或代码怎么办?
PolyLingo 默认翻译所有字符串值。如果您有不应翻译的字符串字段——如 slug、语言代码、技术标识符——建议从发送的 JSON 中排除它们,或使用即将推出的显式格式参数指定跳过字段。大多数本地化文件中,所有字符串值都应翻译。
支持 JSON5 或 JSONC(带注释的 JSON)吗?
目前 PolyLingo 处理标准 JSON。JSON5 和 JSONC(带注释)应预先处理,去除注释并转换为标准 JSON 后再发送。这是构建流程中的常见步骤,开销极小。
一次请求最多支持多少语言?
最多支持 30 种语言。响应包含每个语言代码对应的翻译 JSON 对象。速率限制因套餐而异——免费套餐允许每分钟 10 次请求,Growth 和 Scale 套餐允许每分钟 200–600 次请求。