Vuetify предоставляет встроенную поддержку локализации через Vue I18n и собственный механизм перевода компонентов. Использование кастомных переводов позволяет адаптировать интерфейс под конкретный язык, диалект или терминологию, не ограничиваясь стандартными наборами текста.
Для работы с кастомными переводами необходимо подключить
Vuetify с поддержкой локализации. В версии Vuetify 3
это делается через объект createVuetify и опцию
locale:
import { createVuetify } from 'vuetify'
import { en, ru } from 'vuetify/locale'
const vuetify = createVuetify({
locale: {
locale: 'ru', // текущий язык
fallback: 'en', // язык по умолчанию
messages: {
en,
ru,
},
},
})
Ключевые моменты:
locale — текущий язык интерфейса.fallback — язык, который используется при отсутствии
перевода.messages — объект с набором переводов для каждого
языка.Vuetify позволяет расширять стандартные переводы или полностью
создавать собственные строки. Для этого в объект messages
добавляются кастомные ключи:
const messages = {
ru: {
$vuetify: {
dataIterator: {
noResultsText: 'Результаты не найдены',
loadingText: 'Загрузка данных...',
},
dataTable: {
itemsPerPageText: 'Элементов на странице:',
},
},
custom: {
welcomeMessage: 'Добро пожаловать в приложение!',
submitButton: 'Отправить',
},
},
}
$vuetify.custom.Vuetify позволяет менять язык интерфейса во время выполнения:
vuetify.framework.locale.current = 'en'
После изменения свойства current все компоненты
автоматически обновляют текст на выбранный язык. Это особенно важно для
интерфейсов с переключателем языка.
Для использования кастомных строк в шаблонах Vue применяются функции
$t и v-text:
<template>
<div>
<p>{{ $t('custom.welcomeMessage') }}</p>
<v-btn>{{ $t('custom.submitButton') }}</v-btn>
</div>
</template>
$t('ключ') возвращает строку перевода для текущего
языка.computed: {
buttonLabel() {
const type = 'submit'
return this.$t(`custom.${type}Button`)
}
}
Для изменения текста встроенных компонентов достаточно добавить новые
значения в объект $vuetify:
const ru = {
$vuetify: {
dataIterator: {
noResultsText: 'Ничего не найдено',
},
dataTable: {
itemsPerPageText: 'Показать на странице:',
},
pagination: {
ariaLabel: {
next: 'Следующая страница',
previous: 'Предыдущая страница',
},
},
},
}
Vuetify также предоставляет возможность интеграции кастомных
переводов для сторонних компонентов через provide:
import { createApp } from 'vue'
import { createVuetify } from 'vuetify'
const app = createApp(App)
app.use(createVuetify({
locale: {
locale: 'ru',
messages,
},
}))
$vuetify или
$t, получит переводы автоматически.i18n.js с функцией getMessage(key).Структурирование ключей Использовать вложенные
объекты для разных категорий компонентов: buttons,
messages, dialogs.
Fallback и дефолтные значения Всегда задавать
fallback язык, чтобы избежать пустых строк.
Поддержка динамических параметров Переводы могут содержать placeholders:
greeting: 'Привет, {name}!'
<p>{{ $t('greeting', { name: 'Алексей' }) }}</p>
Vuetify совместим с Vue I18n, что позволяет использовать единый механизм локализации для всего приложения:
import { createI18n } from 'vue-i18n'
const i18n = createI18n({
locale: 'ru',
fallbackLocale: 'en',
messages,
})
const vuetify = createVuetify({
locale: {
adapter: i18n.global, // интеграция с Vue I18n
},
})
$t для всех компонентов, включая
сторонние и кастомные.messages = {
ru: {
$vuetify: { ... }, // стандартные компоненты
custom: { ... }, // пользовательские строки
},
en: {
$vuetify: { ... },
custom: { ... },
},
}
Кастомные переводы в Vuetify обеспечивают гибкость, позволяют полностью контролировать текст интерфейса и интегрируются с Vue I18n для построения многоязычных приложений. Правильная структура, динамическая смена языка и переопределение стандартных строк позволяют создавать качественные локализованные интерфейсы.