Я изо всех сил пытаюсь найти наиболее эффективный способ перевести текст, содержащий 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 на основе локали, чтобы иметь возможность соответствоватьнеобходимо упорядочить слово.
example.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>