Angular 中的 i18n 翻译文件更新

Updates to i18n translation files in Angular

我目前正在为我公司使用的 Angular 应用程序添加 en locale。经过一番思考,我们决定使用 Angular 5+ 原生 i18n 支持。

然而,根据我的理解,每次使用 ng xi18n --outputPath src/locale/ --locale en 生成翻译文件时,都会创建一个新文件。这意味着,每次添加新的 i18n 标签时,之前已经包含旧翻译的 XLF 文件需要与新翻译合并。

这似乎很麻烦,因此我的问题是:有没有一种方法可以将新的跨单位附加到已经存在的 XLF 文件中?或者是否已经有可以将这两者合并在一起的工具?

已编辑答案

您可以使用 xliffmerge 工具。它可以在您在 html

中添加新翻译后合并翻译文件

这里是 tutorial angular

基本上,在 运行 执行正常的提取命令后,您调用 xliffmerge 并传递要为其生成翻译文件的语言

ng xi18n --outputPath src/locale/ --locale en && xliffmerge --profile xliffmerge.json en fr

您可以为工具指定 json 配置

{
  "xliffmergeOptions": {
  "srcDir": "src/locale",
  "genDir": "src/locale"
   }
}

原回答

尝试为您的翻译设置自定义 ID

https://angular.io/guide/i18n#set-a-custom-id-for-persistence-and-maintenance

<h1 i18n="@@introductionHeader">Hello i18n!</h1>

下次您 运行 提取命令时,它只会添加新块,但不会触及现有块

顺便说一句,我认为使用本机选项是一个不错的选择,因为主要替代方案 (ngx-translate) 的维护者实际上正在与 angular 团队合作开发本机方法

我以前的解决方案有一些问题:ERROR: language [...] node_modules\@ngx-i18nsupport\ngx-i18nsupport\xliffmerge\xliffmerge" is not valid

我将 xliffmergeangular-cli 一起使用:https://github.com/martinroob/ngx-i18nsupport 到 extract/merge i18n。它为您生成 package.json 中的命令和 angular.json 中的新任务配置。它在合并时保留上下文组和注释。

我只需要为我选择的输出路径 "src/locale".

更改 package.jsonangular.json 中的默认设置

由于 ngx-i18nsupport-package 将不再开发,我们现在使用 rvanbekkum.xliff-sync 来解决这个问题,这非常有效。

alternative/new 解决方案(对于未维护的 ngx-i18nsupport)是 https://github.com/daniel-sc/ng-extract-i18n-merge

通过

安装后
ng add ng-extract-i18n-merge

可以使用单个命令提取和合并翻译:

ng run [PROJECT_ID]:extract-i18n-merge