Vuetify предоставляет встроенные возможности для интернационализации
(i18n), что позволяет создавать интерфейсы, поддерживающие несколько
языков. Основной инструмент для работы с локализацией в Vuetify — объект
vuetify с опцией locale, который управляет
текущим языком приложения и переводами встроенных компонентов.
Для начала необходимо подключить библиотеку Vuetify и установить поддержку нужных языков:
import { createVuetify } from 'vuetify'
import { zhHans, en } from 'vuetify/locale'
const vuetify = createVuetify({
locale: {
locale: 'en', // язык по умолчанию
messages: { en, zhHans } // подключенные языковые пакеты
}
})
В объекте messages ключи соответствуют кодам языков, а
значения — объектам перевода встроенных компонентов Vuetify (например,
диалогов, кнопок, подсказок).
Для динамического переключения языка используется свойство
vuetify.framework.locale.current (в Vuetify 2) или
vuetify.locale.current (в Vuetify 3):
// Vuetify 3
vuetify.locale.current = 'zhHans'
После изменения значения current все компоненты, которые
используют встроенные тексты Vuetify, автоматически обновляют свои
надписи.
Помимо встроенных языков, можно добавлять собственные переводы для текста в приложении:
const customMessages = {
en: {
hello: 'Hello',
goodbye: 'Goodbye'
},
ru: {
hello: 'Привет',
goodbye: 'До свидания'
}
}
const vuetify = createVuetify({
locale: {
locale: 'ru',
messages: {
...customMessages,
en, zhHans
}
}
})
В шаблонах эти переводы можно использовать через функцию
$vuetify.lang.t:
<template>
<div>{{ $vuetify.lang.t('hello') }}</div>
</template>
При смене языка $vuetify.lang.t('hello') будет
возвращать текст на выбранном языке.
Vuetify легко интегрируется с внешней библиотекой Vue I18n, что позволяет
централизованно управлять переводами всего приложения. Для этого
достаточно передать текущий язык из Vue I18n в
vuetify.locale:
import { createI18n } from 'vue-i18n'
const i18n = createI18n({
locale: 'ru',
messages: {
en: { welcome: 'Welcome' },
ru: { welcome: 'Добро пожаловать' }
}
})
const vuetify = createVuetify({
locale: {
locale: i18n.global.locale.value
}
})
// Смена языка
i18n.global.locale.value = 'en'
vuetify.locale.current = i18n.global.locale.value
Таким образом, локализация компонентов Vuetify синхронизируется с локализацией всего приложения.
Для создания переключателя языков удобно использовать
v-select или v-btn-toggle:
<template>
<v-select
:items="languages"
v-model="currentLanguage"
label="Выберите язык"
@change="changeLanguage"
></v-select>
</template>
<script>
export default {
data() {
return {
currentLanguage: 'en',
languages: [
{ text: 'English', value: 'en' },
{ text: '简体中文', value: 'zhHans' },
{ text: 'Русский', value: 'ru' }
]
}
},
methods: {
changeLanguage(lang) {
this.$vuetify.locale.current = lang
}
}
}
</script>
При выборе нового языка интерфейс Vuetify обновляется автоматически, включая все стандартные компоненты: кнопки, диалоги, формы, всплывающие подсказки.
Для больших приложений рекомендуется загружать языковые пакеты по требованию, чтобы снизить размер бандла:
async function loadLanguage(lang) {
if (!vuetify.locale.messages[lang]) {
const messages = await import(`vuetify/locale/${lang}.mjs`)
vuetify.locale.messages[lang] = messages.default
}
vuetify.locale.current = lang
}
Такой подход позволяет поддерживать десятки языков без увеличения размера основной сборки.
messages.$vuetify.lang.t.Intl.DateTimeFormat.vuetify.locale позволяет мгновенно обновлять
интерфейс.