Signatur
Beschreibung
Die statische Methode Intl.DurationFormat.supportedLocalesOf() prüft eine Liste von Sprach-Tags (BCP 47, z. B. "de-DE") und liefert nur die zurück, für die die JavaScript-Engine Formatierungsdaten für Zeitdauern hat. Nicht unterstützte Locales werden einfach weggelassen. Die Standard-Locale wird dabei nicht als Ersatz eingefügt.
Das ist praktisch, wenn Sie vor dem Erzeugen eines Intl.DurationFormat-Objekts wissen möchten, ob die gewünschte Sprache wirklich verwendet wird oder ob der Konstruktor stillschweigend auf eine andere Locale ausweicht. Typische Fälle sind Sprachauswahlen in einer Oberfläche, eine eigene Rückfallkette oder Tests in verschiedenen Umgebungen (Browser, Node.js mit small-icu).
Die zurückgegebenen Tags sind kanonisiert (z. B. wird "DE-de" zu "de-DE"). Ein Tag gilt auch dann als unterstützt, wenn nur eine allgemeinere Variante verfügbar ist, etwa "de" für "de-CH". Die Reihenfolge der Eingabe bleibt erhalten.
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". Damit wird der Algorithmus für den Abgleich der Locales gewählt. |
Beispiele
Unterstützte Locales herausfiltern
const wunsch = ['de-DE', 'ban', 'fr-CA', 'xx-XX'];
const unterstuetzt = Intl.DurationFormat.supportedLocalesOf(wunsch);
console.log(unterstuetzt);
Kanonisierung und lookup-Abgleich
const ergebnis = Intl.DurationFormat.supportedLocalesOf(
['DE-at', 'en-us'],
{ localeMatcher: 'lookup' }
);
console.log(ergebnis);
Eigene Rückfallkette für die Anzeige von Dauern
const formatiereDauer = (dauer, bevorzugt) => {
const [locale = 'en'] = Intl.DurationFormat.supportedLocalesOf(bevorzugt);
const df = new Intl.DurationFormat(locale, { style: 'long' });
return `${locale}: ${df.format(dauer)}`;
};
console.log(formatiereDauer({ hours: 1, minutes: 30 }, ['xx', 'de']));
Feature-Erkennung vor der Nutzung
if (typeof Intl.DurationFormat?.supportedLocalesOf === 'function') {
console.log(Intl.DurationFormat.supportedLocalesOf(navigator.languages ?? ['de']));
} else {
console.log('Intl.DurationFormat wird nicht unterstützt');
}
// Wichtig · Fallstricke
- Kompatibilität:
Intl.DurationFormatist recht neu (Chrome/Edge 129+, Firefox 136+, Safari 16.4+, Node.js 23+). In älteren Umgebungen istIntl.DurationFormatundefined, der Aufruf löst dann einenTypeErroraus. Nutzen Sie Feature-Erkennung oder ein Polyfill (z. B.@formatjs/intl-durationformat). - Ungültige Sprach-Tags wie
"de_DE"oder""lösen einenRangeErroraus. Sie werden also nicht still herausgefiltert. - Ein ungültiger Wert für
localeMatcherlöst ebenfalls einenRangeErroraus. - Das Ergebnis hängt von den ICU-Daten der Umgebung ab. Node.js-Builds mit
small-icuunterstützen unter Umständen nuren. "best fit"kann je nach Engine andere Ergebnisse liefern als"lookup". Für gleiche Ergebnisse auf allen Engines verwenden Sie"lookup".