2

我正在尝试在项目中学习和添加角度国际化。我只能从角度文档(https://angular.io/guide/i18n-overview)中理解编译时翻译。

我需要这样的东西https://stackblitz.com/github/ngx-translate/example这是第三方库'ngx-translate'。

我们不能在没有任何第三方库的情况下仅使用 Angular 库实现相同的运行时翻译吗?

如果使用角度库可以进行运行时翻译,请指导我。

4

2 回答 2

4

角盒中的 i18n 运行时没有解决方案。只使用 ngx-translate。Angular 团队仍然只谈论“我们将在下一个版本中这样做”,但没有成功。我在大项目下工作,我们使用角度版本 4 或 6 的 ngx-translate。你可以信任这个第三方库。i18n 只能为一些 baseHref 构建应用程序,例如:

https://your.domain/en/ ...

https://your.domain/de/ ...

当您需要编译大量应用程序以使用 i18n 时。ngx-translate - 只有 1 个应用程序,翻译可以按需要翻译的模块拆分。

我的建议 - 使用 ngx-translate 以及 Angular 团队何时重新加载运行时语言 - 重写项目部分以进行翻译

于 2021-11-19T05:16:17.130 回答
2

您可能已经看到,Angular 始终是构建时转换的情况,您将在每个语言环境中构建应用程序(例如,一个“en”构建和一个“fr”构建)。然后,您将托管每个应用程序,并且必须重定向到特定的语言环境才能在运行时切换它。不是最好的体验。

对于 Angular Ivy,现在还有一个@angular/localize包,它提供了一个$localize可用于运行时翻译的标记模板帮助程序,但它仍将使用您当前所在的语言环境。在生产配置中构建时,我相信它可能会优化其他语言环境,因此您仍然不能只在运行时切换语言。

const message = $localize`:@@username:Hello {username}`;

要在运行时切换翻译,您可能可以跟踪以下问题并投票:

https://github.com/angular/angular/issues/38953

特别是,您可以看到napeipetebacondarwin的两条评论,这似乎表明 Angular 本身不支持此功能。

dynamic locale switching (of course)
Indeed this will not be supported natively in Angular.

也许如果他们获得更多的选票,他们就会意识到对这个功能的需求:) 在那之前,你需要使用ngx-translate已经被建议的 3rd 方库。

于 2021-11-26T16:00:10.603 回答