ngx-translate 与 i18n 的区别
Posted
技术标签:
【中文标题】ngx-translate 与 i18n 的区别【英文标题】:Differences ngx-translate vs i18n 【发布时间】:2017-12-08 22:33:32 【问题描述】:翻译一个(Angular)应用程序有多种方法,主要的方法是:
ngx-translate
和
Angular 2 native i18n
据我了解,i18n 对 SEO 来说更容易,因为使用干净的 url 浏览
例如
app.com/de
app.com/zh
另一方面,使用 ngx-translate 可以更轻松地在语言之间切换。
我知道 ngx-translate 的创建者被 Angular 聘用为他们的 i18n。 谁能告诉我主要区别是什么(赞成/反对)?
【问题讨论】:
这是关于 AngularJs 还是 Angular 2?如果是关于 AngularJs,还有Angular translate。否则,如果仅针对 Angular 2,请从您的问题中删除angularjs
标签。
作为记录,您也可以使用github.com/robisim74/angular-l10n
【参考方案1】:
这个问题现在已经很老了,但我认为答案需要更新。
ngx-translate 已基本被放弃。 ngx-translate 的作者 ocombe 正在 Google 努力改进内置的 Angular 方法。 He transitioned ngx-translate to maintenance only。截至目前(2021 年 5 月),他已经 11 个月没有对 ngx-translate 进行任何维护,包括没有更新 Angular 11。
ngx-translate 似乎不再适用于新国际化 Angular 的项目。
【讨论】:
【参考方案2】:Transloco 文档中对 Transloco、Angular-I18n 和 Ngx-translate 进行了相当完整的比较:
https://ngneat.github.io/transloco/
【讨论】:
链接失效 此链接有效:netbasal.gitbook.io/transloco/comparison-to-other-libraries 没有了,可惜没有了。 我们现在有一个新的文档站点:ngneat.github.io/transloco【参考方案3】:根据@ocombe, ngx-translate 库背后的想法一直是为 i18n 提供支持,直到 Angular 赶上来,之后这个库可能会被弃用。目前,Angular i18n 和这个库之间仍然存在一些差异:
Angular 一次只能使用一种语言,您必须完全重新加载应用程序才能更改语言。 JIT 支持仅意味着它可以与 JIT 一起使用,但您仍然必须在引导时提供翻译,因为它将在编译期间替换模板中的文本,而此库使用绑定,这意味着您可以随时更改翻译.缺点是绑定占用内存,因此 Angular 方式的性能更高。但是,如果您将OnPush
用于您的组件,您可能永远不会注意到差异
Angular 目前仅支持在您的模板中使用 i18n,我正在开发允许您在代码中使用它的功能,但它仍在进行中。此库可在代码和模板中使用
Angular 支持 XLIFF 或 XMB(两者都是 XML 格式),而这个库默认支持 JSON,但您可以编写自己的加载器来支持您想要的任何格式(例如,有一个用于 PO 文件的加载器)
Angular 支持 ICU 表达式(复数和选择),但 ngx-translate 库不支持
Angular 支持 html 占位符,包括 Angular 代码,而这个库只支持常规 html(因为它是在运行时执行的,而不是在编译期间执行的,并且在 Angular 中没有 $compile 就像在 AngularJS 中一样)
ngx-translate 库的 API 更完整,因为它在运行时执行,它可以提供更多 Angular 所没有的东西(可观察对象、事件等)(但实际上并不需要给出)你不能改变翻译)
【讨论】:
【参考方案4】:相信这个问题回答了你的问题:https://github.com/ngx-translate/core/issues/495
【讨论】:
这不是答案,而应该是评论。 请避免仅链接的答案。这个元答案meta.stackexchange.com/a/8259 详细解释了为什么这是一种不好的做法,从链接腐烂到“链接很棒,但它们永远不应该是你答案中的唯一信息”等等。以上是关于ngx-translate 与 i18n 的区别的主要内容,如果未能解决你的问题,请参考以下文章
Highcharts lang with ngx-translate