跳到正文
Locale Gaps

面向多语言应用的翻译检查

每一条文本,出境前都要先办好签证。

Locale Gaps 把源语言文件与每一份译文逐一比对,拦下所有会在界面上出问题的地方:缺失的键、空白或未翻译的文本、丢失的占位符、损坏的标记,以及某种语言需要但文件里没有的复数形式。然后为译者生成一份只包含剩余工作的文件。

检查内容
入境印章P<LOCALE<GAPS

这是什么

一个应用翻译文件检查工具。支持 JSON、YAML、.properties、Apple .strings、gettext .po 或纯键列表,并把每种语言与源语言进行比对。

适合谁

前端和移动端开发者、发布多语言产品的产品经理、本地化负责人,以及想要一份清晰清单而不是一张原始键截图的译者。

解决什么问题

缺失的键会让用户看到 cart.checkout 这样的文字,丢失的占位符会把价格显示成 {{amount}},缺少复数形式会让俄语或阿拉伯语读起来不通。这些问题在发布前就能看到。

检查你的翻译文件

粘贴源文件,为每种语言添加一个输入框,然后点击“检查翻译”。所有内容都不会离开本页面。

源语言

其他所有语言都要与之对应的文件。支持嵌套 JSON、带 en: 这类根节点的 YAML、key=value 行、"key" = "value"; 行、.po 文件或纯键列表。

译文 1

粘贴该语言的文件。格式可以与源文件不同。

选项

过长的译文经常撑破按钮和菜单。1.6 表示长出 60%。

用逗号分隔,例如品牌名或产品名。数字、代码和单个品牌词已自动忽略。

还没有检查

粘贴一个源文件和至少一份译文,或加载示例应用查看完整报告。

检查内容

每条规则都来自真实界面上出过的问题,不依赖任何模型或猜测。

  1. 缺失和空白的键

    每个源键都必须出现在译文中并且有文本,否则用户会看到 cart.checkout 或一个空按钮。

  2. 未翻译的文本

    与源文本相同的内容会被标出,除非它是数字、代码、链接或你允许的词,例如品牌名。

  3. 占位符

    {{name}}、{name}、%s、%1$d、%{name} 和 :name 这类变量必须与源文本完全一致。改了名的变量什么也不会显示。

  4. 复数形式

    复数规则直接取自你的浏览器,与应用使用的规则相同。俄语需要 one、few 和 many,阿拉伯语需要六种形式。ICU 消息和 items_few 这类 i18next 后缀都会检查。

  5. 标记

    <a>、<b> 或 <0> 这类标签必须在翻译后保留,否则链接和强调会消失。

  6. 长度、多余的键和重复

    过长的译文、只存在于译文中的键以及重复定义的键,会以较低优先级列出。

使用方法

  1. 粘贴源文件

    通常是英文。打开文件或粘贴内容,嵌套键会展开成 checkout.pay 这样的路径。

  2. 添加每种语言

    输入语言代码并粘贴对应文件,每种语言可以使用不同格式。

  3. 点击“检查翻译”

    每种语言会得到一个印章,显示已有键和可发布文本的比例,以及每类问题的数量。

  4. 修复或交付

    筛选问题,然后为每种语言下载待翻译文件,或下载完整的 CSV。

  5. 保留说明

    把发布说明复制到合并请求或发布检查清单中。哈希值可以证明报告未被改动。

它不做什么

  • 不评判翻译质量或语气。错误但完整的句子也会通过。
  • 不翻译任何内容,也不会把文本发送给任何服务。
  • YAML 支持覆盖常见的语言文件结构:嵌套键和单行值。
  • 暂不检查 ICU 消息中的性别和 select 规则,只检查复数。

常见问题

我的文件会被上传吗?

不会。解析和检查都在本页面中完成,关闭标签页后文本就不存在了。

为什么德语里一个两种语言都相同的词被标为未翻译?

有些词确实相同。把它们加入“可以保持不变的词”,再运行一次检查即可。

复数规则从哪里来?

来自浏览器中的 Intl.PluralRules,它遵循大多数应用使用的 Unicode CLDR 数据。

可以只检查键,不检查文本吗?

可以。粘贴纯键列表即可,报告会列出缺失和多余的键,并跳过文本检查。

联系开发者

有问题、想法或工作机会?欢迎通过 X 或 Telegram 联系。

支持开发者

如果这个工具帮你节省了时间,可以用自己的钱包向这个 EVM 地址打赏。

0xd28Fd90eD69092bd01598f237aad33a0cc9c3EeA