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

Intl.DurationFormat.supportedLocalesOf()

Methode

Gibt ein Array der angegebenen Locales zurück, die <code>Intl.DurationFormat</code> direkt unterstützt, ohne auf die Standard-Locale der Laufzeitumgebung zurückzufallen.

seit JavaScript ES2025 (Intl.DurationFormat) – Baseline 2025: Chro Kategorie: method-property

Signatur

Intl.DurationFormat.supportedLocalesOf(locales, options)

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);
['de-DE', 'fr-CA'] // 'ban' und 'xx-XX' fehlen in typischen Umgebungen

Kanonisierung und lookup-Abgleich

const ergebnis = Intl.DurationFormat.supportedLocalesOf(
  ['DE-at', 'en-us'],
  { localeMatcher: 'lookup' }
);
console.log(ergebnis);
['de-AT', 'en-US']

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']));
de: 1 Stunde und 30 Minuten

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');
}
['de-DE', 'de', 'en-US'] // abhängig von Browser und Spracheinstellungen

// Wichtig · Fallstricke

  • Kompatibilität: Intl.DurationFormat ist recht neu (Chrome/Edge 129+, Firefox 136+, Safari 16.4+, Node.js 23+). In älteren Umgebungen ist Intl.DurationFormat undefined, der Aufruf löst dann einen TypeError aus. Nutzen Sie Feature-Erkennung oder ein Polyfill (z. B. @formatjs/intl-durationformat).
  • Ungültige Sprach-Tags wie "de_DE" oder "" lösen einen RangeError aus. Sie werden also nicht still herausgefiltert.
  • Ein ungültiger Wert für localeMatcher löst ebenfalls einen RangeError aus.
  • Das Ergebnis hängt von den ICU-Daten der Umgebung ab. Node.js-Builds mit small-icu unterstützen unter Umständen nur en.
  • "best fit" kann je nach Engine andere Ergebnisse liefern als "lookup". Für gleiche Ergebnisse auf allen Engines verwenden Sie "lookup".