3.x
Essentials

Locale and labels

Derive names and week start from Intl, and translate every UI string.

Pass a BCP 47 tag to locale. The calendar reads day names, month names and the first day of the week from Intl.

Bound value
<script setup>
const locale = ref('de-DE')
</script>

<template>
  <FunctionalCalendar
    :key="locale"
    v-model="value"
    :locale="locale"
    is-date-picker
    show-week-numbers
  />
</template>

What a locale sets

SettingFrom the localeExplicit prop that wins
Day namesShort weekday namesdayNames
Month namesLong month namesmonthNames
Short month namesShort month namesshortMonthNames
First day of the weekWeek info of the localesundayStart

Underscore tags such as de_DE work. A malformed tag is ignored and the English defaults stay. dateFormat is not derived from the locale.

Names are Gregorian

Names and dates are always Gregorian, even for locales that default to another calendar, such as fa-IR, ar-SA or th-TH. The month is named with its Gregorian name and the year is the Gregorian year. The aria-label of each day uses the same names.

Week start

The first day of the week comes from Intl.Locale week info. The calendar uses getWeekInfo() where it exists, then the weekInfo property. Where the engine has neither, it falls back to a table of regions that start the week on Sunday, Saturday or Friday, and uses Monday for the rest. A first day of 7 counts as Sunday.

sundayStart overrides all of this. sundayStart: true starts on Sunday, false on Monday.

Week numbers follow the same first day.

Labels

labels covers every string the calendar writes. Pass only the ones you want to change. The rest keep their English text.

<FunctionalCalendar
  v-model="value"
  is-date-range
  can-clear-range
  :presets="true"
  :labels="{
    clearRange: 'Effacer la période',
    quickRanges: 'Périodes rapides',
    presets: { today: 'Aujourd\'hui' },
  }"
/>
LabelDefaultUsed for
previousMonth, nextMonthPrevious month, Next monthArrow buttons
previousYear, nextYearPrevious year, Next yearMonth picker arrows
previousYears, nextYearsPrevious years, Next yearsYear picker arrows
calendarCalendarName of the modal dialog
closeCloseTime picker close button
clearRange, clearRangesClear range, Clear rangesClear button
startDate, endDateStart date, End dateRange input titles
dateDateSingle input title
addDateAdd a dateTags input placeholder and name
removeDateRemoveRemove button of a tag, followed by its date
hour, minuteHour, MinuteTime picker titles and lists
quickRangesQuick rangesName of the presets group
rangeRangeSuffix in the label of a day in a numbered range
rangeStart, rangeEndrange start, range endSuffix in the label of the first and last day of a range
todayTodaySuffix in the label of today's date
weekWeekName of a week number, followed by the number
chooseMonth, chooseYearChoose month, Choose yearName of the month picker and the year picker
presets.todayTodayPreset button
presets.yesterdayYesterdayPreset button
presets.last7DaysLast 7 daysPreset button
presets.last30DaysLast 30 daysPreset button
presets.thisMonthThis monthPreset button
presets.lastMonthLast monthPreset button

labels.presets merges key by key, so you can translate one preset. Labels can come from the global options and configs too. The more specific source wins, and calendars never share labels.

Locale and labels are read once

The calendar reads locale and labels when it is created, unlike the watched data props such as markedDates. To switch at runtime, re-key it:

<FunctionalCalendar :key="locale" :locale="locale" is-date-picker />

Re-keying keeps the bound value, so the selection survives the switch.

Other places the locale shows

  • Full date labels such as "Thursday, 15 October 2026" in aria-label.
  • The label of each month grid.
  • The weekday matching for disabledDayNames, which also accepts the English Mo to Su.
Copyright © 2026