Angular 国际化(ngx-translate/i18n 或 i18next)

Angular Internationalization ( ngx-translate/ i18n OR i18next )

我需要在 Angular 的一个大型项目中实现国际化。根据我的发现,有两个主要选择:Angular 的官方 i18nngx-translate.

为了了解两者的优点和缺点,我经历了很多讨论:

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

https://github.com/ngx-translate/core/issues/495

https://github.com/ngx-translate/core/issues/783

现在,第三个选项是“angular-i18next”。没有很多关于此的文档。我知道它是 i18next 的包装器。但它是否克服了以下缺点:

或者,我最好的选择是在 i18nngx-translate 之间进行选择? 另外,有人在使用“angular-i18next”吗?

Angular 的未来版本(8.1?)应该支持在不重新加载页面的情况下翻译预期文本和动态翻译。在那之前,有 Olivier Combe 编写的 i18-polyfill (https://github.com/ngx-translate/i18n-polyfill),他加入了 angular 核心团队,致力于 i18n

This library is a speculative polyfill, it means that it's supposed to replace an API that is coming in the future. Once code translations are available in Angular, this library will be deprecated. But since it's a polyfill, we expect the API to be pretty similar. If the API is different, a migration tool will be provided if it's possible and necessary.

经过更多研究,我得出的结论是 i18-next 没有提供任何超过官方 Angular 的 i18n 的东西。此外,要使用 i18-next,您必须依赖外部依赖项 angular-i18next,我不相信对大型应用程序这样做。

有趣的是,在 angular-i18next 页面上发布的 文章 陈述如下:

My point is: There are basically no features that I18next supports and the built-in I18n Angular module doesn’t. So if there is a relatively little difference, why would you make your life more complex and include some third-party I18n framework? Especially, when it relies on a separate plugin (maintained by another person) to make everything working?

考虑到这些,以及 i18next 库的重量和学习时间,我立即放弃了继续 i18next 的想法。

相反,目前,我认为最好的选择是使用 Angular 的官方 i18n,使用 i18n-polyfill 用于模板外部翻译。一旦 i18n 获得此功能,我将完全迁移到 i18n。