Signatur
Beschreibung
Die Methode select() einer Intl.PluralRules-Instanz ermittelt für eine Zahl die passende Pluralkategorie nach den CLDR-Regeln der eingestellten Sprache. Sie liefert dabei keinen fertigen Text, sondern nur einen Schlüssel wie "one" oder "other". Diesen Schlüssel nutzen Sie, um aus Ihren eigenen Übersetzungen die richtige Wortform auszuwählen, etwa „1 Datei“ oder „3 Dateien“.
Sprachen unterscheiden sich hier stark. Deutsch und Englisch kennen bei Grundzahlen nur "one" und "other". Russisch oder Polnisch brauchen zusätzlich "few" und "many", Arabisch nutzt alle sechs Kategorien. Wenn Sie Pluralformen mit n === 1 ? … : … fest einprogrammieren, klappt das in vielen Sprachen nicht. Mit select() übergeben Sie diese Logik an die Laufzeitumgebung.
Welche Regeln gelten, bestimmt die Option type im Konstruktor. Mit "cardinal" (Standard) erhalten Sie Kategorien für Mengenangaben, mit "ordinal" für Ordnungszahlen. Im Englischen wählen Sie so zum Beispiel die Endungen 1st, 2nd, 3rd, 4th. Auch Formatierungsoptionen wie minimumFractionDigits fließen ein, denn „1“ und „1.0“ können in unterschiedliche Kategorien fallen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $number Pflicht | number | string | Die Zahl, für die die Pluralkategorie bestimmt werden soll. Andere Werte werden in eine Zahl umgewandelt (z. B. "5" → 5). Bei negativen Zahlen zählt der Betrag, d. h. -1 ergibt im Englischen "one". |
Rückgabewert
type ab. Sie lassen sich über resolvedOptions().pluralCategories abfragen. "other" gibt es in jeder Sprache.Beispiele
Grundzahlen: Deutsch und Arabisch im Vergleich
const de = new Intl.PluralRules('de-DE');
console.log(de.select(0)); // "other"
console.log(de.select(1)); // "one"
console.log(de.select(2)); // "other"
const ar = new Intl.PluralRules('ar-EG');
console.log([0, 1, 2, 5, 11, 100].map((n) => ar.select(n)));
Lokalisierte Pluralformen für eine Dateianzeige
const messages = {
de: { one: '{n} Datei ausgewählt', other: '{n} Dateien ausgewählt' },
ru: { one: 'Выбран {n} файл', few: 'Выбрано {n} файла', many: 'Выбрано {n} файлов', other: 'Выбрано {n} файла' }
};
const formatCount = (locale, n) => {
const category = new Intl.PluralRules(locale).select(n);
const template = messages[locale][category] ?? messages[locale].other;
return template.replace('{n}', new Intl.NumberFormat(locale).format(n));
};
console.log(formatCount('de', 1));
console.log(formatCount('de', 3));
console.log(formatCount('ru', 2));
console.log(formatCount('ru', 5));
console.log(formatCount('ru', 21));
Englische Ordnungszahlen (1st, 2nd, 3rd …)
const pr = new Intl.PluralRules('en-US', { type: 'ordinal' });
const suffixes = new Map([
['one', 'st'],
['two', 'nd'],
['few', 'rd'],
['other', 'th']
]);
const formatOrdinal = (n) => `${n}${suffixes.get(pr.select(n))}`;
console.log([1, 2, 3, 4, 11, 12, 13, 21, 22, 23, 101].map(formatOrdinal).join(', '));
Nachkommastellen beeinflussen die Kategorie
const plain = new Intl.PluralRules('en-US');
const withDecimals = new Intl.PluralRules('en-US', { minimumFractionDigits: 1 });
console.log(plain.select(1)); // "1" → one
console.log(withDecimals.select(1)); // "1.0" → other
console.log(plain.resolvedOptions().pluralCategories);