如何处理 angular 11 extract-i18n 覆盖现有翻译?

问题描述

所以我有一个 angular 11 应用程序,我刚刚使用 angulars 认的 i18n 中间件实现了本地化。

为了创建一个初始文件,我刚刚运行:

ng extract-i18n myprojectName --format xlf --output-path src/i18n  --out-file messages.da.xlf --progress

一切都很好,我得到了一个带有认语言翻译的 messages.da.xlf 文件

现在我想将应用程序翻译成英文。

我复制了 messages.da.xlf 文件并将其命名为 messages.en.xlf 并翻译了所有内容

现在一切都很好。

但是现在我有一个问题,下次我添加要翻译的附加文本时,英语翻译不会更新。

所以我的问题是,当我因为应用程序中的新功能而需要扩展翻译时,我怎么知道我必须向所有翻译文件添加哪些额外的“字段”,以及是否有办法自动完成?

>

解决方法

在 Angular 中没有内置的方法来执行此操作,因此您需要一个 3rd 方工具。我发现的唯一免费工具是现在无人维护的 Xliffmerge。 该文档针对的是旧版本的 Angular,但经过一些实验,我发现安装 @ngx-i18nsupport/tooling 包就足够了:

npm install -D @ngx-i18nsupport/tooling --legacy-peer-deps

然后我们可以在 angular.json 中的 projects -> projectName -> architect -> xliffmerge 下的配置中添加新的语言。

"xliffmerge": {
  "builder": "@ngx-i18nsupport/tooling:xliffmerge","options": {
    "xliffmergeOptions": {
      "defaultLanguage": "en-US","languages": ["nb"]
    }
  }
}

添加新翻译后,我们可以通过运行此脚本提取它们并将它们迁移到我们的翻译文件中:

ng extract-i18n && ng run projectName:xliffmerge

我们在运行脚本时收到几个警告,告诉我们它正在运行!

WARNING: merged 1 trans-units from master to "nb"
WARNING: please translate file "messages.nb.xlf" to target-language="nb"

我在 my blog 上写了更多关于此的内容。