19

我目前正在将语言环境添加到我们在我公司使用的 Angular 应用程序中。经过一番思考,我们决定使用 Angular 5+ 原生 i18n 支持。

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

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

4

4 回答 4

21

编辑后的答案

您可以使用xliffmerge工具。在 html 中添加新翻译后,它可以合并翻译文件

这是角度的教程

基本上在运行正常的提取命令后,您调用 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 团队合作使用本机方法

于 2018-04-05T15:50:26.710 回答
0

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

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

我只需要更改我选择的 output-pathpackage.json中的默认设置。angular.json"src/locale"

于 2019-04-25T16:54:12.267 回答
0

由于 ngx-i18nsupport-package 将不再开发,我们现在使用rvanbekkum.xliff-sync来解决这个问题,这就像一个魅力。

于 2021-06-29T12:10:05.960 回答
0

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

通过安装后

ng add ng-extract-i18n-merge

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

ng run [PROJECT_ID]:extract-i18n-merge
于 2022-02-01T13:32:35.007 回答