Skip to content

Резервирование

fallbackLocale: '<lang>' для выбора языка, который будет использоваться, когда ваш предпочтительный язык не имеет перевода.

Неявное резервирование с использованием локалей

Если задан параметр locale, содержащий территорию и необязательный диалект, неявное резервное копирование активируется автоматически.

Например, de-DE-bavarian будет использовать следующие резервные варианты:

  1. de-DE-bavarian
  2. de-DE
  3. de

Чтобы отключить автоматическое резервирование, добавьте постфикс восклицательного знака !, например de-DE!

Явное резервирование с одной локалью

Иногда некоторые элементы не переведены на некоторые языки. В этом примере элемент hello доступен на английском, но не на японском:

js
const messages = {
  en: {
    hello: 'Hello, world!'
  },
  ja: {
  }
}

Если вы хотите использовать (например) элементы en, когда элемент недоступен в нужной локали, установите параметр fallbackLocale в createI18n:

js
const i18n = createI18n({
  locale: 'ja',
  fallbackLocale: 'en',
  messages
})

Шаблон:

html
<p>{{ $t('hello') }}</p>

Вывод:

html
<p>Hello, world!</p>

По умолчанию при резервировании fallbackLocale генерируются два предупреждения консоли:

txt
[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.

Явное резервирование с массивом локалей

Можно задать более одной резервной локали, используя массив локалей. Например:

javascript
fallbackLocale: [ 'fr', 'en' ],

Явное резервирование с картами решений

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

Используя следующую карту решений:

javascript
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, чтобы выполнять интерполяцию шаблонов в ключах перевода, когда в вашем языке отсутствует перевод для ключа.

Поскольку ключи переводов являются строками, вы можете использовать читаемое пользователем сообщение (для определенного языка) как ключ. Например:

javascript
const messages = {
  ja: {
    'Hello, world!': 'こんにちは、世界!'
  }
}

Это полезно, потому что вам не нужно указывать перевод строки "Hello, world!" на английский язык.

На самом деле, вы даже можете включать параметры шаблона в ключ. В сочетании с fallbackFormat: true это позволяет пропустить написание шаблонов для вашего "базового" языка; ключи являются вашими шаблонами.

javascript
const messages = {
  ru: {
    'Hello {name}': 'Здравствуйте {name}'
  }
}

const i18n = createI18n({
  locale: 'ru',
  fallbackLocale: 'en',
  fallbackFormat: true,
  messages
})

Когда шаблон выглядит следующим образом:

html
<p>{{ $t('Hello {name}', { name: 'John' }) }}</p>
<p>{{ $t('The weather today is {condition}!', { condition: 'sunny' }) }}</p>

Будет выведено следующее:

html
<p>Здравствуйте, John</p>
<p>The weather today is sunny!</p>