Angular 中的 i18n 翻译文件更新

23
我正在将英文本地化添加到我们公司使用的Angular应用程序中。经过一番思考,我们决定使用Angular 5+本地的i18n支持。据我所知,每次生成翻译文件时,都会创建一个新文件。这意味着每次添加新的i18n标记时,已包含旧翻译的先前XLF文件需要与新翻译合并。这似乎非常麻烦,因此我的问题是:是否有一种方法可以将新的trans-units仅附加到已有的XLF文件?或者已经有一个工具可以合并这两个文件吗?
4个回答

22

编辑答案

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

这里有一个关于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 团队共同开发原生方法。

请您能否详细说明一下?我已经更新了我的问题,并提供了我正在使用的完整命令。我已经使用了唯一的ID,但是当我重新运行命令时,会生成一个名为messages.xlf的新文件,其中不包含任何现有的翻译。 - seBaka28
@seBaka28,你的“真正”的翻译文件在哪里?名称/位置是什么? - David
messages.en.xlf 文件位于 src/locale/ 目录下,在生成后与新的 messages.xlf 文件位于同一位置。 - seBaka28
我编辑了我的回答。我实际上非常确定本地工具可以默认合并,以至于我甚至没有尝试过(我正在我的项目中进行中!) - David
4
问题在于工具ngx-i18n-support似乎已经很久没有更新了(上一次更新是两年前)。因此,它使用了i18n中被弃用的内容(例如i18nFilei18nFormati18nLocale)。它仍然可以在Angular 11下工作,但将来可能会成为问题。我还没有找到更好的选择。 - nclskfm
显示剩余2条评论

11

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

安装后,通过以下方式使用:

ng add ng-extract-i18n-merge

使用以下命令,将提取的翻译内容 合并

ng extract-i18n

(透明度:这个库是我创建的。)


也许可以添加一条注释,说明你是该库的创建者。 - seBaka28
太棒了,感谢你的出色解决方案! - undefined

0

我之前遇到了一些问题:ERROR: language [...] node_modules\@ngx-i18nsupport\ngx-i18nsupport\xliffmerge\xliffmerge" is not valid

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

我只需要更改package.jsonangular.json中的默认设置,以适应我选择的输出路径"src/locale"


@bergacat1只需按照此处的指示安装xliffmerge: https://github.com/martinroob/ngx-i18nsupport/tree/master/projects/xliffmerge。我将创建一个新的npm脚本任务,使用ng build和正确的选项。 - svassr

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接