Получение свойств локали

Локаль и её свойства в Luxon определяют правила отображения дат, времени и связанных текстовых элементов: названий месяцев, дней недели, форматов чисел, календарных систем и региональных особенностей форматирования. Библиотека опирается на Intl и расширяет его удобными абстракциями через API DateTime, Settings и Info.


Локаль в Luxon задаётся на нескольких уровнях и влияет на поведение форматирования:

  • глобальная локаль библиотеки
  • локаль конкретного объекта DateTime
  • локаль, переданная при создании или форматировании

Глобальная настройка выполняется через объект настроек:

import { Settings } from "luxon";

Settings.defaultLocale = "ru";

После этого все создаваемые объекты DateTime, не имеющие явно заданной локали, используют указанное значение.


Локаль объекта 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. Он не работает с конкретной датой, а предоставляет справочные данные, зависящие от локали.

Список месяцев

Метод 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"]

Меридианы (AM/PM)

Info.meridiems({ locale: "ru" });

Результат:

["AM", "PM"]

Хотя в некоторых локалях (например, японской или арабской) представление может отличаться.


Проверка возможностей локали

Luxon позволяет определить, какие функции поддерживаются локалью через Info.features():

import { Info } from "luxon";

console.log(Info.features());

Результат включает логические флаги, например:

  • relative: поддержка относительного времени
  • localeWeek: особенности недели (начало недели)
  • zones: поддержка временных зон

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


Использование локали при форматировании DateTime

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

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()
  • при парсинге без явного указания locale
  • при форматировании через 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 определяет локаль по следующему порядку:

  1. Локаль, переданная в конструктор или fromObject
  2. Локаль экземпляра DateTime
  3. Settings.defaultLocale
  4. Локаль браузера (через Intl, если предыдущие не заданы)

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


Получение локали из существующего объекта

Текущее значение локали можно извлечь напрямую:

const dt = DateTime.local(2026, 5, 23, { locale: "ru" });

console.log(dt.locale);

Значение всегда представлено в виде строки BCP 47, например:

  • ru
  • en-US
  • fr-CA

Использование локали при работе с пользовательскими интерфейсами

При построении интерфейсов локаль часто применяется совместно с Info:

const locale = "ru";

const months = Info.months("long", { locale });
const weekdays = Info.weekdays("short", { locale });

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


Ограничения и особенности

Локаль в Luxon зависит от возможностей среды выполнения:

  • поддержка определяется Intl.DateTimeFormat
  • поведение может отличаться между Node.js и браузером
  • некоторые локали могут иметь неполные данные

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