我目前正在为我公司使用的 Angular 应用程序添加语言环境。经过一番思考,我们决定采用 Angular 5+ 原生 i18n 支持。
然而,根据我的理解,每次使用 ng xi18n --outputPath src/locale/--locale en
生成翻译文件时,都会创建一个新文件。这意味着,每次添加新的 i18n 标签时,之前已经包含旧翻译的 XLF 文件需要与新翻译合并。
这似乎非常麻烦,因此我的问题是:有没有一种方法可以将新的跨单位附加到已经存在的 XLF 文件中?或者是否已经有可以将这两者合并在一起的工具?
编辑: xliffmerge 似乎没有维护并且与最新的 Angular 版本(> 12)不兼容。 有关最新 Angular 版本的选项,请参阅@daniel-sc 的回答。
最佳答案
编辑后的答案
您可以使用 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>
下次您运行提取命令时,它只会添加新 block ,但不会触及现有 block
顺便说一句,我认为使用原生选项是一个不错的选择,因为主要替代方案 (ngx-translate) 的维护者实际上正在与 Angular 团队合作开发原生方法
关于angular - Angular 中 i18n 翻译文件的更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49675802/