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

Intl.NumberFormat.supportedLocalesOf()

Methode

Gibt ein Array der angegebenen Gebietsschemata zurück, die <code>Intl.NumberFormat</code> direkt unterstützt, ohne auf das Standardgebietsschema der Laufzeit zurückzufallen.

seit JavaScript ES5.1 / ECMA-402 1. Ausgabe (Baseline: alle Browse Kategorie: method-property

Signatur

Intl.NumberFormat.supportedLocalesOf(locales, options)

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

Typ
string[]
Beschreibung
Ein Array kanonisierter Sprach-Tags aus 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);
["de-DE", "fr-CH"] // abhängig von der Laufzeit; 'ban' (Balinesisch) fehlt meist

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']));
€ 1.234,50 €1,234.50

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

Kanonisierung und ungültige Tags

console.log(Intl.NumberFormat.supportedLocalesOf('DE-de'));

try {
  Intl.NumberFormat.supportedLocalesOf(['de_DE']);
} catch (e) {
  console.log(e.name);
}
["de-DE"] RangeError

// Wichtig · Fallstricke

  • Ungültige Tags (z. B. "de_DE" mit Unterstrich) werfen einen RangeError – Nutzereingaben daher in try…catch prü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 localeMatcher führt ebenfalls zu einem RangeError.
  • 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-arab bleiben im zurückgegebenen Tag erhalten.