Переключение глобальной локали

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


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

По умолчанию Moment.js использует английскую локаль (en). Для работы с другими локалями необходимо подключить соответствующие файлы локализации. В браузере это обычно осуществляется через отдельный скрипт, а в Node.js — через метод require:

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

После подключения локали её можно использовать при создании объектов Moment или при установке глобальной локали.


Установка глобальной локали

Глобальная локаль задаётся методом moment.locale():

moment.locale('ru');

После вызова все новые объекты Moment будут использовать русскую локаль по умолчанию. Это включает:

  • Форматирование дат (format()) с локализованными месяцами и днями недели.
  • Отображение относительных дат (fromNow(), from()).
  • Календарные методы (calendar()).

Пример:

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

Просмотр текущей глобальной локали

Метод moment.locale() без аргументов возвращает текущую глобальную локаль:

console.log(moment.locale()); // "fr"

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


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

Иногда требуется изменить локаль для конкретного объекта Moment, не затрагивая глобальную локаль. Для этого используется метод .locale() на экземпляре:

moment.locale('en'); // глобальная локаль английская
let m = moment().locale('ru'); // только для этого объекта русская локаль
console.log(m.format('LLLL')); // "четверг, 21 мая 2026 г. 12:34"
console.log(moment().format('LLLL')); // "Thursday, May 21, 2026 12:34"

Локализованные форматы и строки

После установки глобальной локали форматирование дат подстраивается под региональные стандарты. Например:

moment.locale('de'); // Немецкий
console.log(moment().format('LLLL')); // "Donnerstag, 21. Mai 2026 12:34"

Методы fromNow() и calendar() также учитывают локаль:

moment.locale('ru');
console.log(moment().subtract(2, 'days').fromNow()); // "2 дня назад"
console.log(moment().calendar()); // "Сегодня в 12:34"

Динамическое переключение локали

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

moment.locale('es'); // Испанский
console.log(moment().format('LLLL')); // "jueves, 21 de mayo de 2026 12:34"

moment.locale('ru'); // Смена на русскую локаль
console.log(moment().format('LLLL')); // "четверг, 21 мая 2026 г. 12:34"

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


Особенности и рекомендации

  • Подключение локалей увеличивает размер бандла. Для уменьшения размера рекомендуется импортировать только необходимые локали.
  • Если локаль не подключена, Moment.js автоматически вернёт английский формат.
  • Глобальная локаль влияет только на новые объекты Moment. Для существующих объектов необходимо явно вызвать .locale().

Пример комплексного использования

require('moment/locale/fr');
require('moment/locale/ru');

moment.locale('fr');
let date1 = moment('2026-05-21T12:34');
console.log(date1.format('LLLL')); // французский формат

moment.locale('ru');
let date2 = moment('2026-05-21T12:34');
console.log(date2.format('LLLL')); // русский формат

let date3 = moment('2026-05-21T12:34').locale('de'); // временно немецкая локаль
console.log(date3.format('LLLL')); // немецкий формат

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