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

Intl.PluralRules.supportedLocalesOf()

Methode

Gibt ein Array der angegebenen Locales zurück, für die <code>Intl.PluralRules</code> Pluralregeln bereitstellt, ohne auf die Standard-Locale zurückzufallen.

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

Signatur

Intl.PluralRules.supportedLocalesOf(locales, options)

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

Typ
string[]
Beschreibung
Ein neues Array mit den kanonisierten Sprach-Tags aus 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);
["de-DE", "ar-EG"] // abhängig von der Laufzeit (ICU-Daten)

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));
de-DE other

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'));
5 plików 2 pliki 1 file

// Wichtig · Fallstricke

  • Ungültige Sprach-Tags (z. B. "de_DE" mit Unterstrich oder "") lösen einen RangeError aus, fallen also nicht einfach weg. Nutzereingaben sollten Sie deshalb in try...catch einschließ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 localeMatcher als "lookup" oder "best fit" lösen einen RangeError aus.
  • Die Methode ist statisch. Sie wird über Intl.PluralRules aufgerufen, nicht über eine Instanz.