【问题标题】:is runtime language translation possible with angular (@angular/localize)?角度(@angular/localize)是否可以进行运行时语言翻译?
【发布时间】:2021-12-29 04:45:27
【问题描述】:
【问题讨论】:
标签:
angular
internationalization
ngx-translate
angular-i18n
angular-localize
【解决方案1】:
没有从角度框使用 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 团队何时重新加载运行时语言 - 重写项目部分以进行翻译
【解决方案2】:
您可能已经看到,Angular 的构建时间转换总是如此,您可以根据语言环境构建应用程序(例如,一个“en”构建和一个“fr”构建)。然后,您将托管每个应用程序,并且必须重定向到特定的语言环境才能在运行时切换它。不是最好的体验。
使用 Angular Ivy,现在还有一个 @angular/localize 包,它提供了一个 $localize 标记的模板帮助器,可用于运行时翻译,但它仍将使用您当前所在的语言环境。在生产配置中构建时,我相信它可能会优化其他语言环境,因此您仍然不能只在运行时切换语言。
const message = $localize`:@@username:Hello {username}`;
对于在运行时切换翻译,您可能可以跟踪以下问题并投票:
https://github.com/angular/angular/issues/38953
特别是,您可以看到来自napei 和petebacondarwin 的两个cmets,这似乎表明Angular 本身不支持此功能。
dynamic locale switching (of course)
Indeed this will not be supported natively in Angular.
也许如果他们获得更多选票,他们就会意识到对这个功能的需求:) 在那之前,你需要使用已经被建议的像 ngx-translate 这样的第三方库。