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

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

  • 组件的模板html-将标签更改为指定的语言
  • 在组件的代码中.ts文件-我可能需要翻译一些

我看的是ngx-translation,它看起来可以做我需要的一切,因为它允许您在不重新构建代码的情况下更改语言,请参见here.然而,我读到it was probably going to be deprecated是因为主要开发人员转到ANGLE团队开发他们的i18n代码.

我也知道目前的i18n不能支持我现在需要的一切,见here.

我的问题是,在最新版本的Angular中,翻译的效果如何?如果Angular本身到目前为止还没有得到充分的支持(在不重新编译的情况下更改语言),人们会推荐其他库吗?ngx翻译对future 有好处吗?

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

推荐答案

在花了一些时间研究这一点之后,我想我应该把我发现的ngx-translateAngular-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:

  • 不会是5.0,应该是6.0之前(所以在2018年3月之前).不幸的是,我没有更准确的日期.

  • ngx translate的开发者(现在是angular-i18n的主要贡献者)在12天前发布了以下内容:

  • 以下是i18n的设计文档(现有技术部分很有趣):

一些 idea …

  • Angular-i18n在用所需语言编译应用程序时性能更高(而不是在运行时进行翻译).也可能是一个缺点,因为您可能需要用不同的语言构建多个应用程序.
  • 如果我们使用SEO,angular-i18n将是前进的方向,因为url浏览.就我而言,我根本不需要这个.
  • 如果我们再次要求复数转换等,我不需要这个——我只需要在模板和代码中进行相当直接的运行时语言转换.
  • ANGLING-I18N至少要到2018年3月才会发布.对我来说,我迫不及待,因为我现在需要建立我的应用程序.
  • ngx translate没有angular-i18n那么全面,但我只需要简单的运行时翻译,所以我认为它适合我们的需要.
  • ngx translate是开源的,在它不再被开发的那一天,如果有严重的问题,我想我可以自己解决(希望到时候,任何可能出现的问题都会得到解决).

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

Angular相关问答推荐

Angular 空变量使用组件之间的共享服务

第15角Cookie的单元测试用例

Swiper 11角17 SSR Swiper断点不工作

如何在AngularJs中剪断细绳

如何在运行Angular应用程序的容器中访问Docker容器?

在生产模式下使用带Angular 的 livekit

组件的导入不能以Angular 工作

Storybook 和 Angular 交互游戏测试未定义预期

如何使用指令以Angular 传递默认值

如何重置表单中的特定字段?

当我ng serve时,Angular CLI 提示TypeError: callbacks[i] is not a function

Observable .do() 运算符 (rxjs) 的用例

带有嵌套表单数组的 Angular react式表单

如何在Angular2中基于特定的构建环境注入不同的服务?

material Angular手风琴header/title高度

无法从模块it was neither declared nor imported导出服务

样式 html,来自 Web 组件的正文

unexpected token < 错误

Angular 2+ ngModule 中导入/导出的作用

formGroup 需要一个 FormGroup 实例