Компонент <T>
Оберните контент в компонент <T>, чтобы перевести его. Исходное содержимое отображается до тех пор, пока перевод не загрузится.
<T>This content will be translated</T>
Текст с привязками тоже работает. Содержимое снова переводится всякий раз, когда оно меняется, например, при изменении name:
<T>Hello {{ name }}</T>
Для часто меняющихся значений, таких как имена и количество, вместо этого используйте переменные, чтобы текст переводился только один раз.
Все переводы, запрошенные одновременно, отправляются в API одним запросом, а переводы кэшируются. Вы можете использовать столько компонентов <T>, сколько захотите.
Плагин регистрирует <T> во всем мире. Вы также можете импортировать его: import { T } from '@magic-translate/vue'. Translate — это тот же компонент, что и T.
Props
| Prop | Тип | Описание |
|---|---|---|
formality | 'informal' | 'formal' | Устанавливает формальность перевода. |
id | string | Позволяет редактировать это использование текста самостоятельно. |
lang | Language | Переопределяет установленный язык с помощью createMagicTranslate. |
v | Record<string, unknown> | Значения, которые не переведены, в содержимом отмечены как $name. См. раздел Переменные. |
<T lang="fr" formality="formal">How are you?</T>
Переменные
Передайте измененные значения, такие как имя или количество, в v и укажите их в содержимом как $name:
<T :v="{ name: user.name, count }">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:
<T :v="{ count: cart.items.length }">You have <b>$count items</b> in your cart.</T>
Несколько правил:
- Заменяются только клавиши
v, поэтому текст, например$5, остается без изменений. Если две клавиши, напримерcountиcounts, начинаются одинаково, выигрывает самая длинная клавиша. - Одно и то же имя может появляться несколько раз.
- Значения вставляются в виде текста, а не в формате HTML. Вместо этого поместите пометку в текст вокруг них:
Hi <b>$name</b>. - Переменные заменяются только в тексте, а не в таких атрибутах, как
hrefилиtitle. - Клавиша, которая не отображается в тексте, выдает предупреждение, в котором обнаруживаются опечатки.
- При рендеринге на стороне сервера, например в Nuxt, символ
<T>сvотображается пустым на сервере и появляется после запуска приложения в браузере.
Ограничения
- Компоненты Vue нельзя помещать в компонент
<T>. Обычные HTML-элементы подойдут (см. пример ниже), и стили с ограниченной областью действия продолжают работать над ними. - Содержимое компонента
<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 <MyButton> is a Vue component --><T><MyButton>Click me</MyButton></T>
Для перевода атрибутов и других строк используйте useTranslate composable.