Angular 5国际化

Rob*_*abe 44 internationalization angular-i18n ngx-translate angular angular5

我正在使用最新的Angular5构建应用程序,我需要的是用户能够切换语言.我从来没有在Angular2 +中实现它(实际上我使用的是Angular5).

我需要在两个地方设置翻译:

  • 组件的模板html - 将标签更改为指定的语言
  • 在component.ts文件的代码中 - 我可能需要翻译一些在代码中的特定条件下动态构建的字符串

我正在寻找ngx-translation,它看起来可以做我需要的一切,因为它允许你在不重建代码的情况下更改语言,请参阅此处.但是我读到它可能会被弃用,因为主要开发人员转向角度团队来开发他们的i18n代码.

我也明白,目前的i18n并不支持我现在需要的一切,请看这里.

我的问题 - 在最新版本的Angular中翻译的状态是什么?是否还有其他人推荐的图书馆,如果确实如此,Angular本身还没有完全支持(用于更改语言而不重新编译)?ngx-translate对未来有益吗?

非常感谢在这方面的任何指导!

Rob*_*abe 55

在花时间研究这个之后,我想我会发布我在ngx-translate和Angular-i18n之间发现的主要差异:

  • Angular一次只能使用一种语言,您必须完全重新加载应用程序才能更改lang.JIT支持仅意味着它可以与JIT一起使用,但是您仍然必须在引导程序中提供翻译,因为它将在编译期间替换模板中的文本,而此lib使用绑定,这意味着您可以随时更改翻译.缺点是绑定占用内存,因此Angular方式更具性能.但是,如果您使用OnPush作为组件,您可能永远不会注意到差异
  • Angular目前仅支持在模板中使用i18n,我正在开发允许您在代码中使用它的功能,但它仍在进行中.这个lib在代码和模板中都有效
  • Angular支持XLIFF或XMB(都是XML格式),而这个lib默认支持JSON,但是您可以编写自己的加载器来支持您想要的任何格式(例如,有PO文件的加载器).就个人而言,Json文件很容易阅读而不是其他格式,但这并不是一个很大的缺点.
  • Angular支持ICU表达式(复数和选择),但此库不支持
  • Angular支持包含角度代码的html占位符,而这个库只支持常规html(因为它在运行时执行,而不是在编译期间执行,并且在Angular中没有像AngularJS中那样的$ compile)
  • 这个库的API更完整,因为它在运行时执行它可以提供Angular没有的更多东西(observables,events,...)(但实际上并不需要你不能改变翻译) ngx-translate的创建者说过:

Ocombe(ngx的开发人员):@josersleal这正是他们所做的,有角度的团队雇用我为每个人改进i18n但是在为我的核心团队工作了3个月之后,没有办法将我的lib直接集成到核心告诉你Angular i18n比我的lib更加复杂和复杂.它处理了许多更复杂的东西,它没有我的lib所具有的所有错误和缺点.我理解核心的发展速度不如图书馆可以做的那么快令人沮丧,但是有理由这样做,第一个就是当你发现忘记包含一个内容时,你就无法实现某些东西并改变它.用例.一切都必须彻底规划和思考.尽管如此,你将拥有这个lib在未来可以在核心中完成的大部分工作,但可能需要一年的时间我们才能到达那里.好消息是,它比我天真的实施要好得多.

这是一篇很好的文章来讨论ngx-translate和Angular的i18n之间的主要区别:https://github.com/ngx-translate/core/issues/495

i18n的更改将在角度版本6中到期.今天,我们目前正在使用第5版:

一些想法......

  • 当您使用所需语言编译应用程序时,Angular-i18n的性能更高(而不是在运行时进行翻译).也可能是一个缺点,因为您可能需要使用不同语言的应用程序的多个版本.
  • 如果我们使用SEO,由于网址浏览,angular-i18n将是前进的方式.就我而言,我根本不需要这个.
  • 如果我们需要多次切换等.再次,我不需要这个 - 我只需要在模板和代码中进行相当直接的运行时语言切换.
  • Angular-i18n至少要到2018年3月才会被释放.对我来说,我不能等到那时我需要立即构建我的应用程序.
  • ngx-translate将不再具有像angular-i18n BUT那样全面的一组功能,我只需要简单的运行时翻译,所以认为它对我们需要的东西很好.
  • ngx-translate是开源的,并且当它不再被开发的那一天,如果有一个严重的问题,我想我可以自己解决(希望到时候,任何可能出现的问题都将被解决).

我也将看看Angular-l10n库,因为它看起来非常好:

  • 这是一个旧帖子,但很好的总结@RobMcCabe 谢谢! (2认同)

San*_*nde 5

是.ngx-translate到现在为止一直很好,我希望它将来也会如此.

我在目前使用5种语言的Angular 5项目中使用ngx-translate.

到目前为止,它对我来说很好.我没有做任何自定义更改,它就像即插即用的东西.

我用过这个插件https://github.com/ngx-translate/core