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

Intl.Collator.supportedLocalesOf()

Methode

Gibt ein Array der übergebenen Locales zurück, die die Laufzeitumgebung für Sortiervergleiche (<code>Intl.Collator</code>) unterstützt, ohne auf die Standard-Locale auszuweichen.

seit JavaScript ES5.1 (ECMA-402, 1. Ausgabe) – Baseline: alle Brow Kategorie: method-property

Signatur

Intl.Collator.supportedLocalesOf(locales, options)

Beschreibung

Die statische Methode Intl.Collator.supportedLocalesOf() prüft, welche der angegebenen Sprachumgebungen (BCP-47-Sprach-Tags) die aktuelle JavaScript-Umgebung beim sprachabhängigen Vergleichen und Sortieren von Zeichenketten direkt unterstützt. Zurückgegeben werden nur die unterstützten Tags in kanonischer Schreibweise. Nicht unterstützte Tags fallen weg, statt dass stillschweigend die Standard-Locale verwendet wird.

Das hilft vor allem dann, wenn eine Anwendung eine Liste bevorzugter Sprachen hat (zum Beispiel aus navigator.languages oder dem HTTP-Header Accept-Language) und vorher wissen will, ob eine korrekte Sortierung nach den Regeln dieser Sprache möglich ist. So lässt sich gezielt ein eigener Fallback wählen oder ein Hinweis anzeigen.

Ein Tag gilt als unterstützt, wenn die Umgebung es selbst oder eine allgemeinere Variante davon kennt. "de-CH" kann also als unterstützt gelten, wenn nur Daten für "de" vorhanden sind. Die Reihenfolge der Eingabe bleibt im Ergebnis erhalten. Welche Locales tatsächlich verfügbar sind, hängt von der Engine und ihren ICU-Daten ab.

Parameter

Name Typ Default Beschreibung
$locales string | string[] | Intl.Locale | Intl.Locale[] | undefined undefined Ein BCP-47-Sprach-Tag, ein Intl.Locale-Objekt oder ein Array davon. Bei undefined ist das Ergebnis ein leeres Array. Ungültige Tags lösen einen RangeError aus.
$options object undefined Optionales Objekt mit der Eigenschaft localeMatcher: "lookup" oder "best fit" (Standard). Legt den Algorithmus für den Locale-Abgleich fest.

Rückgabewert

Typ
string[]
Beschreibung
Ein neues Array mit den unterstützten Sprach-Tags in kanonischer Form und in der Reihenfolge der Eingabe. Wird keine Locale unterstützt, ist das Array leer.

Beispiele

Unterstützte Locales aus einer Liste filtern

const gewuenscht = ['de-DE', 'ban', 'sv', 'zh-Hans-CN'];
const unterstuetzt = Intl.Collator.supportedLocalesOf(gewuenscht);
console.log(unterstuetzt);
["de-DE", "sv", "zh-Hans-CN"] // abhängig von den ICU-Daten der Engine; "ban" (Balinesisch) fehlt meist

Sortier-Locale mit eigenem Fallback wählen

const waehleSortierLocale = (bevorzugt, fallback = 'en') => {
  const [erste] = Intl.Collator.supportedLocalesOf(bevorzugt, { localeMatcher: 'lookup' });
  return erste ?? fallback;
};

const locale = waehleSortierLocale(['xx-YY', 'sv-SE']);
const namen = ['Örjan', 'Anna', 'Zlatan', 'Åsa'];
namen.sort(new Intl.Collator(locale).compare);
console.log(locale, namen);
sv-SE ["Anna", "Zlatan", "Åsa", "Örjan"]

Kanonisierung und Fehlerbehandlung

console.log(Intl.Collator.supportedLocalesOf('DE-de'));
console.log(Intl.Collator.supportedLocalesOf(new Intl.Locale('fr', { region: 'CA' })));

try {
  Intl.Collator.supportedLocalesOf('de_DE'); // Unterstrich ist ungültig
} catch (err) {
  console.log(err.name);
}
["de-DE"] ["fr-CA"] RangeError

// Wichtig · Fallstricke

  • Engine-abhängig: Das Ergebnis hängt von den mitgelieferten ICU-Daten ab. Node.js-Builds mit small-icu (vor Node 13) unterstützten oft nur en. Browser unterscheiden sich ebenfalls.
  • Ist ein Tag „unterstützt“, heißt das nicht, dass es eigene Sortierregeln dafür gibt. Oft greift nur die allgemeinere Sprache oder die Unicode-Standardsortierung (DUCET/CLDR root).
  • Syntaktisch ungültige Tags (z. B. "de_DE", "") lösen einen RangeError aus, statt still herausgefiltert zu werden. Nutzereingaben daher mit try…catch absichern.
  • Der Unterschied zwischen "lookup" und "best fit" ist implementierungsabhängig. In der Praxis liefern beide meist dasselbe Ergebnis.
  • Unicode-Erweiterungen wie -u-co-phonebk bleiben im Rückgabewert erhalten. Ob die gewünschte Kollation aktiv ist, zeigt erst new Intl.Collator(tag).resolvedOptions().collation.