Signatur
Beschreibung
Die statische Methode Intl.NumberFormat.supportedLocalesOf() prüft eine Liste von Sprach-Tags (BCP 47, z. B. "de-DE" oder "ar-EG") und gibt nur die zurück, für die die JavaScript-Laufzeit Formatierungsdaten für Zahlen bereitstellt. Gebietsschemata, bei denen die Laufzeit auf ihr eigenes Standardgebietsschema zurückfallen müsste, werden aussortiert.
Das ist nützlich, wenn eine Anwendung mehrere Sprachen anbietet und vorab feststellen möchte, ob die Zahlen-, Währungs- oder Prozentformatierung für die gewünschte Sprache tatsächlich korrekt erfolgt – etwa um eine eigene Fallback-Strategie zu wählen, statt stillschweigend das Systemgebietsschema zu verwenden.
Die zurückgegebenen Tags sind kanonisiert (z. B. wird "de-de" zu "de-DE") und behalten die Reihenfolge der Eingabe bei. Ein Gebietsschema gilt auch dann als unterstützt, wenn nur eine allgemeinere Variante verfügbar ist (bei "best fit" bzw. "lookup", z. B. "de-CH" über "de") – zurückgegeben wird dabei das angefragte Tag.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $locales | string | string[] | Intl.Locale | Intl.Locale[] | undefined | undefined | Ein BCP-47-Sprach-Tag oder ein Array davon. Bei undefined wird ein leeres Array zurückgegeben. |
| $options | object | {} | Optionales Objekt mit der Eigenschaft localeMatcher: "best fit" (Standard) oder "lookup" – bestimmt den Abgleich-Algorithmus. |
Rückgabewert
locales, die ohne Rückgriff auf das Standardgebietsschema unterstützt werden. Leer, wenn keines unterstützt wird.Beispiele
Unterstützte Gebietsschemata ermitteln
const gewuenscht = ['de-DE', 'ban', 'fr-CH', 'xx-YY'];
const unterstuetzt = Intl.NumberFormat.supportedLocalesOf(gewuenscht);
console.log(unterstuetzt);
Fallback-Kette für Preisformatierung
const formatPreis = (betrag, bevorzugt) => {
const [locale = 'en-US'] = Intl.NumberFormat.supportedLocalesOf(bevorzugt);
return new Intl.NumberFormat(locale, {
style: 'currency',
currency: 'EUR'
}).format(betrag);
};
console.log(formatPreis(1234.5, ['xx', 'de-AT']));
console.log(formatPreis(1234.5, ['xx']));
Browser-Sprachen des Nutzers filtern
const sprachen = navigator.languages ?? [navigator.language];
const treffer = Intl.NumberFormat.supportedLocalesOf(sprachen, {
localeMatcher: 'lookup'
});
console.log(treffer.length ? `Nutze ${treffer[0]}` : 'Kein Treffer – Standard wird genutzt');
Kanonisierung und ungültige Tags
console.log(Intl.NumberFormat.supportedLocalesOf('DE-de'));
try {
Intl.NumberFormat.supportedLocalesOf(['de_DE']);
} catch (e) {
console.log(e.name);
}
// Wichtig · Fallstricke
- Ungültige Tags (z. B.
"de_DE"mit Unterstrich) werfen einenRangeError– Nutzereingaben daher intry…catchprüfen. - Das Ergebnis ist laufzeitabhängig: Browser und Node.js-Builds liefern unterschiedliche ICU-Daten. Node.js vor Version 13 enthielt standardmäßig nur
small-icu(praktisch nur Englisch). - Ein ungültiger Wert für
localeMatcherführt ebenfalls zu einemRangeError. - Die Methode sagt nichts über Unterstützung bestimmter Optionen (z. B.
notation: "compact"oder bestimmte Nummerierungssysteme) aus – nur über das Gebietsschema selbst. - Unicode-Erweiterungen wie
-u-nu-arabbleiben im zurückgegebenen Tag erhalten.