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'
Спецификации
Совместимость с браузерами
| Десктоп | Мобильные | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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(). |
См. также
© 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