Angular2 i18n此时?

Ada*_*zyk 42 internationalization angular

我们决定给它一个旋转,我们开始使用Angular2进行新项目.到目前为止一直很好,但此时我们正面临着一个问题.在这一点上,对于Angular2,i18n的正确方法是什么?我们研究了一下,发现了这个:

然而,最后一次提交已超过5个月......看起来不像是积极的开发.

有人试过使用angular-translate或angular-gettext吗?或者也许使用Angular2最好包装像i18next这样的JS?有谁可以分享他们的想法?也许你遇到了同样的问题?

And*_*ich 19

Plunk更新为Angular 2 Final:https://plnkr.co/edit/4euRQQ .事情似乎和RC7一样.

Angular 2官方文档中添加了新的i18n部分.基本上,它详细解释了上面的plunkr发生了什么.

XLIFF是唯一的翻译格式,没有json支持.应使用ng-xi18n工具创建翻译源文件(xliff,xlf):

package.json:

"scripts": {
  "i18n": "ng-xi18n", 
  ...
}
Run Code Online (Sandbox Code Playgroud)

npm run i18n
Run Code Online (Sandbox Code Playgroud)

有关将转换合并到组件模板的详细信息,请参阅合并转换部分.它是使用SystemJS Text插件完成的.

另一个使用Gulp的例子http://www.savethecode.com/angular2-i18n-native-support/

老员工:根据RC7更新和Herman Fransen提供的链接:

我做了一个最小的Plunkr示例:https://plnkr.co/edit/4W3LqZYAJWdHjb4Q5EbM

对plunkr的评论:

  • bootstrap应该提供TRANSLATIONS,TRANSLATIONS_FORMAT,LOCALE_ID其值- >设置翻译
  • html-templates中的可翻译项目应该使用指令 i18n
  • 翻译存储在.xlf文件中.语言之间的关系是完成的,通过标签的值Idhtml联系起来<source>xlf
  • 目前的xlf文件不直接使用; 一个.ts文件是手动创建包装的内容xlf中可导出的变量.我想,这应该在最终版本中自动运行(甚至可能是现在).

这是我发现的第一个官方记录的方法.但是,它仍然几乎无法使用.我在当前的实现中看到以下问题:

  • 语言设置为bootstrap,无法在运行时更改它.这应该在Final中改变.
  • 可翻译项目的Id xlf生成SHA.获取此ID的当前方法有点混乱:您创建一个新的可翻译项目,使用它,从错误中复制SHA ID并粘贴到您的i18n.lang.xlf文件中.

关于i18n 有一个很大的文档拉取请求

老员工:发布说明https://github.com/angular/angular/blob/master/CHANGELOG.md有记录

i18n:合并翻译7a8ef1e

Angular 2 RC5中引入了一大块i18n

不幸的是,仍然没有文件可用.


Sam*_*nes 16

每个人都渴望正式实​​施,但这个适用于我的用例:https: //github.com/ocombe/ng2-translate

README是相当彻底的,如果你需要一些真正特别的东西(对我而言是代码分裂),代码本身不会太长或难以阅读.

  • 这不是因为管道"不纯"而且性能不好.官方异步管道也是不纯的,TranslatePipe基于它(原始代码几乎相同).为了在lang改变或远程翻译时解决promise和observable,它必须是不纯的.如果没有必要,它立即返回,影响很小. (5认同)

Her*_*sen 8

支持i18n现已成为Angular 2 RC6的正式版

官方发布博客:https:
//angularjs.blogspot.nl/2016/09/angular-2-rc6_1.html

Angular 2 RC6的国际化样本
https://github.com/StephenFluin/i18n-sample

更多信息i18n的新概念如何在angular2中运行:https://lingohub.com/blog/2015/03/angular-2-i18n-update-ng-conf-2015

  • 我有点担心:查看i18n-sample中的示例代码,显然必须在app bootstrap时提供语言环境,这意味着,如果我是正确的,那么在应用程序运行时语言无法更改. ..请证明我错了! (3认同)