我尝试使用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 是否支持这种翻译?如果没有,那么 正确的方法 是做什么的?
提前感谢您的帮助!
此致
答案 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功能。