4

我正在努力寻找最有效的方法来翻译包含 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>
4

2 回答 2

2

如果你简单地定义<div>三个部分呢?就像,文本开始,链接,然后结束。

<div>
  {{'WELCOME_LABEL_START' | translate}}
  <a [routerLink]="['settings/subscription']">{{'LINK_LABEL' | translate}}</a>
  {{'WELCOME_LABEL_END' | translate}}
</div>

这样,根据语言,您只需将句子定义为两部分。

{
  "WELCOME_LABEL_START": "In order to proceed, click on this,
  "LINK_LABEL": "link",
  "WELCOME_LABEL_END": " whatever language you have."
}

如果不需要,你只需让开始/结束为空。

于 2018-12-12T12:48:34.497 回答
0

Angular 似乎不支持将指令和非 HTML 元素作为innerHTML. 我不尝试,但需要注意。


您可以传递整个句子作为innerHTML翻译,包括链接元素。这样,您可以动态输出内容。

模板:

<span [innerHTML]="key | translate"></span>

JSON:

{
  "key": "Please click on <a href='abc.com'>this link</a>."
}
于 2021-11-22T18:50:17.507 回答