在花了一些时间研究这一点之后,我想我应该把我发现的ngx-translate和Angular-i18n之间的主要区别贴出来:
- Angular一次只能使用一种语言,您必须完全重新加载应用程序才能更改语言.JIT支持只意味着它可以使用JIT,但您仍然必须在 bootstrap 时提供翻译,因为它将在编译期间替换模板中的文本,而此库使用绑定,这意味着你可以随时更改翻译.缺点是绑定占用内存,所以Angular 更高.但是如果你用OnPush来制作你的组件,你可能永远不会注意到其中的差异
- Angular目前只支持在模板中使用i18n,我正在开发一个功能,允许您在代码中使用它,但这项工作仍在进行中.这个库可以在代码和模板中工作
- Angular支持XLIFF或XMB(两者都是XML格式),而这个库默认支持JSON,但您可以编写自己的加载程序来支持您想要的任何格式(例如,有一个用于PO文件的加载程序).就个人而言,Json文件是非常直接的通读格式,而不是这些其他格式,但这并不是一个巨大的缺点.
- Angular支持ICU表达式(复数和select),但该库不支持
- Angular支持包含Angular代码的html占位符,而这个库只支持常规html(因为它是在运行时执行的,而不是在编译期间执行的,Angular中没有像AngularJS中那样的$compile)
- 这个库的API更加完整,因为它是在运行时执行的,它可以提供更多的东西(可观察对象、事件等).哪个Angular 没有(但实际上并不需要,因为您不能更改平移)
NGX-Translate的创建者说过这样的话:
Ocombe(NGX的开发者):@josersleal,这正是他们所做的,
棱角队雇我来提高每个人的i18n,但是没有
在工作了3年之后,将我的库直接集成到内核中的方法
对于核心团队来说几个月,我可以告诉你,Angular i18n要多得多.
比我的作品更复杂更精致.它可以处理很多更复杂的
东西,而且它没有所有的错误和缺点,我的
利布有过.我明白这很令人沮丧,因为核心没有
发展的速度与图书馆的能力一样快,但有以下原因
这一点,第一个问题是,你不能实现一些东西,
每当您看到忘记包含用例时都要更改它.
每件事都必须经过周密的计划和思考.不过,你还是会的
将此库在核心中可以做的大部分事情放在
future ,但不幸的是,我们可能需要一年时间才能到达那里.
好消息是,这将比我的天真要好得多
实施.
这是一篇讨论ngx translate和Angular的i18n:https://github.com/ngx-translate/core/issues/495之间主要差异的好文章
i18n的更改将在ANGLING版本6中进行.今天,我们目前使用的是版本5:
一些 idea …
- Angular-i18n在用所需语言编译应用程序时性能更高(而不是在运行时进行翻译).也可能是一个缺点,因为您可能需要用不同的语言构建多个应用程序.
- 如果我们使用SEO,angular-i18n将是前进的方向,因为url浏览.就我而言,我根本不需要这个.
- 如果我们再次要求复数转换等,我不需要这个——我只需要在模板和代码中进行相当直接的运行时语言转换.
- ANGLING-I18N至少要到2018年3月才会发布.对我来说,我迫不及待,因为我现在需要建立我的应用程序.
- ngx translate没有angular-i18n那么全面,但我只需要简单的运行时翻译,所以我认为它适合我们的需要.
- ngx translate是开源的,在它不再被开发的那一天,如果有严重的问题,我想我可以自己解决(希望到时候,任何可能出现的问题都会得到解决).
我还要看看Angular-l10n库,因为它看起来非常好: