atc*_*way 6 internationalization angular-cli angular-i18n angular
有一种情况在子组件上定义输入,如下所示:
interface MyValues {
text: string;
path: string;
someOtherValue: string;
}
@Input() myValues: MyValues;
Run Code Online (Sandbox Code Playgroud)
我需要myValues通过如下输入从父组件传递给子组件:
<my-child-component [myValues]="myValues" />
Run Code Online (Sandbox Code Playgroud)
由于它不是简单的数据类型输入,因此我无法使用此处Angular 文档中推荐的 i18n 属性样式。这是一个具有多个值的对象,因此在传递给子组件时无法对其进行翻译(除非我遗漏了某些东西)。
在子组件中,有一些代码如下:
<span *ngFor="let myValue of myValues">
<a>{{myValue.Text}}</a>
</span>
Run Code Online (Sandbox Code Playgroud)
通常我想做的是为需要翻译的锚点分配一个 id,如下所示:
<a i18n="@@myChildComponent_text">{{myValue.Text}}</a>
Run Code Online (Sandbox Code Playgroud)
这样做的问题是它会在名为的翻译文件中创建一个字段,@@myChildComponent_text以进行翻译。但是,传递给这个子组件的这个对象在里面的值是动态的myValues,因此字面翻译将根据传入的内容而变化。
我的问题是,在将对象传递给子组件上的输入时,我如何仍然利用i18nAngular 国际化能力和@@id自定义 id,该对象将在其中具有需要转换的不同物理值?
您应该使用ngx-translate https://github.com/ngx-translate/core。
定义翻译:导入 TranslateModule 后,您可以将翻译放入将使用 TranslateHttpLoader 导入的 json 文件中。以下翻译应存储在en.json中。
{
"HELLO": "hello {{value}}"
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用setTranslation手动定义翻译。
translate.setTranslation('en', {
HELLO: 'hello {{value}}'
});
Run Code Online (Sandbox Code Playgroud)
TranslateParser理解嵌套的 JSON对象。这意味着您可以得到如下所示的翻译:
{
"HOME": {
"HELLO": "hello {{value}}"
}
}
Run Code Online (Sandbox Code Playgroud)
使用服务、管道或指令:您可以使用 TranslateService 、 TranslatePipe或TranslateDirective来获取翻译值。
使用该服务,它看起来像这样:
translate.get('HELLO', {value: 'world'}).subscribe((res: string) => {
console.log(res);
//=> 'hello world'
});
Run Code Online (Sandbox Code Playgroud)
这是使用管道的方法:
<div>{{ 'HELLO' | translate:param }}</div>
Run Code Online (Sandbox Code Playgroud)
在你的组件中定义参数如下:
param = {value: 'world'};
Run Code Online (Sandbox Code Playgroud)
这是使用该指令的方式:
<div [translate]="'HELLO'" [translateParams]="{value: 'world'}"></div>
Run Code Online (Sandbox Code Playgroud)
或者使用元素的内容作为键甚至更简单:
<div translate [translateParams]="{value: 'world'}">HELLO</div>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6201 次 |
| 最近记录: |