Метод resolvedOptions

Метод resolvedOptions() присутствует у большинства форматирующих и локализационных объектов в Intl и возвращает фактически применённую конфигурацию после всех этапов разрешения локали, включая выбор языка, нормализацию параметров и применение значений по умолчанию.

Возвращаемый объект является «снимком» итоговой конфигурации экземпляра и не отражает исходные аргументы конструктора напрямую, поскольку между входными параметрами и финальным состоянием могут происходить значительные преобразования, связанные с алгоритмом выбора локали и доступными данными среды выполнения.


Метод определён на прототипах большинства объектов Intl.* и имеет одинаковую базовую цель: вернуть объект, содержащий реальные параметры форматирования, выбранные движком после обработки всех входных значений.

Ключевые свойства поведения:

  • результат зависит от алгоритма ResolveLocale
  • учитываются языковые теги BCP 47
  • применяются fallback-локали
  • учитываются настройки среды (браузер, Node.js, ICU)
  • результат всегда является новым объектом

Сигнатура

resolvedOptions()

Метод не принимает аргументов. Вызов всегда возвращает объект с конкретными свойствами, зависящими от типа Intl-класса.


Intl.NumberFormat.prototype.resolvedOptions

Один из наиболее информативных примеров — числовое форматирование.

Пример структуры результата

const nf = new Intl.NumberFormat('ru-RU', {
  style: 'currency',
  currency: 'RUB'
});

nf.resolvedOptions();

Типичный результат:

{
  locale: "ru-RU",
  numberingSystem: "latn",
  style: "currency",
  currency: "RUB",
  currencyDisplay: "symbol",
  minimumFractionDigits: 2,
  maximumFractionDigits: 2,
  useGrouping: true,
  notation: "standard",
  signDisplay: "auto"
}

Ключевые особенности

locale

Фактически применённая локаль после fallback-механизма.

numberingSystem

Система счисления, выбранная движком ("latn", "arab", "deva" и др.).

style

Итоговый режим форматирования: decimal, currency, percent, unit.

currency / unit

Присутствуют только при соответствующих стилях, даже если входной объект содержал дополнительные параметры.


Intl.DateTimeFormat.prototype.resolvedOptions

Наиболее сложный по количеству скрытых преобразований вариант.

const dtf = new Intl.DateTimeFormat('en-US', {
  year: 'numeric',
  month: 'long',
  day: '2-digit',
  timeZone: 'UTC'
});

dtf.resolvedOptions();

Пример результата:

{
  locale: "en-US",
  calendar: "gregory",
  numberingSystem: "latn",
  timeZone: "UTC",
  year: "numeric",
  month: "long",
  day: "2-digit",
  hourCycle: "h23",
  hour12: false
}

Особенности поведения

calendar

Может быть заменён системой локали, если явно не указан.

timeZone

Нормализуется и возвращается в каноническом виде.

hourCycle

Часто выводится даже при использовании hour12, поскольку движок приводит параметры к единой модели.


Intl.Collator.prototype.resolvedOptions

Используется для лексикографического сравнения строк с учётом локали.

const collator = new Intl.Collator('de-DE', {
  sensitivity: 'base',
  numeric: true
});

collator.resolvedOptions();

Пример результата:

{
  locale: "de-DE",
  usage: "sort",
  sensitivity: "base",
  ignorePunctuation: false,
  numeric: true,
  caseFirst: "false"
}

Особенности

usage

Определяет режим работы: sort или search.

sensitivity

Может быть изменена движком в зависимости от локали и ICU правил.


Intl.RelativeTimeFormat.prototype.resolvedOptions

Форматирование относительного времени (например, «через 2 дня»).

const rtf = new Intl.RelativeTimeFormat('ru', {
  numeric: 'auto',
  style: 'long'
});

rtf.resolvedOptions();

Пример:

{
  locale: "ru",
  numeric: "auto",
  style: "long"
}

Особенности

  • параметр numeric может быть нормализован
  • style всегда приводится к одному из допустимых значений

Intl.PluralRules.prototype.resolvedOptions

Используется для правил множественного числа.

const pr = new Intl.PluralRules('en-US', {
  type: 'ordinal'
});

pr.resolvedOptions();

Результат:

{
  locale: "en-US",
  type: "ordinal",
  minimumIntegerDigits: 1,
  minimumFractionDigits: 0,
  maximumFractionDigits: 3,
  pluralCategories: ["one", "two", "few", "other"]
}

Особенности

pluralCategories

Формируются на основе локали и ICU-таблиц, а не входных данных.


Intl.ListFormat.prototype.resolvedOptions

Форматирование списков.

const lf = new Intl.ListFormat('en-GB', {
  style: 'long',
  type: 'conjunction'
});

lf.resolvedOptions();

Результат:

{
  locale: "en-GB",
  style: "long",
  type: "conjunction"
}

Особенности

  • type влияет на синтаксис соединения элементов
  • style определяет уровень формальности

Intl.Segmenter.prototype.resolvedOptions

Сегментация текста (предложения, слова, графемы).

const seg = new Intl.Segmenter('ja', {
  granularity: 'grapheme'
});

seg.resolvedOptions();

Пример результата:

{
  locale: "ja",
  granularity: "grapheme"
}

Особенности

granularity

Фиксируется строго после нормализации:

  • grapheme
  • word
  • sentence

Общие свойства результата resolvedOptions

Несмотря на различия между классами, набор характеристик имеет общие закономерности.

Иммутабельность результата

Возвращаемый объект:

  • не связан с внутренним состоянием экземпляра
  • не изменяет поведение форматтера при модификации
  • представляет копию итоговой конфигурации

Нормализация значений

Почти все параметры проходят этап приведения:

  • сокращённые локали расширяются (enen-US)
  • неподдерживаемые значения заменяются fallback-эквивалентами
  • числовые параметры приводятся к диапазонам допустимых значений

Присутствие только активных опций

В итоговом объекте:

  • отсутствуют неиспользуемые параметры
  • исключаются взаимоисключающие настройки
  • добавляются вычисленные поля (например, calendar)

Отличие resolvedOptions от исходной конфигурации

Исходные параметры

new Intl.NumberFormat('en', {
  style: 'currency',
  currency: 'usd'
});

Итоговый resolvedOptions

{
  locale: "en-US",
  style: "currency",
  currency: "USD",
  currencyDisplay: "symbol",
  numberingSystem: "latn",
  minimumFractionDigits: 2,
  maximumFractionDigits: 2,
  useGrouping: true
}

Отличие проявляется в:

  • нормализации регистра (usdUSD)
  • добавлении параметров по умолчанию
  • выборе локали (enen-US)

Поведение при отсутствии явных параметров

Если объект создаётся без опций:

const nf = new Intl.NumberFormat();
nf.resolvedOptions();

Результат:

  • локаль определяется средой выполнения
  • большинство параметров выставляется по умолчанию ICU
  • включается стандартное форматирование

Производственные особенности

Связь с ICU

Все значения формируются на основе ICU (International Components for Unicode), что определяет:

  • языковые fallback-цепочки
  • календарные системы
  • правила сортировки и сегментации

Кэширование

Движки часто кэшируют результат resolvedOptions, поскольку:

  • создание объекта относительно дорого
  • результат не зависит от внешнего состояния после инициализации

Поведение в разных реализациях

Браузеры

  • возможны различия в наборе поддерживаемых свойств
  • некоторые поля могут отсутствовать при старых версиях движка

Node.js

  • зависит от версии ICU
  • при полной ICU-версии поведение максимально стабильно

Типовая структура объекта resolvedOptions

Несмотря на различия классов, структура обычно включает:

  • locale
  • параметры форматирования (style, type, usage)
  • параметры числового или текстового вывода
  • дополнительные системные поля (calendar, numberingSystem)

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

Метод фактически отражает:

  • результат выбора локали
  • активные правила форматирования
  • применённые fallback-значения

Это делает его источником точного состояния Intl-объекта после инициализации.