Локаль и её свойства в Luxon определяют правила отображения дат,
времени и связанных текстовых элементов: названий месяцев, дней недели,
форматов чисел, календарных систем и региональных особенностей
форматирования. Библиотека опирается на Intl и расширяет
его удобными абстракциями через API DateTime,
Settings и Info.
Локаль в Luxon задаётся на нескольких уровнях и влияет на поведение форматирования:
DateTimeГлобальная настройка выполняется через объект настроек:
import { Settings } from "luxon";
Settings.defaultLocale = "ru";
После этого все создаваемые объекты DateTime, не имеющие
явно заданной локали, используют указанное значение.
Каждый экземпляр DateTime хранит собственное значение
локали. Оно доступно через свойство locale:
import { DateTime } from "luxon";
const dt = DateTime.local(2026, 5, 23, { locale: "en" });
console.log(dt.locale); // en
Изменение локали не мутирует объект, а возвращает новый экземпляр:
const ru = dt.setLocale("ru");
console.log(ru.locale); // ru
Ключевая особенность модели Luxon — неизменяемость. Любая операция над локалью создаёт новый объект, сохраняя предсказуемость поведения.
Основной инструмент для извлечения локализованных данных —
статический класс Info. Он не работает с конкретной датой,
а предоставляет справочные данные, зависящие от локали.
Метод Info.months() возвращает массив названий месяцев в
выбранной локали.
import { Info } from "luxon";
console.log(Info.months("long", { locale: "ru" }));
Результат:
[
"январь", "февраль", "март", "апрель",
"май", "июнь", "июль", "август",
"сентябрь", "октябрь", "ноябрь", "декабрь"
]
Поддерживаются форматы:
"long" — полные названия"short" — сокращённые"narrow" — минимальные обозначенияInfo.months("short", { locale: "en" });
Аналогичный механизм применяется к дням недели:
import { Info } from "luxon";
console.log(Info.weekdays("long", { locale: "ru" }));
Результат:
[
"понедельник", "вторник", "среда",
"четверг", "пятница", "суббота", "воскресенье"
]
Поддерживаются те же режимы представления: long,
short, narrow.
Luxon предоставляет доступ к локализованным вспомогательным элементам времени.
Info.eras("long", { locale: "en" });
Пример результата:
["Before Christ", "Anno Domini"]
Info.meridiems({ locale: "ru" });
Результат:
["AM", "PM"]
Хотя в некоторых локалях (например, японской или арабской) представление может отличаться.
Luxon позволяет определить, какие функции поддерживаются локалью
через Info.features():
import { Info } from "luxon";
console.log(Info.features());
Результат включает логические флаги, например:
relative: поддержка относительного времениlocaleWeek: особенности недели (начало недели)zones: поддержка временных зонЭто важно при построении интерфейсов, зависящих от региональных стандартов.
Локаль влияет на результат методов форматирования:
import { DateTime } from "luxon";
const dt = DateTime.local(2026, 5, 23, { locale: "ru" });
console.log(dt.toLocaleString(DateTime.DATE_FULL));
Пример вывода:
23 мая 2026 г.
При смене локали формат автоматически адаптируется:
console.log(dt.setLocale("en").toLocaleString(DateTime.DATE_FULL));
May 23, 2026
Если локаль не указана явно, используется глобальное значение:
import { Settings, DateTime } from "luxon";
Settings.defaultLocale = "fr";
const dt = DateTime.local(2026, 5, 23);
console.log(dt.toLocaleString(DateTime.DATE_FULL));
Результат будет соответствовать французской локализации.
Глобальная локаль применяется:
DateTime.local()toLocaleStringКаждое преобразование DateTime сохраняет локаль, если
она не переопределяется:
const base = DateTime.local(2026, 5, 23, { locale: "ru" });
const shifted = base.plus({ days: 1 });
console.log(shifted.locale); // ru
Это позволяет строить цепочки операций без потери региональных настроек.
Luxon использует локаль для всех методов toFormat, если
формат включает текстовые компоненты:
const dt = DateTime.local(2026, 5, 23, { locale: "ru" });
console.log(dt.toFormat("LLLL d, yyyy"));
Результат:
май 23, 2026
Здесь LLLL соответствует названию месяца, которое
берётся из локали.
Локаль и временная зона являются независимыми параметрами:
const dt = DateTime.local().setZone("Europe/Paris").setLocale("ru");
Изменение одного параметра не влияет на другой, что позволяет комбинировать региональные настройки гибко и независимо.
Luxon определяет локаль по следующему порядку:
fromObjectDateTimeSettings.defaultLocaleIntl, если предыдущие не
заданы)Эта иерархия обеспечивает предсказуемость поведения при работе в разных средах — серверной и клиентской.
Текущее значение локали можно извлечь напрямую:
const dt = DateTime.local(2026, 5, 23, { locale: "ru" });
console.log(dt.locale);
Значение всегда представлено в виде строки BCP 47, например:
ruen-USfr-CAПри построении интерфейсов локаль часто применяется совместно с
Info:
const locale = "ru";
const months = Info.months("long", { locale });
const weekdays = Info.weekdays("short", { locale });
Такой подход позволяет централизованно управлять отображением текстовых элементов календаря без привязки к конкретной дате.
Локаль в Luxon зависит от возможностей среды выполнения:
Intl.DateTimeFormatПри отсутствии поддержки Luxon может откатиться к стандартным английским значениям, что влияет только на текстовое представление, но не на вычисления дат.