Загрузка локалей

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


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

По умолчанию Moment.js загружает только англоязычную локаль (en). Для работы с другими локалями необходимо их подключить отдельно. В зависимости от способа подключения библиотеки локали могут добавляться двумя основными методами:

1. Через Node.js или сборщики модулей

При использовании Node.js или сборщиков модулей (Webpack, Rollup, Vite) локали можно импортировать из пакета moment/locale. Например:

const moment = require('moment');
require('moment/locale/ru'); // Подключение русской локали

moment.locale('ru');
console.log(moment().format('LLLL')); // Пятница, 21 мая 2026 г., 14:30

Ключевые моменты:

  • require('moment/locale/ru') загружает русскую локаль.
  • Метод moment.locale('ru') устанавливает текущую локаль для всех последующих операций с датой.
  • После установки локали все методы форматирования учитывают правила языка: название месяца, дня недели, порядок элементов даты.

2. Через подключение скриптов в браузере

Если Moment.js подключен через тег <script> в HTML, локали подключаются отдельными скриптами:

<script src="moment.min.js"></script>
<script src="moment/locale/ru.js"></script>
<script>
  moment.locale('ru');
  console.log(moment().format('LLLL'));
</script>

Важно, что последовательность подключения скриптов имеет значение: сначала основной файл Moment.js, затем нужные локали.


Установка локали по умолчанию

Moment.js позволяет задать глобальную локаль, которая будет использоваться во всех вызовах:

moment.locale('fr'); // Французский
console.log(moment().format('LLLL')); // vendredi 21 mai 2026 14:30

Для временного изменения локали можно использовать метод moment().locale() на конкретном объекте даты:

const date = moment();
console.log(date.locale('de').format('LLLL')); // Freitag, 21. Mai 2026 14:30
console.log(date.format('LLLL')); // Вернется к глобальной локали, если она отличалась

Список доступных локалей

Moment.js поставляется с более чем 100 локалями, включая распространённые: ru, en, fr, de, es, it, ja, zh-cn и многие другие.

Чтобы узнать, какие локали доступны, можно обратиться к массиву moment.locales():

console.log(moment.locales());

Форматы дат и локали

Локаль влияет на форматы дат и времени:

  • Длинные форматы: LLLL, LLL, LL, L
  • Краткие форматы: l, ll, lll, llll
  • Время: LT, LTS

Пример для русской локали:

moment.locale('ru');
console.log(moment().format('L'));    // 21.05.2026
console.log(moment().format('LL'));   // 21 мая 2026 г.
console.log(moment().format('LLL'));  // 21 мая 2026 г., 14:30
console.log(moment().format('LLLL')); // пятница, 21 мая 2026 г., 14:30

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

moment.locale('en');
console.log(moment().format('LLLL')); // Friday, May 21, 2026 2:30 PM

Таким образом, установка локали напрямую изменяет текстовые представления дней недели, месяцев и порядок элементов даты.


Автоматическое определение локали

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

const userLocale = navigator.language || navigator.userLanguage;
moment.locale(userLocale);
console.log(moment().format('LLLL'));

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


Загрузка кастомных локалей

Moment.js позволяет создавать собственные локали с уникальными форматами и названиями месяцев/дней недели:

moment.defineLocale('my-locale', {
  months : 'Месяц1_Месяц2_Месяц3_Месяц4_Месяц5_Месяц6_Месяц7_Месяц8_Месяц9_Месяц10_Месяц11_Месяц12'.split('_'),
  weekdays : 'День1_День2_День3_День4_День5_День6_День7'.split('_'),
  longDateFormat : {
    L : 'DD/MM/YYYY',
    LL : 'D MMMM YYYY',
    LLL : 'D MMMM YYYY HH:mm',
    LLLL : 'dddd, D MMMM YYYY HH:mm'
  }
});

moment.locale('my-locale');
console.log(moment().format('LLLL'));

Преимущество кастомных локалей — полный контроль над отображением дат и времени.


Итоговые рекомендации

  • Для всех нестандартных языков обязательно подключать соответствующий файл локали.
  • Использовать moment.locale() для глобальной установки или .locale() для временной локали на объекте даты.
  • При необходимости создавать кастомные локали через moment.defineLocale.
  • Для международных приложений рекомендуется определять локаль на основе языка пользователя.

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