Start · Sprachen · JavaScript · Referenz · Intl.PluralRules.prototype.select()

Intl.PluralRules.prototype.select()

Methode

Gibt die Pluralkategorie (<code>"zero"</code>, <code>"one"</code>, <code>"two"</code>, <code>"few"</code>, <code>"many"</code> oder <code>"other"</code>) zurück, die für eine Zahl in der eingestellten Sprache gilt.

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

Signatur

Intl.PluralRules.prototype.select(number)

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

Typ
"zero" | "one" | "two" | "few" | "many" | "other"
Beschreibung
Ein String mit der Pluralkategorie der Zahl. Welche Kategorien vorkommen können, hängt von Sprache und 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)));
other one other ["zero", "one", "two", "few", "many", "other"]

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));
1 Datei ausgewählt 3 Dateien ausgewählt Выбрано 2 файла Выбрано 5 файлов Выбран 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(', '));
1st, 2nd, 3rd, 4th, 11th, 12th, 13th, 21st, 22nd, 23rd, 101st

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);
one other ["one", "other"]