Signatur
Beschreibung
Der Konstruktor Intl.PluralRules() erzeugt ein Objekt, das die Pluralregeln einer Sprache kennt. Mit der Methode select() bekommst du zu einer Zahl die Pluralkategorie zurück: "zero", "one", "two", "few", "many" oder "other". Welche Kategorien vorkommen, hängt von der Sprache ab. Im Deutschen gibt es nur "one" und "other", im Arabischen alle sechs.
Das Objekt liefert keinen übersetzten Text, sondern nur einen Schlüssel. Mit diesem Schlüssel wählst du in deinen Übersetzungsdaten die richtige Form aus, etwa „1 Datei“ oder „3 Dateien“. Deshalb ist Intl.PluralRules die Grundlage vieler i18n-Bibliotheken und eignet sich für jede Oberfläche mit Mengenangaben.
Mit der Option type: "ordinal" bestimmst du statt der Anzahl-Form (kardinal) die Form von Ordnungszahlen. Im Englischen ergibt das die Endungen 1st, 2nd, 3rd, 4th. Die Optionen zur Stellenzahl wie minimumFractionDigits beeinflussen das Ergebnis: Im Englischen gilt 1 als "one", "1.0" mit einer Nachkommastelle aber als "other".
Der Konstruktor muss mit new aufgerufen werden. Ohne new wirft er einen TypeError. Die Erzeugung kostet vergleichsweise viel Zeit. Lege Instanzen deshalb einmal an und verwende sie wieder, statt sie in Schleifen neu zu erzeugen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $locales | string | string[] | Intl.Locale | undefined | Standard-Locale der Laufzeitumgebung | BCP-47-Sprach-Tag (z. B. "de-DE") oder ein Array davon, nach Priorität geordnet. Wird keine der Angaben unterstützt, gilt die Standard-Locale. |
| $options | object | {} | Konfigurationsobjekt mit folgenden Eigenschaften:
|
Beispiele
Pluralkategorie für deutsche Mengenangaben
const pr = new Intl.PluralRules('de-DE');
const formen = {
one: 'Datei',
other: 'Dateien'
};
const label = (n) => `${n} ${formen[pr.select(n)]}`;
console.log(label(0));
console.log(label(1));
console.log(label(5));
Englische Ordnungszahlen mit type: "ordinal"
const pr = new Intl.PluralRules('en-US', { type: 'ordinal' });
const suffixe = new Map([
['one', 'st'],
['two', 'nd'],
['few', 'rd'],
['other', 'th']
]);
const ordinal = (n) => `${n}${suffixe.get(pr.select(n))}`;
console.log([1, 2, 3, 4, 11, 12, 13, 21, 22, 103].map(ordinal).join(', '));
Sprachen mit mehr Kategorien und resolvedOptions()
const ar = new Intl.PluralRules('ar-EG');
console.log([0, 1, 2, 5, 11, 100].map((n) => ar.select(n)));
const ru = new Intl.PluralRules('ru');
console.log(ru.resolvedOptions().pluralCategories);
Nachkommastellen beeinflussen die Kategorie
const ohne = new Intl.PluralRules('en-US');
const mit = new Intl.PluralRules('en-US', { minimumFractionDigits: 1 });
console.log(ohne.select(1)); // "1 item"
console.log(mit.select(1)); // "1.0 items"
// Wichtig · Fallstricke
- Aufruf ohne
new:Intl.PluralRules()ohnenewwirft einenTypeError. Andere Intl-Konstruktoren wieIntl.NumberFormatverhalten sich dabei anders. - Immer eine
other-Form vorsehen: Jede Sprache kennt"other". Fehlt in deinen Übersetzungen ein Schlüssel, greife aufotherzurück, zum Beispiel mitformen[kat] ?? formen.other. - 0 ist nicht immer
"zero": Im Deutschen und Englischen ergibtselect(0)den Wert"other". Einen eigenen Text wie „keine Dateien“ musst du selbst abfragen. - Eingaben als Zeichenkette:
select()wandelt das Argument in eine Zahl um."1.0"wird dabei zu1. Nachkommastellen, die für die Kategorie zählen sollen, stellst du über die Optionen ein. - Performance: Instanzen zwischenspeichern und nicht bei jedem Aufruf neu erzeugen.
- Kompatibilität: Der Konstruktor und
select()sind in allen modernen Browsern verfügbar (Chrome 63+, Firefox 58+, Safari 13+) sowie in Node.js 10+.selectRange()und die Rundungsoptionen (ES2023) sind neuer und in älteren Umgebungen nicht vorhanden. Welche Locales unterstützt werden, prüfst du mitIntl.PluralRules.supportedLocalesOf().