Класс Info

Класс Info в Luxon представляет собой набор статических утилит, предназначенных для получения локализованных данных и информации о возможностях окружения, связанных с интернационализацией. Он не работает с конкретными датами и временем напрямую, а обслуживает слой метаданных: названия месяцев, дней недели, проверку поддерживаемых зон времени, особенности Intl и поведение локали.


В Luxon основная работа с датами выполняется через DateTime, Duration и Interval. Класс Info выделен отдельно и решает задачи справочной информации:

  • получение локализованных названий календарных элементов
  • проверка корректности IANA time zone
  • анализ возможностей среды выполнения (браузер/Node.js)
  • нормализация идентификаторов зон

Info не хранит состояние и не зависит от экземпляров — все методы статические.


Зависимость от Intl и поведение локали

Большая часть функциональности Info опирается на стандарт ECMAScript Internationalization API (Intl). Если среда выполнения ограничена или не поддерживает нужные части Intl, результат может отличаться.

Ключевой момент заключается в том, что:

  • локализация выполняется средствами движка JavaScript
  • Luxon не содержит встроенных таблиц языков
  • доступность данных зависит от Intl.DateTimeFormat

Для диагностики используется:

  • Info.features

Объект features

Info.features возвращает набор булевых флагов, отражающих поддержку ключевых возможностей Intl.

Типичный набор включает:

  • наличие Intl
  • поддержку DateTimeFormat
  • поддержку timeZone
  • корректную работу локалей

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

import { Info } from "luxon";

const features = Info.features;

console.log(features);

Результат представляет собой объект, например:

{
  intl: true,
  intlTokens: true,
  zones: true,
  relative: true
}

Эти флаги помогают определить, насколько полноценно будет работать локализация в текущей среде.


Работа с IANA time zones

Luxon использует IANA идентификаторы часовых поясов ("Europe/Berlin", "Asia/Tokyo" и т.д.). Класс Info предоставляет инструменты для их проверки и нормализации.

Проверка зоны: isValidIANAZone

Метод:

Info.isValidIANAZone(zone: string): boolean

Проверяет, является ли строка корректным IANA-идентификатором.

Пример:

Info.isValidIANAZone("Europe/Moscow"); // true
Info.isValidIANAZone("Invalid/Zone");   // false

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


Нормализация зоны: normalizeZone

Метод:

Info.normalizeZone(zone: string): string

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

Пример:

Info.normalizeZone("UTC"); 
// "UTC"

Info.normalizeZone("local");
// преобразуется в системную зону, если возможно

Нормализация особенно полезна при работе с пользовательским вводом или внешними API.


Календарные названия: weekdays

Метод Info.weekdays возвращает названия дней недели в зависимости от локали и формата.

Сигнатура:

Info.weekdays(length?: string, options?: object)

Параметр length

Определяет формат вывода:

  • "long" — полные названия
  • "short" — сокращённые
  • "narrow" — минимальные обозначения

Пример:

Info.weekdays("long");
// ["понедельник", "вторник", "среда", ...]
Info.weekdays("short");
// ["пн", "вт", "ср", ...]
Info.weekdays("narrow");
// ["п", "в", "с", ...]

Локаль

Можно явно указать локаль:

Info.weekdays("long", { locale: "en-US" });
// ["Monday", "Tuesday", ...]

Месяцы: months

Метод:

Info.months(length?: string, options?: object)

Возвращает список месяцев года в текущей или заданной локали.

Форматы

  • "long" — January, February…
  • "short" — Jan, Feb…
  • "narrow" — J, F…

Пример:

Info.months("long", { locale: "ru" });
// ["январь", "февраль", "март", ...]
Info.months("short", { locale: "en" });
// ["Jan", "Feb", "Mar", ...]

Эры: eras

Метод:

Info.eras(length?: string, options?: object)

Возвращает обозначения исторических эр (например, до нашей эры и нашей эры).

Примеры:

Info.eras("long", { locale: "ru" });
// ["до н. э.", "н. э."]
Info.eras("short", { locale: "en" });
// ["BC", "AD"]

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


Обращения времени суток: meridiems

Метод:

Info.meridiems(options?: object)

Возвращает обозначения половины суток в 12-часовом формате.

Пример:

Info.meridiems({ locale: "en-US" });
// ["AM", "PM"]

В некоторых локалях значения могут отсутствовать или быть неприменимыми (если используется 24-часовой формат).


Поведение локали и наследование настроек

Все методы Info, работающие с текстовыми представлениями, учитывают следующую иерархию:

  1. локаль, переданная в options
  2. глобальная локаль Luxon (если задана)
  3. системная локаль среды выполнения

Пример:

import { Settings, Info } from "luxon";

Settings.defaultLocale = "fr";

Info.months("long");
// будет использовать французскую локаль

Форматы длины строковых представлений

Во всех методах, возвращающих списки календарных элементов, используется единая система длины:

Значение Описание
long полные текстовые формы
short сокращённые формы
narrow минимальные символы

Эта система унифицирована для:

  • месяцев
  • дней недели
  • эр

Особенности работы в разных средах выполнения

Поведение Info может изменяться в зависимости от окружения:

Браузеры

  • полная поддержка Intl
  • корректная локализация
  • доступ к таймзонам через системные API

Node.js

  • зависит от сборки ICU
  • возможны ограничения в старых версиях
  • иногда отсутствуют расширенные локали

Минимальные среды

В средах с урезанным Intl:

  • возможны англоязычные fallback-значения
  • features может указывать на неполную поддержку

Использование Info для диагностики среды

Класс часто применяется для проверки готовности приложения к работе с локализацией:

import { Info } from "luxon";

if (!Info.features.intl) {
  console.warn("Intl не поддерживается");
}

if (!Info.features.zones) {
  console.warn("Часовые пояса могут работать некорректно");
}

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

Хотя Info не связан напрямую с форматированием дат, его данные часто используются как источник:

  • выпадающих списков месяцев
  • календарных компонентов
  • выбора дней недели
  • настройки локализации UI

Пример генерации списка месяцев:

const months = Info.months("long", { locale: "ru" });

const options = months.map((m, i) => ({
  label: m,
  value: i + 1
}));

Согласованность с другими классами Luxon

Info тесно связан с поведением:

  • DateTime.setLocale()
  • Settings.defaultLocale
  • DateTime.toLocaleString()

При изменении локали через Settings результаты Info автоматически отражают новое состояние.


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

  • не предназначен для работы с конкретными датами
  • не хранит состояние
  • не кэширует результаты в явном виде
  • полностью статический API
  • зависит от возможностей JavaScript-движка

Структура класса ориентирована на минимализм и делегирование задач системному Intl, а не на собственную реализацию локализации.