Динамический текст Angular i18n

#javascript #angular #internationalization #ngx-translate #angular-i18n

#javascript #angular #интернационализация #ngx-перевести #angular-i18n

Вопрос:

Я пытаюсь выяснить, возможно ли изменить язык для динамического контента, используя i18n и связанные библиотеки, такие как (ngx-translate), для которых я делаю POC.

Я могу перевести статический контент, но я не могу понять, как сделать то же самое для динамического контента, например, контента в цикле ngfor или данных, поступающих с сервера.

Есть ли какой-либо способ выполнить преобразование для содержимого, поступающего из серверной части / базы данных?

или любые другие советы / предложения были бы действительно оценены.

Ответ №1:

Подойдет любой контент, соответствующий ключу в ваших файлах перевода. Итак, если ваш серверный сервер предоставляет вам такие ключи, вы можете просто использовать translate:

 <div *ngFor="let key of keys">
  <p translate>{{key}}</p>
</div>  

Или что-то в этом роде. Если это то, что вы имели в виду?

Комментарии:

1. это лучший, более чистый ответ

2. Та же разница, Сэм, у вас есть префиксы, которые могут помочь в работе. 🙂

Ответ №2:

Это довольно просто, при условии, что вы знаете значения, которые может предоставить ваш сервер:

 // backend data returns known possible values:
const values = ['red', 'blue', 'green']

// de.json
color: {
  "red": "Rot",
  "blue": "Blau",
  "green": "Grün"
}

// app.component.html

<div *ngFor="let value of values">
{{ ('color.'   value) | translate }}
</div>
    
  

Комментарии:

1. Это хорошо из-за ‘color.’-префикса. В сочетании мы могли бы сделать <span>color.{{значение}}>

2. Если я знаю, что значение уже известно, тогда это легко .. но что, если я не знаю, что возвращает серверная часть? как и Google Translate, он автоматически переводит все до ближайшего возможного перевода

3. К сожалению, ngx-translate работает не так, вы должны заранее предоставить пары ключ: значение в виде файла json. В качестве решения для ваших нужд вы могли бы потенциально написать службу, которая передает ваше серверное значение другой службе перевода (например deepl.com/en/docs-api ), который вернул бы переведенное значение.