Библиотека Luxon предоставляет мощную систему локализации, которая влияет на форматирование дат, времени, относительных значений и календарных представлений. В основе лежит использование стандартов ICU (International Components for Unicode) и встроенных возможностей JavaScript для работы с локалями.
Локализация в Luxon определяется двумя ключевыми аспектами:
Локаль задаёт основной язык форматирования. В Luxon она передаётся
строкой в формате BCP 47 (например, en, ru,
ru-KZ, fr, de).
Каждый объект DateTime хранит собственную локаль:
import { DateTime } from "luxon";
const dt = DateTime.now().setLocale("ru");
Локаль не изменяет глобальное состояние, а применяется только к конкретному экземпляру.
Luxon позволяет задать локаль по умолчанию для всех создаваемых объектов:
import { Settings } from "luxon";
Settings.defaultLocale = "ru";
После этого все новые DateTime будут использовать
указанную локаль, если не переопределено локально.
Luxon поддерживает несколько предустановленных форматов, которые автоматически адаптируются под выбранную локаль.
DATE_SHORTDATE_MEDDATE_LONGDATE_HUGETIME_SIMPLETIME_WITH_SECONDSDATETIME_SHORTDATETIME_MEDDATETIME_LONGDATETIME_HUGEПример:
const dt = DateTime.now().setLocale("ru");
dt.toLocaleString(DateTime.DATE_MED);
Вывод зависит от локали. Например:
ru: 23 мая 2026 г.en: May 23, 2026Метод toLocaleString — основной инструмент
локализованного форматирования.
DateTime.now().setLocale("ru").toLocaleString({
weekday: "long",
year: "numeric",
month: "long",
day: "2-digit"
});
Результат:
суббота, 23 мая 2026
Luxon использует конфигурацию, аналогичную
Intl.DateTimeFormat:
weekdayyearmonthdayhourminutesecondhour12Значения параметров:
"numeric""2-digit""long""short""narrow"Форматирование времени также зависит от локали.
DateTime.now()
.setLocale("en")
.toLocaleString(DateTime.TIME_WITH_SECONDS);
Пример вывода:
3:45:12 PM
В русской локали:
15:45:12
Разница обусловлена использованием 12-часового или 24-часового формата, который определяется региональными настройками.
Luxon предоставляет удобные предустановленные наборы форматов:
DateTime.now().setLocale("ru").toLocaleString(DateTime.DATETIME_MED);
Пример вывода:
23 мая 2026 г., 15:45
Эти пресеты автоматически комбинируют локализованные правила даты и времени.
При смене локали автоматически изменяются:
Пример:
DateTime.now().setLocale("fr").toLocaleString({
weekday: "long",
month: "long",
day: "numeric"
});
Результат:
samedi, 23 mai
Локаль может включать регион:
en-USen-GBru-RUru-KZРегион влияет на:
Пример:
DateTime.now().setLocale("en-GB").toLocaleString();
Пример вывода:
23/05/2026
В то время как en-US даст:
5/23/2026
Luxon поддерживает вывод относительных выражений через
toRelative() и toRelativeCalendar().
DateTime.now()
.minus({ hours: 3 })
.setLocale("ru")
.toRelative();
Результат:
3 часа назад
В английской локали:
3 hours ago
DateTime.now()
.plus({ days: 2 })
.setLocale("ru")
.toRelativeCalendar();
Результат:
через 2 дня
Luxon опирается на ICU-локали, поэтому глубокая кастомизация ограничена, но возможна через:
setLocale;Intl.DateTimeFormat через
.toFormat() косвенно.Пример кастомного формата:
DateTime.now().setLocale("ru").toFormat("cccc dd LLLL yyyy");
Вывод:
суббота 23 мая 2026
Метод toFormat не полностью зависит от локали, но
использует её для текстовых элементов:
DateTime.now()
.setLocale("ru")
.toFormat("dd MMMM yyyy, cccc");
Результат:
23 мая 2026, суббота
При разборе дат через fromFormat локаль критически
важна, если используются текстовые месяцы или дни недели.
DateTime.fromFormat(
"23 мая 2026",
"dd LLLL yyyy",
{ locale: "ru" }
);
Без указания локали парсинг может быть некорректным, так как
LLLL зависит от языка.
Все производные объекты сохраняют локаль исходного
DateTime:
const dt = DateTime.now().setLocale("ru");
const shifted = dt.plus({ days: 5 });
shifted.toLocaleString(DateTime.DATE_FULL);
Локаль сохраняется автоматически, если явно не переопределена.
Luxon использует Intl.DateTimeFormat под капотом,
поэтому:
Несмотря на гибкость, существуют ограничения:
Intl;Luxon применяет локаль по следующему приоритету:
setLocale);Settings.defaultLocale);en как резервная локаль.