更新Angular中的i18n翻译文件

seB*_*a28 7 xliff angular-i18n angular

我目前正在向我们公司使用的Angular应用添加语言环境。经过一番思考,我们决定采用Angular 5+本机i18n支持。

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

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

dan*_*-sc 11

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

安装后通过

ng add ng-extract-i18n-merge
Run Code Online (Sandbox Code Playgroud)

翻译将被提取与命令合并:

ng extract-i18n
Run Code Online (Sandbox Code Playgroud)

(透明:我创建了这个库。)


Dav*_*vid 7

编辑答案

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

这是角度的教程

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

ng xi18n --outputPath src/locale/ --locale en && xliffmerge --profile xliffmerge.json en fr
Run Code Online (Sandbox Code Playgroud)

您可以为该工具指定一个json配置

{
  "xliffmergeOptions": {
  "srcDir": "src/locale",
  "genDir": "src/locale"
   }
}
Run Code Online (Sandbox Code Playgroud)

原始答案

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

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

<h1 i18n="@@introductionHeader">Hello i18n!</h1>
Run Code Online (Sandbox Code Playgroud)

Nex在运行extract命令时,它只会添加新的块,而不会触及现有的块

顺便说一句,我认为使用本机选项是一个不错的选择,因为主要替代方案(ngx-translate)的维护者实际上正在与角度小组一起使用本机方法

  • @Ray问题是该工具[ngx-i18n-support](https://www.npmjs.com/package/ngx-i18nsupport)似乎不再更新(最后一次更新是两年前)。因此,它使用了 i18n 中已被**弃用的东西(例如 `i18nFile`、`i18nFormat` 和 `i18nLocale`)。它仍然可以在 Angular 11 下运行,但将来这可能会成为一个问题。我还没有找到更好的选择。 (2认同)