#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 ), который вернул бы переведенное значение.