Angular i18n 中缺失的部分

发布: (2026年2月1日 GMT+8 08:42)
7 min read
原文: Dev.to

Source: Dev.to

实际出错的地方

在生产环境的应用中,翻译文件不是一次性构建产物。

它们是由人类和外部工具编辑的长期文档。

一个典型的语言文件包含的内容远不止翻译文本:

  • 翻译者备注
  • 上下文分组
  • 审批标记
  • 供应商特定的元数据

…为每个字符串提供意义和历史的信息。

然而,每当 messages.xlf 变化时,团队就被迫进入风险工作流:

  • 手动编辑 XML
  • 复制‑粘贴合并
  • 重新生成语言文件
  • 假设 XLIFF 只是键‑值数据的脆弱脚本

结果几乎总是相同:静默的数据丢失

  • 备注消失。
  • 已批准的翻译被重置。
  • 上下文丢失。

没有人会注意到,直到翻译者抱怨或构建失败。

Angular 并未解决此问题。大多数第三方工具也没有。

什么是 xlf-sync 的设计目标

xlf-sync CLI tool

xlf-sync 存在的目的非常明确:

messages..xlf 文件 结构上messages.xlf 保持同步,且不破坏已有的内容

生成翻译、不 “清理” XML,也不假设可以安全地重新创建本地化文件。

相反,它把这些文件视为 需要保留的宝贵状态

  • 源文件仍然是 键的存在 的权威。
  • 本地化文件仍然是 其他所有内容 的权威。

元数据才是真正的区分因素

大多数同步工具会从头重建翻译单元,这不可避免地会剥离工具不理解的信息。

xlf-sync 采用相反的做法:

  • 现有的翻译单元绝不被重新构建。
  • 它们以字节为单位读取并保留,仅在源文件引入新内容时才进行扩展。

如果译者两年前添加了备注,它会保留下来。
如果 CAT 工具添加了元数据,它也会存活。
如果某条目被标记为已批准,它仍然保持已批准状态。

这不是一个便利功能——它是该工具的核心保证。

处理更改而不删除历史

应用程序不断变化:字符串会被添加、删除和重新组织。

xlf-sync 做了一个重要假设:删除不等同于移除

当一个键从源文件中消失时,你可以决定如何处理它。你可以:

  • 将其标记为废弃。
  • 将其移动到专用的墓地文件。
  • 明确删除——如果这真的是你想要的。

没有任何隐式操作。没有任何东西会意外消失。

这使得重构更安全,并且即使功能暂时被移除,也能保留翻译工作。

为真实的 Angular 代码库而设计

许多 Angular 仓库并不是干净的全新项目。它们包含遗留模块、迁移以及混合的格式。

  • xlf-sync 同时支持 XLIFF 1.2 和 2.0,并能按文件检测版本。
  • 即使同一项目中同时存在两种格式,它也能正常工作。

这使得它不仅适用于新应用,也适用于有历史的成熟系统。

可见性和自动化很重要

Angular 的 CLI 并未提供翻译健康状况的清晰视图。

xlf-sync 填补了这一空白,提供:

  • 快速的控制台报告。
  • 一个独立的 HTML 仪表盘,可视化各语言环境的翻译覆盖率。

该仪表盘在工程团队之外尤其有用——它让翻译进度一目了然,无需打开 XML 文件。

对于自动化,check 命令将 i18n 变成真正的 CI 关注点。当翻译出现以下情况时,你可以让构建失败:

  • 缺失
  • 不同步
  • 与源文件出现漂移

这将 i18n 从事后考虑转变为质量门槛。

Angular 从未发布的缺失功能:翻译仪表盘

xlf-sync 翻译仪表盘

Angular 的 i18n 工具会生成文件,但它 完全没有可视化。你无法了解:

  • 哪些语言环境落后。
  • 已翻译了多少。
  • 实际缺口在哪里。

xlf-sync 通过一个独立的 HTML 仪表盘 解决了这个问题。

npx xlf-sync dashboard

运行该命令会生成一个自包含的报告,直观展示所有语言环境的翻译覆盖率。它会显示:

  • 键的总数量。
  • 已翻译的数量。
  • 缺失的键。

全部无需打开 XLIFF 文件。

由于仪表盘是静态 HTML,它可以自然地嵌入 CI 流程。团队常把它作为构建产物附加,使翻译进度与其他质量指标一起可见。

测试报告和覆盖率指标

这不仅仅是视觉上的美化。
它是为了让 i18n 可度量

与其他工具的区别

大多数工具把 locale 文件视为派生产出。
xlf‑sync 把它们视为资产。

正是这一点决定了它的行为:

  • 不会进行破坏性的同步
  • 不会丢失元数据
  • 不会静默重写

它把安全性置于巧妙性之上——这正是长期多语言项目所需要的。

了解更多

  • GitHub 仓库:
  • 官方文档与着陆页:
  • npm 包:

结束语

Angular i18n 能很好地完成提取工作。
其余的全部交由开发者处理。

xlf‑sync 并不取代 Angular 的工具链——而是对其进行补充。

如果你的应用拥有真实的翻译、真实的译者以及真实的变更,这个问题迟早会显现。

xlf‑sync 只需从那一刻起将风险消除即可。

Back to Blog

相关文章

阅读更多 »

推出 GTranslate 捆绑包

“语言是文化的路线图。它告诉你它的人民来自何处以及将去往何方。” – Rita Mae Brown 引言 在当今的全球网络中…