В библиотеке Luxon работа с датами и временем тесно связана с понятием локали. Локаль влияет на формат вывода дат, названия месяцев и дней недели, правила отображения времени и чисел. Управление локалью может осуществляться как на уровне отдельного объекта даты, так и глобально для всего приложения.
Каждый экземпляр DateTime в Luxon содержит информацию о
локали. Это не просто строка форматирования, а часть внутреннего
состояния объекта, которая определяет:
toLocaleString и
toFormat.Ключевой момент: локаль не изменяет саму дату, а только её представление.
setLocaleМетод setLocale используется для изменения локали
конкретного экземпляра DateTime.
DateTime;DateTime.setLocale(locale: string): DateTime
import { DateTime } from "luxon";
const dt = DateTime.now();
const ru = dt.setLocale("ru");
const en = dt.setLocale("en");
const fr = dt.setLocale("fr");
console.log(ru.toLocaleString(DateTime.DATETIME_FULL));
console.log(en.toLocaleString(DateTime.DATETIME_FULL));
console.log(fr.toLocaleString(DateTime.DATETIME_FULL));
В каждом случае одна и та же дата будет представлена в разных языковых форматах.
setLocale в цепочках вызововПоскольку setLocale возвращает новый экземпляр, его
удобно использовать в цепочках:
const formatted = DateTime.now()
.setLocale("de")
.plus({ days: 2 })
.toLocaleString(DateTime.DATE_FULL);
Локаль сохраняется на всём протяжении цепочки, пока не будет явно
изменена другим вызовом setLocale.
Локаль особенно заметна при использовании стандартных шаблонов:
DateTime.now().setLocale("ru").toLocaleString(DateTime.DATE_HUGE);
Результат:
Помимо локальной настройки через setLocale, Luxon
позволяет задавать глобальные параметры через объект
Settings.
Settings.reconfigureSettings.reconfigure изменяет поведение библиотеки на
уровне всего приложения.
Позволяет задать значения по умолчанию для:
Settings.reconfigure(options: object): void
import { Settings } from "luxon";
Settings.reconfigure({
locale: "ru",
zone: "Europe/Moscow"
});
После этого все создаваемые DateTime будут использовать
указанные параметры по умолчанию.
reconfigureУстанавливает локаль по умолчанию:
Settings.reconfigure({
locale: "fr"
});
Это влияет на все новые DateTime, если локаль не
переопределена вручную.
Задает временную зону по умолчанию:
Settings.reconfigure({
zone: "UTC"
});
Используется при создании дат без явного указания зоны.
Определяет систему счисления:
Settings.reconfigure({
numberingSystem: "latn"
});
Например, арабская, латинская или индийская системы цифр.
Позволяет изменить календарную систему:
Settings.reconfigure({
outputCalendar: "islamic"
});
Это влияет на отображение дат в соответствующей календарной системе.
setLocale и глобальных настроекПри одновременном использовании локальных и глобальных настроек действует приоритет:
setLocale) имеют более высокий
приоритет.Settings.reconfigure)
используются по умолчанию.Settings.reconfigure({
locale: "ru"
});
const dt = DateTime.now().setLocale("en");
console.log(dt.locale); // "en"
Даже при глобальной русской локали объект будет использовать английскую локаль.
Используется, когда разные части интерфейса требуют разных языков:
const adminDate = DateTime.now().setLocale("en");
const userDate = DateTime.now().setLocale("ru");
Используется для унификации поведения приложения:
Settings.reconfigure({
locale: "ru",
zone: "Europe/Moscow"
});
Методы форматирования учитывают локаль автоматически:
toLocaleStringtoFormattoRelativetoRelativeCalendarDateTime.now()
.setLocale("es")
.toRelative();
Результат будет зависеть от испанской локали (например, «hace 2 horas»).
И setLocale, и reconfigure подчиняются
общей архитектуре Luxon:
DateTime неизменяем;function formatDate(dt, lang) {
return dt.setLocale(lang).toLocaleString(DateTime.DATE_MED);
}
Settings.reconfigure({
locale: "en",
zone: "UTC"
});
const userLocale = getUserLocale();
const dt = DateTime.now().setLocale(userLocale);
setLocale влияет только на представление, но не на
внутреннее значение времени;reconfigure влияет только на новые экземпляры;