我需要在Angular的一个大型项目中实现国际化。根据我的发现,有两个主要选择:Angular的官方 i18n 或 ngx-translate 。
要了解两者的优缺点,我进行了很多讨论:
https://github.com/angular/angular/issues/16477
https://github.com/ngx-translate/core/issues/495
https://github.com/ngx-translate/core/issues/783
Differences ngx-translate vs i18n
现在,第三个选项是“ angular-i18next ”。没有太多的文档。我了解这是i18next的包装。但这是否可以克服任何缺点:
翻译非模板文本。
动态翻译,无需重新加载页面。
具有AOT编译的单个版本。
或者,我最好的选择是在 i18n 和 ngx-translate 之间进行选择? 另外,有人在使用“ angular-i18next ”吗?
答案 0 :(得分:0)
Angular的未来版本(8.1?)应该支持翻译预期文本和动态翻译,而无需重新加载页面。在此之前,有由Olivier Combe编写的i18-polyfill(https://github.com/ngx-translate/i18n-polyfill),他加入了有角核心团队从事i18n的研究
该库是一个推测性的polyfill,这意味着它应该替换将来会出现的API。一旦在Angular中提供了代码翻译,该库将被弃用。但是由于它是一个polyfill,因此我们希望该API非常相似。如果API不同,则将在可能的情况下提供迁移工具。
答案 1 :(得分:0)
经过更多研究,我得出的结论是,i18-next不能提供比Angular的i18n更高的功能。另外,要使用i18-next,您将不得不依赖外部依赖项angular-i18next,而且我不认为要对大型应用程序执行此操作。
有趣的是,在article页上发布的angular-i18next声明如下:
我的意思是:I18next基本上不支持任何功能,而内置的I18n Angular模块则不支持。因此,如果差异不大,为什么要让您的生活变得更加复杂,并加入一些第三方I18n框架?特别是,当它依靠一个单独的插件(由另一个人维护)来使一切正常工作时?
考虑到这些问题,以及i18next库有多繁重的事实以及学习时间,我立即放弃了继续i18next的想法。
相反,就我而言,目前最好的选择是使用Angular的官方i18n,以及用于模板外部翻译的i18n-polyfill。而且,一旦i18n获得此功能,我将完全迁移到i18n。