Signatur
Beschreibung
Die statische Methode Intl.DateTimeFormat.supportedLocalesOf() prüft eine Liste von BCP-47-Sprachkennungen (z. B. "de-DE", "ja-JP") und gibt nur diejenigen zurück, für die die aktuelle JavaScript-Umgebung Daten zur Datums- und Zeitformatierung besitzt. Gebietsschemas, für die ein Fallback auf das Standard-Gebietsschema nötig wäre, werden herausgefiltert.
Das ist nützlich, wenn Sie vor dem Formatieren wissen möchten, ob die Wunschsprache eines Nutzers tatsächlich unterstützt wird, etwa um eine eigene Fallback-Kette aufzubauen, einen Hinweis anzuzeigen oder eine Sprachauswahl nur mit verfügbaren Optionen zu befüllen. Besonders in Umgebungen mit eingeschränkten ICU-Daten (ältere Node.js-Builds mit small-icu, eingebettete Laufzeiten) liefert die Methode verlässliche Auskunft.
Die Rückgabe enthält die Kennungen in kanonisierter Form (z. B. wird "DE-de" zu "de-DE") und in der Reihenfolge der Eingabe. Ein Gebietsschema gilt auch dann als unterstützt, wenn nur eine übergeordnete Sprache vorhanden ist – beim Standard-Algorithmus "best fit" bzw. "lookup" wird etwa "de-XX" über "de" aufgelöst.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $locales | string | string[] | Intl.Locale | Intl.Locale[] | undefined | undefined | Eine BCP-47-Sprachkennung oder ein Array davon. Bei undefined wird ein leeres Array zurückgegeben. Ungültige Kennungen lösen einen RangeError aus. |
| $options | object | {} | Optionales Objekt mit der Eigenschaft localeMatcher: "best fit" (Standard, implementierungsabhängig) oder "lookup" (strenger Algorithmus nach BCP 47 / RFC 4647). |
Rückgabewert
Beispiele
Unterstützte Gebietsschemas filtern
const wunsch = ['de-DE', 'ban', 'ja-JP', 'xx-YY'];
const unterstuetzt = Intl.DateTimeFormat.supportedLocalesOf(wunsch);
console.log(unterstuetzt);
Kanonisierung und localeMatcher
const ergebnis = Intl.DateTimeFormat.supportedLocalesOf(
['DE-at', 'en-us'],
{ localeMatcher: 'lookup' }
);
console.log(ergebnis);
Datum in der Browsersprache mit eigenem Fallback formatieren
const formatiereDatum = (datum) => {
const kandidaten = [...navigator.languages, 'en-US'];
const [locale] = Intl.DateTimeFormat.supportedLocalesOf(kandidaten);
return new Intl.DateTimeFormat(locale ?? 'en-US', {
dateStyle: 'long',
timeStyle: 'short'
}).format(datum);
};
console.log(formatiereDatum(new Date(2024, 2, 15, 14, 30)));
Ungültige Kennung abfangen
try {
Intl.DateTimeFormat.supportedLocalesOf(['de-DE', 'kein gültiger tag']);
} catch (err) {
console.log(err.name);
}
// Wichtig · Fallstricke
- Ungültige Kennungen (syntaktisch falsche BCP-47-Tags) werfen einen
RangeErrorstatt einfach ignoriert zu werden – Nutzereingaben daher mittry...catchabsichern. - Das Ergebnis ist umgebungsabhängig: Browser, Node.js-Version und ICU-Build (
full-icuvs.small-icu) liefern unterschiedliche Listen. Nie fest davon ausgehen, dass ein Gebietsschema überall verfügbar ist. - Der Standard-Matcher
\"best fit\"ist implementierungsabhängig; für reproduzierbare Ergebnisse{ localeMatcher: 'lookup' }verwenden. - Unicode-Erweiterungen wie
-u-ca-buddhistbleiben in der Rückgabe erhalten, ihre Unterstützung wird aber nicht separat geprüft. DafürresolvedOptions()einer Instanz nutzen. - Die Methode gehört zu
Intl.DateTimeFormat; andereIntl-Konstruktoren (NumberFormat,Collator…) haben eigenesupportedLocalesOf()-Methoden mit ggf. abweichenden Ergebnissen. - Kompatibilität: in allen modernen Browsern und Node.js verfügbar; nur sehr alte Umgebungen (IE < 11) kennen die Intl-API nicht.