Локаль в Luxon определяет правила представления даты и времени в
человекочитаемом виде: названия месяцев и дней недели, порядок
элементов, формат времени, разделители, а также поведение методов
форматирования, использующих возможности
Intl.DateTimeFormat внутри JavaScript-движка.
В основе работы локали лежит стандарт ECMAScript Internationalization
API. Luxon не реализует собственные таблицы языков и форматов — он
делегирует большую часть задач встроенному Intl, добавляя
удобный функциональный слой и единый API поверх него.
Каждый объект DateTime содержит информацию о локали. Она
влияет только на отображение, но не изменяет сам момент времени.
import { DateTime } from "luxon";
const dt = DateTime.now();
По умолчанию используется локаль среды выполнения (браузер или
Node.js), например en-US. Это поведение может меняться
через глобальные настройки.
Ключевое правило: локаль не влияет на timestamp, она влияет только на формат вывода.
Luxon позволяет задавать локаль для конкретного объекта
DateTime, не затрагивая остальные.
const dt = DateTime.now().setLocale("ru");
После установки локали все методы форматирования начинают использовать правила русского языка:
dt.toLocaleString(DateTime.DATE_FULL);
Результат будет содержать русские названия месяцев и корректный порядок элементов даты.
Метод setLocale возвращает новый объект
DateTime, не изменяя исходный экземпляр. Это соответствует
иммутабельной модели Luxon.
Для установки локали по умолчанию используется глобальная настройка:
import { Settings } from "luxon";
Settings.defaultLocale = "ru";
После этого все новые экземпляры DateTime, созданные без
явного указания локали, будут использовать русский язык.
Глобальная локаль применяется только к новым объектам. Уже созданные экземпляры сохраняют свою локаль.
Основной механизм вывода локализованных строк — метод
toLocaleString.
const dt = DateTime.local(2026, 1, 15).setLocale("ru");
dt.toLocaleString(DateTime.DATE_FULL);
Предустановленные форматы:
DateTime.DATE_SHORTDateTime.DATE_MEDDateTime.DATE_MED_WITH_WEEKDAYDateTime.DATE_FULLDateTime.DATE_HUGEDateTime.DATETIME_SHORTDateTime.DATETIME_MEDDateTime.TIME_SIMPLEКаждый формат использует Intl.DateTimeFormat под
капотом, а локаль определяет языковую и культурную специфику
результата.
Пример различий локалей:
DateTime.local(2026, 1, 15).setLocale("en").toLocaleString(DateTime.DATE_FULL);
// January 15, 2026
DateTime.local(2026, 1, 15).setLocale("ru").toLocaleString(DateTime.DATE_FULL);
// 15 января 2026 г.
Метод toLocaleString принимает дополнительные параметры,
которые передаются в Intl.DateTimeFormat.
const dt = DateTime.local();
dt.toLocaleString({
locale: "ru",
weekday: "long",
year: "numeric",
month: "long",
day: "2-digit"
});
В этом случае локаль может быть указана прямо в опциях, что переопределяет локаль экземпляра.
Локаль влияет не только на дату, но и на представление времени:
DateTime.local(2026, 1, 15, 18, 30)
.setLocale("ru")
.toLocaleString(DateTime.DATETIME_MED);
В разных локалях различаются:
Например:
DateTime.local(2026, 1, 15, 18, 30)
.setLocale("en-US")
.toLocaleString(DateTime.TIME_SIMPLE);
// 6:30 PM
DateTime.local(2026, 1, 15, 18, 30)
.setLocale("ru")
.toLocaleString(DateTime.TIME_SIMPLE);
// 18:30
При создании объекта из строки локаль может влиять на интерпретацию текстовых элементов, таких как названия месяцев или дней недели.
DateTime.fromFormat("15 января 2026", "d LLLL yyyy", {
locale: "ru"
});
Здесь LLLL соответствует названию месяца, и именно
локаль определяет, что "января" корректно распознаётся как
январь.
Без указания локали парсинг может не сработать или дать некорректный результат:
DateTime.fromFormat("15 January 2026", "d LLLL yyyy", {
locale: "en"
});
Некоторые токены Luxon зависят от локали:
LLL — сокращённое название месяцаLLLL — полное название месяцаccc — сокращённый день неделиcccc — полный день неделиo — порядковый номер дня (ordinal)DateTime.local(2026, 1, 15)
.setLocale("en")
.toFormat("cccc, LLLL d");
// Thursday, January 15
DateTime.local(2026, 1, 15)
.setLocale("ru")
.toFormat("cccc, LLLL d");
// четверг, январь 15
Поведение определяется не Luxon напрямую, а локалью
Intl.
Локаль сохраняется при трансформациях объекта:
const base = DateTime.local().setLocale("ru");
const shifted = base.plus({ days: 5 });
shifted.locale; // "ru"
Любые операции (plus, minus,
set) возвращают новый объект, сохраняя локаль, если она не
была переопределена.
Помимо defaultLocale, Luxon предоставляет
централизованное управление параметрами форматирования:
import { Settings } from "luxon";
Settings.defaultLocale = "en-GB";
Это влияет на:
При этом локаль экземпляра имеет приоритет над глобальной настройкой.
Luxon полностью опирается на Intl.DateTimeFormat,
поэтому:
Luxon не нормализует локали, а передаёт их напрямую в движок JavaScript.
Локаль в Luxon можно рассматривать как слой форматирования поверх неизменяемого временного значения:
Эти три компонента независимы:
Такое разделение позволяет строить предсказуемую модель работы с датами в многоязычных приложениях.