Компонент <t>
Оберните контент в компонент <t>, чтобы перевести его. Исходное содержимое отображается до тех пор, пока перевод не загрузится.
<t>This content will be translated</t>
Текст с привязками тоже работает. Содержимое снова переводится всякий раз, когда оно меняется, например, при изменении name:
<t>Hello {{ name() }}</t>
Для часто меняющихся значений, таких как имена и количество, вместо этого используйте переменные, чтобы текст переводился только один раз.
Все переводы, запрошенные одновременно, отправляются в API одним запросом, а переводы кэшируются. Вы можете использовать столько компонентов <t>, сколько захотите.
<mt-translate> работает как альтернативный селектор, а Translate является тем же компонентом, что и T.
Входы
| Ввод | Тип | Описание |
|---|---|---|
formality | 'informal' | 'formal' | Устанавливает формальность перевода. |
id | string | Позволяет редактировать это использование текста самостоятельно. Оно не задано в качестве id элемента. |
lang | Language | Переопределяет установленный язык с помощью provideMagicTranslate. |
v | Record<string, unknown> | Значения, которые не переведены, в содержимом отмечены как $name. См. раздел Переменные. |
<t lang="fr" formality="formal">How are you?</t>
Переменные
Передайте измененные значения, такие как имя или количество, в [v] и укажите их в содержимом как $name:
<t [v]="{ name: user.name, count: unread() }">Hi $name, you have $count new messages</t>
Magic Translate переводит текст вокруг значений один раз, как Hi {0}, you have {1} new messages, и возвращает значения обратно в ваше приложение. Перевод кэшируется и работает для каждого имени и каждого числа, а сами значения никогда не отправляются в Magic Translate. Когда меняются только значения, новый запрос не отправляется.
Значения нумеруются в том порядке, в котором они появились впервые. Перевод позволяет перемещать их туда, где они нужны языку, например {1} neue Nachrichten für {0}.
Текст вокруг значений может содержать HTML, а значения можно сначала отформатировать с помощью pipes:
<t [v]="{ count: cart.items.length, total: cart.total | currency }">You have <b>$count items</b> in your cart, totalling <b>$total</b>.</t>
Несколько правил:
- Заменяются только клавиши
[v], поэтому текст, например$5, остается без изменений. Если две клавиши, напримерcountиcounts, начинаются одинаково, выигрывает самая длинная клавиша. - Одно и то же имя может появляться несколько раз.
- Значения вставляются в виде текста, а не в формате HTML. Вместо этого поместите пометку в текст вокруг них:
Hi <b>$name</b>. - Переменные заменяются только в тексте, а не в таких атрибутах, как
hrefилиtitle. - В режиме разработки ключ, который не отображается в тексте, выдает предупреждение, в котором обнаруживаются опечатки.
- При рендеринге на стороне сервера
<t>с[v]на сервере отображается пустым и появляется после запуска приложения в браузере.
В переменных используется $name, а не {name}, потому что Angular читает одну { в шаблоне в качестве начала сообщения ICU, а шаблон не компилируется.
Ограничения
- Компоненты Angular нельзя помещать в компонент
<t>. Подойдут простые HTML-элементы (см. пример ниже). Переведенная разметка проходит дезинфицирующее средство HTML Angular. - Содержимое компонента
<t>не может превышать 10 КБ, что составляет около 5000 символов.
<!-- this is OK, since <a> is a plain HTML element --><t><a href="mailto:info@i42.ch">Please send us an email</a></t><!-- this does NOT work, since <app-button> is an Angular component --><t><app-button>Click me</app-button></t>
Для перевода атрибутов и других строк используйте t pipe.