Резервирование
fallbackLocale: '<lang>' для выбора языка, который будет использоваться, когда ваш предпочтительный язык не имеет перевода.
Неявное резервирование с использованием локалей
Если задан параметр locale, содержащий территорию и необязательный диалект, неявное резервное копирование активируется автоматически.
Например, de-DE-bavarian будет использовать следующие резервные варианты:
de-DE-bavariande-DEde
Чтобы отключить автоматическое резервирование, добавьте постфикс восклицательного знака !, например de-DE!
Явное резервирование с одной локалью
Иногда некоторые элементы не переведены на некоторые языки. В этом примере элемент hello доступен на английском, но не на японском:
const messages = {
en: {
hello: 'Hello, world!'
},
ja: {
}
}Если вы хотите использовать (например) элементы en, когда элемент недоступен в нужной локали, установите параметр fallbackLocale в createI18n:
const i18n = createI18n({
locale: 'ja',
fallbackLocale: 'en',
messages
})Шаблон:
<p>{{ $t('hello') }}</p>Вывод:
<p>Hello, world!</p>По умолчанию при резервировании fallbackLocale генерируются два предупреждения консоли:
[intlify] Не найден ключ 'hello' в локальных сообщениях 'ja'.
[intlify] Переход к переводу ключа 'hello' с локали 'en'.Первое предупреждающее сообщение выводится, если ключ, переданный функции перевода $t, отсутствует в локальных сообщениях ja, а второе предупреждающее сообщение выводится, когда происходит переход к разрешению локализованных сообщений из локали en. Эти предупреждающие сообщения выводятся для поддержки отладки с помощью Vue I18n.
ПРИМЕЧАНИЕ
Эти предупреждающие сообщения выводятся только в режиме разработки (process.env.NODE_ENV !== 'production'), а не в продакшене.
Чтобы подавить первое предупреждение (Не найден ключ...), установите silentTranslationWarn: true в режиме Legacy API или установите missingWarn: false в режиме Composition API при инициализации createI18n.
Чтобы подавить второе предупреждение (Переход к...), установите silentFallbackWarn: true в режиме Legacy API или установите fallbackWarn: false в режиме Composition API при инициализации createI18n.
Явное резервирование с массивом локалей
Можно задать более одной резервной локали, используя массив локалей. Например:
fallbackLocale: [ 'fr', 'en' ],Явное резервирование с картами решений
Если требуются более сложные карты решений для резервных локалей, можно определить карты решений с соответствующими резервными локалями.
Используя следующую карту решений:
fallbackLocale: {
/* 1 */ 'de-CH': ['fr', 'it'],
/* 2 */ 'zh-Hant': ['zh-Hans'],
/* 3 */ 'es-CL': ['es-AR'],
/* 4 */ 'es': ['en-GB'],
/* 5 */ 'pt': ['es-AR'],
/* 6 */ 'default': ['en', 'da']
},Результатом будут следующие цепочки резервирования:
| локаль | цепочки резервирования |
|---|---|
'de-CH' | de-CH > fr > it > en > da |
'de' | de > en > da |
'zh-Hant' | zh-Hant > zh-Hans > zh > en > da |
'es-SP' | es-SP > es > en-GB > en > da |
'es-SP!' | es-SP > en > da |
'fr' | fr > en > da |
'pt-BR' | pt-BR > pt > es-AR > es > en-GB > en > da |
'es-CL' | es-CL > es-AR > es > en-GB > en > da |
Интерполяция при резервировании
Установите fallbackFormat: true, чтобы выполнять интерполяцию шаблонов в ключах перевода, когда в вашем языке отсутствует перевод для ключа.
Поскольку ключи переводов являются строками, вы можете использовать читаемое пользователем сообщение (для определенного языка) как ключ. Например:
const messages = {
ja: {
'Hello, world!': 'こんにちは、世界!'
}
}Это полезно, потому что вам не нужно указывать перевод строки "Hello, world!" на английский язык.
На самом деле, вы даже можете включать параметры шаблона в ключ. В сочетании с fallbackFormat: true это позволяет пропустить написание шаблонов для вашего "базового" языка; ключи являются вашими шаблонами.
const messages = {
ru: {
'Hello {name}': 'Здравствуйте {name}'
}
}
const i18n = createI18n({
locale: 'ru',
fallbackLocale: 'en',
fallbackFormat: true,
messages
})Когда шаблон выглядит следующим образом:
<p>{{ $t('Hello {name}', { name: 'John' }) }}</p>
<p>{{ $t('The weather today is {condition}!', { condition: 'sunny' }) }}</p>Будет выведено следующее:
<p>Здравствуйте, John</p>
<p>The weather today is sunny!</p>