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

Tim*_*sen 8 angular-i18n angular angular-localize

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

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

ng extract-i18n myprojectName --format xlf --output-path src/i18n  --out-file messages.da.xlf --progress
Run Code Online (Sandbox Code Playgroud)

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

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

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

现在一切都很好。

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

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

Mic*_*rén 1

Angular 中没有内置的方法可以执行此操作,因此您需要第 3 方工具。我发现的唯一免费工具是现在未维护的Xliffmerge。\n该文档针对旧版本的 Angular,但经过一些实验后我发现它 \xe2\x80\x99s 足以安装该@ngx-i18nsupport/tooling软件包:

\n
npm install -D @ngx-i18nsupport/tooling --legacy-peer-deps\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
"xliffmerge": {\n  "builder": "@ngx-i18nsupport/tooling:xliffmerge",\n  "options": {\n    "xliffmergeOptions": {\n      "defaultLanguage": "en-US",\n      "languages": ["nb"]\n    }\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
ng extract-i18n && ng run projectName:xliffmerge\n
Run Code Online (Sandbox Code Playgroud)\n

运行脚本时我们收到几个警告,告诉我们它的工作原理!

\n
WARNING: merged 1 trans-units from master to "nb"\nWARNING: please translate file "messages.nb.xlf" to target-language="nb"\n
Run Code Online (Sandbox Code Playgroud)\n

我在我的博客上写了更多相关内容。

\n