Spec-Zone.ru › JavaScript

Intl.PluralRules

Базовый уровень Широко доступен

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с сентября 2019 года.

Объект Intl.PluralRules позволяет выполнять форматирование с учетом правил множественного числа и использовать языковые правила, связанные со множественным числом.

Описание

Языки используют различные паттерны для выражения как множественного числа предметов (количественных числительных), так и для выражения порядка предметов (порядковых числительных). В английском языке есть две формы для выражения количественных числительных: одна для единственного числа («item») (1 час, 1 собака, 1 рыба) и другая для нуля или любого другого числа («items») (0 часов, 2 лемминга, 100000.5 рыб), в то время как в китайском языке есть только одна форма, а в арабском — шесть! Аналогично, в английском языке есть четыре формы для выражения порядковых числительных: «th», «st», «nd», «rd», дающие последовательность: 0-й, 1-й, 2-й, 3-й, 4-й, 5-й, ..., 21-й, 22-й, 23-й, 24-й, 25-й и так далее, в то время как в китайском и арабском языках есть только одна форма для порядковых числительных.

Учитывая конкретный язык и набор параметров форматирования, методы Intl.PluralRules.prototype.select() и Intl.PluralRules.prototype.selectRange() возвращают тег, который представляет форму множественного числа для одного или диапазона чисел, количественных или порядковых. Код может использовать возвращенные теги для корректного представления чисел для данного языка. Полный набор тегов, которые могут быть возвращены: zero, one, two, few, many, и other («общая» форма множественного числа, также используемая, если в языке есть только одна форма).

Поскольку в английском языке есть только две формы для количественных числительных, метод select() возвращает только два тега: "one" для единственного числа и "other" для всех остальных количественных числительных. Это позволяет строить предложения, которые имеют смысл в английском языке для каждого случая, например: "1 dog is happy; do you want to play with it?" и "10 dogs are happy; do you want to play with them?".

Создание подходящих предложений для каждой формы зависит от языка, и даже в английском языке это может быть не так просто, как просто добавление «s» к существительному для образования формы множественного числа. Используя приведенный выше пример, мы видим, что форма может влиять на:

  • Существительные: 1 dog, 2 dogs (но не "fish" или "sheep", которые имеют одинаковую форму единственного и множественного числа).
  • Глаголы: 1 dog is happy, 2 dogs are happy.
  • Местоимения (и другие референты): Do you want to play with it / them.

В других языках форм больше, и выбор подходящих предложений может быть еще более сложным.

select() может возвращать любой из четырех тегов для порядковых числительных в английском языке, представляющих каждую из допустимых форм: one для чисел с «st» (1, 21, 31, ...), two для чисел с «nd» (2, 22, 32, ...), few для чисел с «rd» (3, 33, 43, ...), и other для чисел с «th» (0, 4-20 и т.д.). Опять же, возвращенные теги позволяют соответствующим образом форматировать строки, описывающие порядковое числительное.

Для получения дополнительной информации о правилах и их использовании см. Plural Rules (Правила множественного числа). Список правил и то, как они применяются для разных языков, см. в LDML Language Plural Rules (Правила множественного числа для языков LDML).

Конструктор

Intl.PluralRules()
Создает новый объект Intl.PluralRules.

Статические методы

Intl.PluralRules.supportedLocalesOf()
Возвращает массив, содержащий те из предоставленных локалей, которые поддерживаются без необходимости возврата к локали по умолчанию для среды выполнения.

Свойства экземпляра

Эти свойства определены в Intl.PluralRules.prototype и используются совместно всеми экземплярами Intl.PluralRules.

Intl.PluralRules.prototype.constructor
Функция-конструктор, создавшая объект-экземпляр. Для экземпляров Intl.PluralRules начальным значением является конструктор Intl.PluralRules.
Intl.PluralRules.prototype[Symbol.toStringTag]
Начальное значение свойства [Symbol.toStringTag] — это строка "Intl.PluralRules". Это свойство используется в Object.prototype.toString().

Методы экземпляра

Intl.PluralRules.prototype.resolvedOptions()
Возвращает новый объект со свойствами, отражающими параметры локали и сопоставления, рассчитанные во время инициализации объекта.
Intl.PluralRules.prototype.select()
Возвращает строку, указывающую, какое правило множественного числа следует использовать для форматирования с учетом локали.
Intl.PluralRules.prototype.selectRange()
Этот метод принимает два значения и возвращает строку, указывающую, какое правило множественного числа следует использовать для форматирования с учетом локали.

Примеры

Использование локалей

Этот пример показывает некоторые различия в локализованных правилах множественного числа для количественных числительных.

Чтобы получить формат для языка, используемого в пользовательском интерфейсе вашего приложения, обязательно укажите этот язык (и, возможно, несколько резервных языков), используя аргумент конструктора locales:

// US English
const enCardinalRules = new Intl.PluralRules("en-US");
console.log(enCardinalRules.select(0)); // "other"
console.log(enCardinalRules.select(1)); // "one"
console.log(enCardinalRules.select(2)); // "other"
console.log(enCardinalRules.select(3)); // "other"

// Arabic
const arCardinalRules = new Intl.PluralRules("ar-EG");
console.log(arCardinalRules.select(0)); // "zero"
console.log(arCardinalRules.select(1)); // "one"
console.log(arCardinalRules.select(2)); // "two"
console.log(arCardinalRules.select(6)); // "few"
console.log(arCardinalRules.select(18)); // "many"

Использование опций

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

Этот пример показывает, как вы можете установить тип правил на "ordinal" (порядковое) и как это влияет на форму для некоторых чисел в американском английском.

// US English - ordinal
const enOrdinalRules = new Intl.PluralRules("en-US", { type: "ordinal" });
console.log(enOrdinalRules.select(0)); // "other" (0th)
console.log(enOrdinalRules.select(1)); // "one"   (1st)
console.log(enOrdinalRules.select(2)); // "two"   (2nd)
console.log(enOrdinalRules.select(3)); // "few"   (3rd)
console.log(enOrdinalRules.select(4)); // "other" (4th)
console.log(enOrdinalRules.select(21)); // "one"  (21st)

Форматирование текста с использованием возвращенного тега

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

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

const suffixes = new Map([
  ["one", "st"],
  ["two", "nd"],
  ["few", "rd"],
  ["other", "th"],
]);
const formatOrdinals = (n) => {
  const rule = enOrdinalRules.select(n);
  const suffix = suffixes.get(rule);
  return `${n}${suffix}`;
};

formatOrdinals(0); // '0th'
formatOrdinals(1); // '1st'
formatOrdinals(2); // '2nd'
formatOrdinals(3); // '3rd'
formatOrdinals(4); // '4th'
formatOrdinals(11); // '11th'
formatOrdinals(21); // '21st'
formatOrdinals(42); // '42nd'
formatOrdinals(103); // '103rd'

Спецификации

Спецификация
ECMAScript® 2027 Internationalization API Specification
# pluralrules-objects

Совместимость с браузерами

Десктоп Мобильные Сервер
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on iOS Bun Deno Node.js
PluralRules
63
18
58
50
13
63
58
46
13
8.0
63
13
1.0.0
1.8
10.0.0До версии 13.0.0 по умолчанию доступны только данные локали для en-US. Подробнее см. в конструкторе PluralRules().
PluralRules
63
18
58
50
13
63
58
46
13
8.0
63
13
1.0.0
1.8
13.0.0
10.0.0–13.0.0До версии 13.0.0 по умолчанию доступны только данные локали для en-US. Когда указаны другие локали, экземпляр PluralRules молча возвращается к en-US. Чтобы сделать полные данные ICU (локали) доступными до версии 13, см. документацию Node.js о параметре --with-intl и о том, как предоставить данные.
resolvedOptions
63
18
58
50
13
63
58
46
13
8.0
63
13
1.0.0
1.8
10.0.0До версии 13.0.0 по умолчанию доступны только данные локали для en-US. Подробнее см. в конструкторе PluralRules().
select
63
18
58
50
13
63
58
46
13
8.0
63
13
1.0.0
1.8
10.0.0До версии 13.0.0 по умолчанию доступны только данные локали для en-US. Подробнее см. в конструкторе PluralRules().
selectRange
106
106
116
92
15.4
106
116
72
15.4
20.0
106
15.4
1.0.3
Нет
19.0.0
supportedLocalesOf
63
18
58
50
13
63
58
46
13
8.0
63
13
1.0.0
1.8
10.0.0До версии 13.0.0 по умолчанию доступны только данные локали для en-US. Подробнее см. в конструкторе PluralRules().

См. также

  • Полифилл Intl.PluralRules в FormatJS
  • Intl

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/PluralRules

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API