Vuetify предоставляет мощный и гибкий компонент календаря — v-calendar, который можно настраивать под различные языки и форматы отображения дат. Локализация календаря включает в себя не только перевод названий месяцев и дней недели, но и настройку форматов даты, времени, первой недели года и других региональных особенностей.
vuetify и vue-i18nДля корректной локализации календаря рекомендуется использовать связку Vuetify + Vue I18n. Это позволяет централизованно управлять переводами и форматами.
Пример подключения локализации:
import { createVuetify } from 'vuetify'
import { createI18n } from 'vue-i18n'
import 'vuetify/styles'
import { aliases, mdi } from 'vuetify/iconsets/mdi'
const messages = {
ru: {
$vuetify: {
close: 'Закрыть',
dataIterator: {
noResultsText: 'Совпадений не найдено',
loadingText: 'Загрузка...',
},
datePicker: {
itemsSelected: '{0} выбрано',
},
calendar: {
moreEvents: 'ещё {0}',
week: 'Неделя',
},
},
},
en: {
$vuetify: {
close: 'Close',
dataIterator: {
noResultsText: 'No matching records found',
loadingText: 'Loading...',
},
datePicker: {
itemsSelected: '{0} selected',
},
calendar: {
moreEvents: 'more {0}',
week: 'Week',
},
},
},
}
const i18n = createI18n({
locale: 'ru',
fallbackLocale: 'en',
messages,
})
const vuetify = createVuetify({
icons: {
defaultSet: 'mdi',
aliases,
sets: { mdi },
},
})
export { vuetify, i18n }
В этом примере переводятся основные элементы календаря, включая кнопки и текст отображения выбранных событий.
Компоненты v-calendar и v-date-picker используют массивы дней недели и месяцев, которые можно переопределять через свойство locale или через глобальные настройки Vuetify.
Пример задания локализованных дней и месяцев:
<template>
<v-date-picker
v-model="selectedDate"
:locale="locale"
:first-day-of-week="1"
></v-date-picker>
</template>
<script>
export default {
data() {
return {
selectedDate: null,
locale: 'ru',
}
},
}
</script>
Важно отметить:
first-day-of-week определяет первый день недели (0 —
воскресенье, 1 — понедельник и т.д.).locale отвечает за язык интерфейса календаря, включая
названия месяцев и дней недели.Vuetify поддерживает кастомные форматы отображения через formatter для календаря и date-picker. Это позволяет подстроить отображение даты под региональные стандарты.
Пример кастомного форматирования:
<v-date-picker
v-model="selectedDate"
:formatter="dateFormatter"
></v-date-picker>
<script>
export default {
data() {
return {
selectedDate: null,
}
},
methods: {
dateFormatter(date) {
const options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }
return new Date(date).toLocaleDateString('ru-RU', options)
},
},
}
</script>
Этот метод позволяет выводить даты в формате:
понедельник, 17 марта 2026.
Для компонента v-calendar можно локализовать отображение событий, включая подписи, подсказки и количество дополнительных событий.
Пример с локализованными событиями:
<v-calendar
:events="events"
:locale="locale"
event-color="blue"
></v-calendar>
<script>
export default {
data() {
return {
locale: 'ru',
events: [
{
name: 'Совещание',
start: '2026-03-17',
end: '2026-03-17',
},
{
name: 'Вебинар',
start: '2026-03-18',
end: '2026-03-18',
},
],
}
},
}
</script>
Текст дополнительных событий можно локализовать через
$vuetify.calendar.moreEvents, чтобы при переполнении ячейки
с событиями отображался перевод.
DD.MM.YYYY, в США — MM/DD/YYYY.locale или через Vue I18n.Использование этих настроек позволяет полностью адаптировать календарь под нужный регион без необходимости переписывать шаблоны или компоненты.
Для динамического переключения языка интерфейса можно изменять
свойство locale в компоненте:
<v-date-picker v-model="selectedDate" :locale="currentLocale"></v-date-picker>
<script>
export default {
data() {
return {
selectedDate: null,
currentLocale: 'ru',
}
},
methods: {
switchLocale(lang) {
this.currentLocale = lang
},
},
}
</script>
В сочетании с Vue I18n это позволяет полностью менять язык интерфейса календаря в реальном времени без перезагрузки страницы.
Локализация календаря в Vuetify обеспечивает гибкость в отображении дат, дней недели, месяцев и событий, что делает его универсальным инструментом для приложений с мультиязычной поддержкой.