Signatur
Beschreibung
Die statische Methode Intl.PluralRules.supportedLocalesOf() prüft eine Liste von Sprach-Tags (BCP 47) und liefert nur diejenigen zurück, die die JavaScript-Laufzeit für Pluralregeln wirklich unterstützt. Anders als der Konstruktor new Intl.PluralRules() fällt sie nicht stillschweigend auf die Standard-Locale zurück. So lässt sich vorab erkennen, ob eine gewünschte Sprache tatsächlich korrekt behandelt wird.
Gebraucht wird das vor allem in mehrsprachigen Anwendungen: Bevor Sie Übersetzungen mit Pluralformen (one, few, many, other …) auswählen, können Sie prüfen, ob die Sprache des Nutzers unterstützt wird. Wenn nicht, weichen Sie gezielt auf eine eigene Ausweichsprache aus.
Die Ergebnisse stehen in derselben Reihenfolge wie in der Eingabe und liegen in kanonisierter Form vor (z. B. wird aus "de-de" dann "de-DE"). Wird eine Locale zwar nicht genau, aber über eine allgemeinere Sprache unterstützt (etwa "de-CH" über "de"), gibt die Methode im Regelfall trotzdem das angefragte Tag zurück.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $locales Pflicht | string | string[] | Intl.Locale | Intl.Locale[] | undefined | Ein BCP-47-Sprach-Tag oder ein Array davon. Bei undefined kommt ein leeres Array zurück. |
|
| $options | { localeMatcher?: "lookup" | "best fit" } | { localeMatcher: "best fit" } | Objekt mit der Eigenschaft localeMatcher, die den Abgleich-Algorithmus festlegt: "lookup" (streng nach BCP 47) oder "best fit" (Standard, abhängig von der Implementierung). |
Rückgabewert
locales, die für Pluralregeln unterstützt werden. Es ist leer, wenn keine davon unterstützt wird.Beispiele
Unterstützte Locales filtern
const locales = ['de-DE', 'ban', 'ar-EG', 'xx-XX'];
const supported = Intl.PluralRules.supportedLocalesOf(locales);
console.log(supported);
Nutzersprache prüfen und gezielt ausweichen
const pickPluralLocale = (wanted, fallback = 'en') => {
const [match] = Intl.PluralRules.supportedLocalesOf(wanted, { localeMatcher: 'lookup' });
return match ?? fallback;
};
const locale = pickPluralLocale(navigator.languages ?? ['de-DE']);
const pr = new Intl.PluralRules(locale);
console.log(locale, pr.select(3));
Pluralform für Übersetzungen auswählen
const messages = {
pl: { one: 'plik', few: 'pliki', many: 'plików', other: 'pliku' },
en: { one: 'file', other: 'files' }
};
const formatFiles = (count, lang) => {
const [loc] = Intl.PluralRules.supportedLocalesOf(lang);
const useLang = loc && messages[lang] ? lang : 'en';
const rule = new Intl.PluralRules(useLang).select(count);
return `${count} ${messages[useLang][rule]}`;
};
console.log(formatFiles(5, 'pl'));
console.log(formatFiles(2, 'pl'));
console.log(formatFiles(1, 'en'));
// Wichtig · Fallstricke
- Ungültige Sprach-Tags (z. B.
"de_DE"mit Unterstrich oder"") lösen einenRangeErroraus, fallen also nicht einfach weg. Nutzereingaben sollten Sie deshalb intry...catcheinschließen. - Welche Locales unterstützt werden, hängt von der Laufzeit und ihren ICU-Daten ab. Node.js-Builds mit
small-icu(vor Node.js 13) kannten z. B. nur Englisch. Verlassen Sie sich nicht auf feste Ergebnisse, die über Umgebungen hinweg gleich bleiben. - Mit
"best fit"kann das Ergebnis je nach Engine unterschiedlich ausfallen. Für ein nachvollziehbares Verhalten verwenden Sie"lookup". - Andere Werte für
localeMatcherals"lookup"oder"best fit"lösen einenRangeErroraus. - Die Methode ist statisch. Sie wird über
Intl.PluralRulesaufgerufen, nicht über eine Instanz.