Start · Sprachen · JavaScript · Referenz · new Intl.PluralRules()

new Intl.PluralRules()

Methode

Erstellt ein <code>Intl.PluralRules</code>-Objekt, das zu einer Zahl die passende Pluralkategorie der Sprache ermittelt (z. B. <code>"one"</code>, <code>"other"</code>).

seit JavaScript ES2018 (ECMA-402 5. Ausgabe) – Baseline: alle mode Kategorie: method-property

Signatur

new Intl.PluralRules(locales, options)

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:
  • localeMatcher: "best fit" (Standard) oder "lookup", der Algorithmus zur Auswahl der Locale.
  • type: "cardinal" (Standard, für Mengen) oder "ordinal" (für Ordnungszahlen).
  • minimumIntegerDigits, minimumFractionDigits, maximumFractionDigits, minimumSignificantDigits, maximumSignificantDigits: Stellenangaben wie bei Intl.NumberFormat. Sie wirken sich auf die ermittelte Kategorie aus.
  • roundingMode, roundingIncrement, roundingPriority, trailingZeroDisplay: neuere Rundungsoptionen (ES2023).

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));
0 Dateien 1 Datei 5 Dateien

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(', '));
1st, 2nd, 3rd, 4th, 11th, 12th, 13th, 21st, 22nd, 103rd

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);
[ 'zero', 'one', 'two', 'few', 'many', 'other' ] [ 'few', 'many', 'one', 'other' ]

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"
one other

// Wichtig · Fallstricke

  • Aufruf ohne new: Intl.PluralRules() ohne new wirft einen TypeError. Andere Intl-Konstruktoren wie Intl.NumberFormat verhalten sich dabei anders.
  • Immer eine other-Form vorsehen: Jede Sprache kennt "other". Fehlt in deinen Übersetzungen ein Schlüssel, greife auf other zurück, zum Beispiel mit formen[kat] ?? formen.other.
  • 0 ist nicht immer "zero": Im Deutschen und Englischen ergibt select(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 zu 1. 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 mit Intl.PluralRules.supportedLocalesOf().