我正在努力寻找最有效的方法来翻译包含 routerLink 的文本或某些单词应该包含在 html 标签(word)中的文本。
让我们看看没有i18n 实现的情况:
example.component.html
<div>
Hello and welcome to this test example. In order to proceed click on this
<a [routerLink]="['settings/subscription']">Link</a>
</div>
现在让我们将i18n添加到其中,并使用一种可能的方法来处理 routerLink:en.json
{
"WELCOME_LABEL": "Hello and welcome to this test example. In order to proceed click on this,
"LINK_LABEL": "link"
}
example.component.html
<div>
{{'WELCOME_LABEL' | translate}}
<a [routerLink]="['settings/subscription']">{{'LINK_LABEL' | translate}}</a>
</div>
这种方法的问题是不同的语言可能有不同的单词顺序。例如。“请单击此链接”在其他语言中可能具有“链接”在句子开头或中间的顺序。
是否有一些通用/官方的方法来处理这种情况?
我可以解决它的一种方法是获取组件中的当前语言环境,然后根据它在模板中进行 if 检查。
我不喜欢这种方式,因为我有点退出 i18n 实践,而是根据语言环境创建单独的 JSON 对象,以便能够满足词序需求。
例子.component.ts
constructor(
@Inject( LOCALE_ID ) protected localeId: string
) {
console.log(this.localeId);
}
example.component.html
<div *ngIf="localeId === 'en-Us'">
{{'WELCOME_LABEL_EN' | translate}}
<a [routerLink]="['settings/subscription']">{{'LINK_LABEL_EN' | translate}}</a>
</div>
<div *ngIf="localeId === 'otherLanguage'">
{{'WELCOME_LABEL_1_OTHER' | translate}}
<a [routerLink]="['settings/subscription']">{{'LINK_LABEL_OTHER' | translate}}</a>
{{'WELCOME_LABEL_2_OTHER' | translate}}
</div>