如何使用angular2 i18n-x来定位属性常量值

时间:2017-04-04 08:58:39

标签: angular internationalization

我尝试使用i18n-x form对我的 Angular2 应用程序进行本地化。它适用于属性:

<p-dialog i18n-header header="User Details"></p-dialog>

结果是:

<trans-unit id="fe871da89ff54aecdb1d2981639c988f15b4d9ad" datatype="html">
   <source>User Details</source>
   <target/>
</trans-unit>

但是当我尝试将其应用于 angular 属性常量值 时,它不会创建任何xml标记。例如:

<my-journal i18n-tableHeader [tableHeader]="'Users'">
</my-journal>

angular i18n 是否支持这种翻译?如果没有,那么 正确的方法 是做什么的?

提前感谢您的帮助!

此致

2 个答案:

答案 0 :(得分:3)

您可以尝试canonical form角度属性绑定 - 它也可以使用角度4.4.6和打字稿2.3.4。我用这种环境证明了这一点:

Angular CLI: 1.6.8
Node: 6.10.0
OS: win32 x64
Angular: 5.2.5
... animations, common, compiler, compiler-cli, core, forms
... http, language-service, platform-browser
... platform-browser-dynamic, router

@angular/cli: 1.6.8
@angular-devkit/build-optimizer: 0.0.42
@angular-devkit/core: 0.0.29
@angular-devkit/schematics: 0.0.52
@ngtools/json-schema: 1.1.0
@ngtools/webpack: 1.9.8
@schematics/angular: 0.1.17
typescript: 2.6.2
webpack: 3.10.0

请尝试这个解决方案 - 我希望它有用:

<my-journal
 bind-tableHeader="'Users'"
 i18n-bind-tableHeader="header of table@@mytableheader">
</my-journal>

答案 1 :(得分:0)

正如“ Johnny Svarog”在评论中提到的那样,“ FunThomas424242”这类作品的解决方案,但不一定是个好主意:

由于bind-tableHeader是一个带表达式的属性绑定,因此必须用引号引起来,因此翻译字符串(带有示例翻译为西班牙语)如下所示:

  • 'Users',翻译为'Usuarios'(如果提供的Usuarios不带引号则无效)

但是我们真正想要的是以下内容:

  • Users,翻译为Usuarios

另一种也不完美的选择是使用{normal} DOM属性来传递字符串,如here所述:

<my-journal i18n-tableHeader tableHeader="Users">
</my-journal>

此问题是,如果tableHeader在将来的HTML5版本中突然具有其他含义,可能会产生一些副作用。在AngularJS 1.x中避免这种情况的方法是将带有破折号(table-header)的绑定转换为camelCase来进行组件绑定,为此,HTML5保证不会添加新的绑定。 AFAIK在Angular 2+中没有这种东西。

This GitHub issue有理由希望明年还会有更多的i18n功能。