4

所以我有一个 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 并翻译了所有内容。

现在一切都很好。

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

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

4

1 回答 1

1

在 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"

我在我的博客上写了更多关于这个的内容。

于 2021-04-28T20:03:16.993 回答