Angular 5国际化

问题描述 投票:42回答:3

我正在使用最新的Angular 5构建应用程序,我需要的是用户能够切换语言。我从来没有在Angular 2中实现这个(实际上我使用的是Angular5)。

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

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

我正在看ngx-translation它看起来做我需要的一切,因为它允许你改变语言而不重建你的代码,请参阅here。但是我读了it was probably going to be deprecated,因为主要开发人员转向角度团队来开发他们的i18n代码。

我也明白,目前的i18n不支持我现在需要的一切,请参阅here

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

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

angular internationalization ngx-translate angular5 angular-i18n
3个回答
55
投票

花了很多时间研究这个,我想我会发布ngx-translateAngular-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但是我没有办法将我的lib直接集成到核心,为核心团队工作了3个月后我可以告诉你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库,因为它看起来非常好:


5
投票

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

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

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

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


0
投票

Rob McCabe,除了上面列出的那个之外,还有其他重要的问题。我已经解释了它here

© www.soinside.com 2019 - 2024. All rights reserved.