ngx-translate与i18n的区别

Dom*_*omi 17 translation ngx-translate angular

翻译(Angular)应用程序有多种方法,主要的主要方法是:

NGX-翻译

Angular 2原生i18n

到目前为止,据我所知,i18n对搜索引擎优化更容易,因为浏览网页很干净

例如

app.com/de

app.com/en

另一方面,使用ngx-translate,在语言之间切换更容易.

我知道ngx-translate的创建者是由Angular聘用的i18n. 任何人都可以说我的主要区别是什么(优点/缺点)?

小智 13

我相信这个问题可以回答你的问题:https://github.com/ngx-translate/core/issues/495

  • 请避免仅链接的答案。这个元答案https://meta.stackexchange.com/a/8259详细说明了为什么这是一个不好的做法,从链接腐烂到“链接很棒,但是它们永远不应是答案中唯一的信息”和超越。 (4认同)
  • 这不是答案,而应该是评论。 (2认同)

小智 11

这个问题在这一点上很旧,但我认为答案需要更新。

ngx-translate 在很大程度上已被放弃。ngx-translate 的作者 ocombe 正在 Google 努力改进内置的 Angular 方法。 他将 ngx-translate 转换为只用于维护。截至目前(2021 年 5 月),他已经 11 个月没有对 ngx-translate 进行任何维护,包括没有对 Angular 11 进行更新。

ngx-translate 对于新近国际化 Angular 的项目似乎不再可行。

  • 这里 https://github.com/ngx-translate/core/issues/783#issuecomment-1705619361 他指出该项目处于“维护模式”,这意味着没有实现新功能,仍然有维护以确保与新版本的 Angular (2认同)

Tov*_*var 9

我会指出这些差异,但它们是否有利弊完全取决于您的项目和开发团队的类型和规模。

ngx-翻译 国际化
依赖绑定以便在运行时进行翻译。 翻译是在构建后完成的,为每种语言创建不同的应用程序。每个翻译的应用程序都将位于一个目录中(例如/pt//en/),这需要重定向应用程序。
牺牲性能,因为即使没有发生翻译,也会在每个更改检测周期中检查所有翻译的绑定。这可以通过使用变更检测策略来解决OnPush 优先考虑性能。由于翻译发生在构建中,因此翻译后的字符串将被硬编码到目标模板中。
不需要重新加载翻译。 需要重新加载翻译,前提是翻译请求很少。
由于额外的绑定和翻译库,增加了包的大小。 国际化不会影响捆绑包的大小。
所有翻译字符串都必须发送给用户,即使不需要它们。但是,延迟加载的模块可以有自己的翻译文件。 翻译是在构建中完成的,因此客户端浏览器只能获取请求翻译所需的内容。
翻译文件非常便携、可读并且易于在开发过程中创建。它们可以随着应用程序的增长而逐渐创建,并且也可以轻松重构。 管理翻译文件非常复杂,因此必须定义翻译管道(观看6:35-10:15,阅读)。主要问题是每次应用程序更改时都必须从头开始翻译文件。在此过程中,只能通过慢慢复制粘贴先前翻译的字符串来重用先前的翻译。
动态翻译内容很简单,是使用该库进行翻译的最常见方法。 动态翻译内容很复杂。
动态翻译的内容(在 中非常常见ngx-translate)对于 SE 来说很难跟踪。 干净的 URL 浏览和静态翻译对 SEO 非常有利。

这些是我的主要参考资料:

我觉得这里有很多很大的权衡,真的很难选择......

请随时改进此比较!


Chu*_*nze 5

根据@ocombengx-translate库背后的想法一直是为i18n提供支持,直到Angular赶上来,此库可能会被弃用。目前,Angular i18n与该库之间仍然存在一些差异:

  • Angular一次只能使用一种语言,因此您必须完全重新加载应用程序才能更改lang。对JIT的支持仅意味着它可以与JIT一起使用,但是您仍必须在引导程序中提供翻译,因为它将在编译期间替换模板中的文本,而此lib使用绑定,这意味着您可以随时更改翻译。 。缺点是绑定占用内存,因此Angular方式更具性能。但是,如果您将其OnPush用于组件,则可能永远不会注意到差异

  • Angular目前仅支持在模板中使用i18n,我正在研究允许您在代码中使用它的功能,但这仍在进行中。该库在代码和模板中均有效

  • Angular支持XLIFF或XMB(均为XML格式),而该库默认情况下支持JSON,但您可以编写自己的加载器以支持所需的任何格式(例如,有一个PO文件加载器)

  • Angular支持ICU表达式(复数和选择),但是ngx-translate库不支持

  • Angular支持html占位符,包括角度代码,而该库仅支持常规html(因为它是在运行时执行的,而不是在编译过程中执行的,并且在Angular中没有像AngularJS中那样的$ compile)

  • ngx-translate库的API 更完整,因为它在运行时执行,它可以提供Angular所没有的更多东西(可观察到的事件...),但由于您无法更改翻译)