Подключение языковых пакетов

По умолчанию Day.js использует английскую локализацию. Форматирование месяцев, дней недели, относительного времени и других текстовых представлений даты выполняется на английском языке:

dayjs().format('MMMM')

Результат:

May

Для поддержки других языков библиотека использует отдельные языковые пакеты (locale packages). Каждый пакет содержит переводы месяцев, дней недели, форматов дат, правил склонения и параметров локализации.

Подключение локализации необходимо для:

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

Подключение языкового пакета в браузере

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

Сначала подключается сама библиотека Day.js:

<script src="https://unpkg.com/dayjs/dayjs.min.js"></script>

После этого подключается нужный языковой пакет:

<script src="https://unpkg.com/dayjs/locale/ru.js"></script>

Активация локали выполняется через метод locale():

<script>
  dayjs.locale('ru')

  console.log(dayjs().format('MMMM'))
</script>

Результат:

май

Подключение локали в Node.js

CommonJS

const dayjs = require('dayjs')

require('dayjs/locale/ru')

dayjs.locale('ru')

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

ES Modules

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

dayjs.locale('ru')

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

Принцип работы локалей

После подключения файл локали регистрируется внутри Day.js, но не становится активным автоматически.

Например:

import 'dayjs/locale/de'

Локаль загрузится, но язык останется английским до вызова:

dayjs.locale('de')

Это позволяет заранее подключать несколько языков и переключаться между ними динамически.


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

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

Подключение выполняется по имени файла:

import 'dayjs/locale/fr'

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

Метод:

dayjs.locale('ru')

устанавливает язык глобально для всех новых объектов Day.js.

Пример:

dayjs.locale('ru')

console.log(dayjs().format('dddd'))
console.log(dayjs().format('MMMM'))

Результат:

четверг
май

Локаль только для конкретного объекта

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

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

const date = dayjs()

console.log(date.locale('ru').format('MMMM'))
console.log(date.locale('de').format('MMMM'))

Результат:

май
Mai

Исходный объект при этом не изменяется.


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

Динамическая смена языка

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

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

setLanguage('ru')
console.log(dayjs().format('MMMM'))

setLanguage('fr')
console.log(dayjs().format('MMMM'))

Результат:

май
mai

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

Плагин RelativeTime выводит текст вида:

  • «5 минут назад»;
  • «через 2 дня»;
  • «несколько секунд назад».

Подключение

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

import 'dayjs/locale/ru'

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

Пример:

console.log(dayjs().subtract(3, 'hour').fromNow())

Результат:

3 часа назад

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

Day.js позволяет хранить разные языки параллельно.

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

После этого язык можно менять в любой момент:

dayjs.locale('fr')

или локально:

dayjs().locale('de')

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

Локали влияют на токены локализованных форматов.

Пример:

dayjs().format('LL')

Для работы подобных форматов требуется плагин LocalizedFormat.

Подключение

import localizedFormat from 'dayjs/plugin/localizedFormat'

dayjs.extend(localizedFormat)

Пример для русского языка:

dayjs.locale('ru')

console.log(dayjs().format('LL'))

Результат:

23 мая 2026 г.

Для английского:

dayjs.locale('en')

console.log(dayjs().format('LL'))

Результат:

May 23, 2026

Проверка текущей локали

Получение активного языка:

console.log(dayjs.locale())

Результат:

ru

Загрузка локалей по требованию

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

Динамический импорт

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

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

await loadLocale('ru')

Такой подход особенно полезен:

  • в SPA-приложениях;
  • при мультиязычном интерфейсе;
  • в мобильных приложениях;
  • при оптимизации bundle size.

Автоматическое определение языка браузера

const lang = navigator.language.toLowerCase()

Пример:

import(`dayjs/locale/${lang}.js`)
  .then(() => {
    dayjs.locale(lang)
  })

Если локаль отсутствует, желательно использовать резервный язык.


Резервная локаль

async function setLocale(lang) {
  try {
    await import(`dayjs/locale/${lang}.js`)
    dayjs.locale(lang)
  } catch {
    dayjs.locale('en')
  }
}

Настройка собственной локали

Day.js позволяет изменять существующие локали.

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

Подключение

import updateLocale from 'dayjs/plugin/updateLocale'

dayjs.extend(updateLocale)

Изменение названий месяцев:

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

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

Можно зарегистрировать полностью новую локаль.

dayjs.locale({
  name: 'custom',
  weekdays: [
    'День1',
    'День2',
    'День3',
    'День4',
    'День5',
    'День6',
    'День7'
  ],
  months: [
    'М1',
    'М2',
    'М3',
    'М4',
    'М5',
    'М6',
    'М7',
    'М8',
    'М9',
    'М10',
    'М11',
    'М12'
  ]
})

Активация:

dayjs.locale('custom')

Особенности локализации в Day.js

Иммутабельность

Локализация экземпляра не изменяет исходный объект:

const date = dayjs()

const ruDate = date.locale('ru')
const deDate = date.locale('de')

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

Изменение языка не влияет:

  • на timestamp;
  • на вычисления;
  • на timezone;
  • на сравнение дат.

Локаль влияет исключительно на текстовый вывод.


Некоторые плагины требуют локализации

Наиболее часто локали используются вместе с:

  • RelativeTime;
  • LocalizedFormat;
  • Calendar;
  • AdvancedFormat.

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

import dayjs from 'dayjs'

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

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

dayjs.extend(relativeTime)
dayjs.extend(localizedFormat)

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

setLanguage('ru')

console.log(dayjs().format('LL'))
console.log(dayjs().subtract(2, 'day').fromNow())

setLanguage('fr')

console.log(dayjs().format('LL'))
console.log(dayjs().subtract(2, 'day').fromNow())

Результат:

23 мая 2026 г.
2 дня назад

23 mai 2026
il y a 2 jours