我目前正在将en locale添加到我们公司正在使用的Angular App中。经过一番思考后,我们决定采用Angular 5+原生i18n支持。
然而,根据我的理解,每次使用ng xi18n --outputPath src/locale/ --locale en
生成翻译文件时,都会创建一个新文件。这意味着,每次添加新的i18n标签时,之前包含旧翻译的XLF文件都需要与新翻译合并。
这看起来非常麻烦,因此我的问题是:有没有一种方法可以将新的转换单元附加到已经存在的XLF文件中?或者是否已有可以将这两者合并在一起的工具?
编辑回答
您可以使用xliffmerge工具。在您的html中添加新翻译后,它可以合并翻译文件
这是一个有角度的tutorial
基本上在运行常规提取命令后,调用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>
下次运行extract命令时,它只会添加新块但不会触及现有块
顺便说一下,我认为使用原生选项是一个不错的选择,因为主要替代方案(ngx-translate)的维护者实际上正在与原生方法的角度团队合作
我以前的解决方案有一些问题:ERROR: language [...] node_modules\@ngx-i18nsupport\ngx-i18nsupport\xliffmerge\xliffmerge" is not valid
我使用xliffmerge和angular-cli:https://github.com/martinroob/ngx-i18nsupport来提取/合并i18n。它为你生成package.json
中的命令和angular.json
中新任务的配置。它在合并时保留上下文组和注释。
我只需要为我选择的输出路径package.json
更改angular.json
和"src/locale"
中的默认设置。