Глобальная и локальная установка локали

Библиотека Day.js поддерживает локализацию дат, времени, названий месяцев, дней недели, форматов отображения и относительного времени. Локаль определяет, каким образом дата будет представлена пользователю в зависимости от языка и региональных настроек.

По умолчанию используется английская локаль (en).

import dayjs from 'dayjs'

console.log(dayjs().format())
// 2026-05-23T10:15:30+00:00

Для подключения других языков необходимо импортировать соответствующую локаль.


Импорт локали

Каждая локаль поставляется отдельным модулем.

import dayjs from 'dayjs'
import 'dayjs/locale/ru'

После импорта локаль становится доступной внутри библиотеки, но автоматически не активируется.


Глобальная установка локали

Глобальная локаль применяется ко всем новым объектам dayjs.

Установка русской локали

import dayjs from 'dayjs'
import 'dayjs/locale/ru'

dayjs.locale('ru')

console.log(dayjs().format('D MMMM YYYY'))
// 23 мая 2026

Метод:

dayjs.locale(localeName)

принимает строковый идентификатор локали.


Как работает глобальная локаль

После вызова:

dayjs.locale('ru')

все новые экземпляры будут использовать русский язык:

console.log(dayjs().format('dddd'))
// суббота

console.log(dayjs().format('MMMM'))
// май

Это поведение распространяется на:

  • форматирование даты;
  • названия месяцев;
  • названия дней недели;
  • относительное время;
  • календарные форматы.

Уже созданные экземпляры не изменяются

Особенность Day.js заключается в неизменяемости объектов.

const date = dayjs()

dayjs.locale('ru')

console.log(date.format('MMMM'))

Результат останется английским, если объект был создан до смены локали.

Необходимо создать новый экземпляр:

const date = dayjs()

dayjs.locale('ru')

const newDate = dayjs()

console.log(newDate.format('MMMM'))
// май

Получение текущей локали

Текущую глобальную локаль можно получить без аргументов:

console.log(dayjs.locale())
// ru

Переключение между локалями

Локаль может изменяться динамически.

import 'dayjs/locale/ru'
import 'dayjs/locale/de'
import 'dayjs/locale/fr'

dayjs.locale('ru')
console.log(dayjs().format('MMMM'))
// май

dayjs.locale('de')
console.log(dayjs().format('MMMM'))
// Mai

dayjs.locale('fr')
console.log(dayjs().format('MMMM'))
// mai

Локальная установка локали

Глобальная локаль подходит не всегда. В многозадачных приложениях часто требуется отображать даты одновременно на нескольких языках.

Для этого используется локальная установка локали через метод .locale() у экземпляра.

import dayjs from 'dayjs'

import 'dayjs/locale/ru'
import 'dayjs/locale/fr'

const date = dayjs()

console.log(date.locale('ru').format('MMMM'))
// май

console.log(date.locale('fr').format('MMMM'))
// mai

Отличие глобальной и локальной локали

Глобальная локаль

Изменяет поведение всей библиотеки:

dayjs.locale('ru')

Подходит для:

  • одностраничных приложений с одним языком;
  • административных панелей;
  • внутренних систем;
  • приложений без мультиязычности.

Локальная локаль

Применяется только к конкретному экземпляру:

dayjs().locale('fr')

Подходит для:

  • мультиязычных интерфейсов;
  • международных сервисов;
  • таблиц с разными языками;
  • серверного рендеринга.

Локальная локаль не меняет глобальную

dayjs.locale('en')

const ruDate = dayjs().locale('ru')

console.log(ruDate.format('MMMM'))
// май

console.log(dayjs().format('MMMM'))
// May

Локальный вызов .locale() создаёт новый объект с другой локалью.


Цепочки вызовов

Локаль удобно комбинируется с форматированием.

const result = dayjs()
  .locale('ru')
  .format('D MMMM YYYY')

console.log(result)
// 23 мая 2026

Использование с плагином RelativeTime

Для отображения относительного времени требуется плагин RelativeTime.

import dayjs from 'dayjs'
import relativeTime from 'dayjs/plugin/relativeTime'

import 'dayjs/locale/ru'

dayjs.extend(relativeTime)
dayjs.locale('ru')

console.log(dayjs().fromNow())
// несколько секунд назад

Локальная локаль с RelativeTime

import 'dayjs/locale/de'

const date = dayjs().locale('de')

console.log(date.fromNow())
// vor ein paar Sekunden

Использование нескольких локалей одновременно

Одна из сильных сторон Day.js — возможность одновременной работы с разными языками.

import 'dayjs/locale/ru'
import 'dayjs/locale/fr'
import 'dayjs/locale/es'

const now = dayjs()

console.log(now.locale('ru').format('dddd'))
// суббота

console.log(now.locale('fr').format('dddd'))
// samedi

console.log(now.locale('es').format('dddd'))
// sábado

Локализация форматов даты

Некоторые форматы автоматически адаптируются под локаль.

Для этого используется плагин LocalizedFormat.

import localizedFormat from 'dayjs/plugin/localizedFormat'

dayjs.extend(localizedFormat)

После подключения:

dayjs.locale('ru')

console.log(dayjs().format('LL'))
// 23 мая 2026 г.

Пример для нескольких языков

const date = dayjs('2026-12-25')

console.log(date.locale('en').format('LL'))
// December 25, 2026

console.log(date.locale('ru').format('LL'))
// 25 декабря 2026 г.

console.log(date.locale('de').format('LL'))
// 25. Dezember 2026

Список популярных локалей

Локаль Язык
ru Русский
en Английский
de Немецкий
fr Французский
es Испанский
it Итальянский
ja Японский
zh-cn Китайский
kk Казахский
uk Украинский

Подключение казахской локали

import 'dayjs/locale/kk'

dayjs.locale('kk')

console.log(dayjs().format('D MMMM YYYY'))

Результат:

23 мамыр 2026

Загрузка локалей в Node.js

В среде Node.js подключение выглядит аналогично.

CommonJS

const dayjs = require('dayjs')
require('dayjs/locale/ru')

dayjs.locale('ru')

ES Modules

import dayjs from 'dayjs'
import 'dayjs/locale/ru'

dayjs.locale('ru')

Динамическая загрузка локали

В крупных приложениях локали часто загружаются по требованию.

async function setLocale(locale) {
  await import(`dayjs/locale/${locale}.js`)
  dayjs.locale(locale)
}

await setLocale('ru')

Такой подход уменьшает размер основного bundle.


Использование в React

import dayjs from 'dayjs'
import 'dayjs/locale/ru'

dayjs.locale('ru')

function Component() {
  return (
    <div>
      {dayjs().format('D MMMM YYYY')}
    </div>
  )
}

Использование локальной локали в React

function DateCard({ locale }) {
  return (
    <div>
      {dayjs().locale(locale).format('LL')}
    </div>
  )
}

Использование в Vue

import dayjs from 'dayjs'
import 'dayjs/locale/ru'

dayjs.locale('ru')
computed: {
  formattedDate() {
    return dayjs().format('D MMMM YYYY')
  }
}

Изменение локали во время работы приложения

function changeLanguage(lang) {
  dayjs.locale(lang)
}

После смены локали новые даты будут форматироваться иначе.


Проверка доступности локали

Если локаль не была импортирована:

dayjs.locale('ru')

Day.js silently fallback выполнит переключение обратно на английский язык.

Поэтому локаль необходимо импортировать заранее.


Пример ошибки

import dayjs from 'dayjs'

dayjs.locale('ru')

console.log(dayjs().format('MMMM'))
// May

Причина — отсутствие:

import 'dayjs/locale/ru'

Получение данных локали

Плагин LocaleData предоставляет доступ к данным языка.

import localeData from 'dayjs/plugin/localeData'

dayjs.extend(localeData)

Названия месяцев

console.log(dayjs.months())

Результат:

[
  'January',
  'February',
  'March',
  ...
]

После смены локали:

dayjs.locale('ru')

console.log(dayjs.months())
[
  'январь',
  'февраль',
  'март',
  ...
]

Названия дней недели

console.log(dayjs.weekdays())
[
  'Sunday',
  'Monday',
  ...
]

Русская локаль:

dayjs.locale('ru')

console.log(dayjs.weekdays())
[
  'воскресенье',
  'понедельник',
  ...
]

Краткие формы

console.log(dayjs.monthsShort())
console.log(dayjs.weekdaysShort())

Пример:

[
  'янв.',
  'февр.',
  'март',
  ...
]

Обновление локали

Для изменения существующей локали используется плагин UpdateLocale.

import updateLocale from 'dayjs/plugin/updateLocale'

dayjs.extend(updateLocale)

Переопределение названий месяцев

dayjs.updateLocale('ru', {
  months: [
    'Январь',
    'Февраль',
    'Март',
    'Апрель',
    'Май',
    'Июнь',
    'Июль',
    'Август',
    'Сентябрь',
    'Октябрь',
    'Ноябрь',
    'Декабрь'
  ]
})

Изменение формата относительного времени

dayjs.updateLocale('ru', {
  relativeTime: {
    future: 'через %s',
    past: '%s назад',
    s: 'несколько секунд',
    m: 'минута',
    mm: '%d минут'
  }
})

Создание собственной локали

dayjs.locale({
  name: 'custom',
  weekdays: [
    'Воскресенье',
    'Понедельник',
    'Вторник',
    'Среда',
    'Четверг',
    'Пятница',
    'Суббота'
  ],
  months: [
    'Январь',
    'Февраль',
    'Март',
    'Апрель',
    'Май',
    'Июнь',
    'Июль',
    'Август',
    'Сентябрь',
    'Октябрь',
    'Ноябрь',
    'Декабрь'
  ]
})

Использование:

dayjs.locale('custom')

Частые проблемы

Локаль не применяется

Причина:

import 'dayjs/locale/ru'

не был выполнен.


Формат остаётся английским

Объект был создан до смены глобальной локали.


RelativeTime отображается на английском

Не подключён:

import 'dayjs/locale/ru'

или локаль была установлена до подключения плагина.


Практический пример мультиязычного приложения

import dayjs from 'dayjs'

import localizedFormat from 'dayjs/plugin/localizedFormat'

import 'dayjs/locale/ru'
import 'dayjs/locale/en'
import 'dayjs/locale/de'

dayjs.extend(localizedFormat)

function formatDate(date, locale) {
  return dayjs(date)
    .locale(locale)
    .format('LL')
}

console.log(formatDate('2026-05-23', 'ru'))
// 23 мая 2026 г.

console.log(formatDate('2026-05-23', 'en'))
// May 23, 2026

console.log(formatDate('2026-05-23', 'de'))
// 23. Mai 2026