Signatur
Beschreibung
Die Methode getCollations() liefert die Kollationstypen einer Locale. Das sind alternative Sortierregeln für Zeichenketten. Beispiele: "phonebk" (Telefonbuch-Sortierung im Deutschen, bei der „ä“ wie „ae“ einsortiert wird), "pinyin" und "stroke" (Chinesisch nach Aussprache bzw. Strichzahl) oder "emoji". Jeder dieser Werte lässt sich als Option collation an Intl.Collator übergeben oder über die Unicode-Erweiterung -u-co- im Locale-Tag angeben.
Nützlich ist die Methode vor allem, wenn Nutzer die Sortierung selbst wählen sollen, etwa über ein Auswahlfeld „Sortierung nach Aussprache / nach Strichzahl“. Auch zum Prüfen, ob eine bestimmte Kollation für eine Sprache überhaupt existiert, bevor man einen Collator damit erzeugt, eignet sie sich gut.
Der Rückgabewert hängt davon ab, wie die Locale erstellt wurde:
- Ist im Tag oder in den Optionen ausdrücklich eine Kollation gesetzt (z. B.
"de-DE-u-co-phonebk"), enthält das Array nur diesen einen Wert. - Andernfalls enthält es alle Kollationen, die die Implementierung für diese Locale kennt. Die Werte
"standard"und"search"sind laut Spezifikation nie enthalten, weil sie immer verfügbar sind bzw. überusagegewählt werden.
Bei jedem Aufruf entsteht ein neues Array. Du kannst es also verändern, ohne die Instanz zu beeinflussen.
Rückgabewert
"phonebk", "pinyin", "emoji"), in der Regel lexikographisch sortiert. Ist im Locale-Tag eine Kollation per -u-co- gesetzt, enthält das Array nur diesen Wert.Beispiele
Verfügbare Kollationen einer Sprache abfragen
const de = new Intl.Locale("de");
console.log(de.getCollations());
const zh = new Intl.Locale("zh");
console.log(zh.getCollations());
Explizit gesetzte Kollation über -u-co-
const loc = new Intl.Locale("de-DE-u-co-phonebk");
console.log(loc.getCollations());
console.log(loc.collation);
// Gleiches Ergebnis über die Options-Syntax
const loc2 = new Intl.Locale("de-DE", { collation: "phonebk" });
console.log(loc2.getCollations());
Sortier-Auswahl für Nutzer mit Feature-Erkennung
// Fallback für ältere Engines, die nur den veralteten Getter kennen
const getCollations = (locale) => {
if (typeof locale.getCollations === "function") return locale.getCollations();
if (Array.isArray(locale.collations)) return locale.collations;
return [];
};
const names = ["Müller", "Mueller", "Mahler", "Möller"];
const locale = new Intl.Locale("de-DE");
const varianten = ["standard", ...getCollations(locale)];
for (const collation of varianten) {
const collator = new Intl.Collator(locale.toString(), { collation });
// resolvedOptions zeigt, ob die Kollation wirklich verwendet wird
const used = collator.resolvedOptions().collation;
console.log(used, [...names].sort(collator.compare));
}
// Wichtig · Fallstricke
- Veralteter Getter: Frühere Implementierungen (z. B. Chrome 99–129, Safari 15.4) boten stattdessen die Accessor-Eigenschaft
locale.collationsan. Sie ist inzwischen veraltet. Nutze bevorzugtgetCollations()und prüfe per Feature-Erkennung (typeof locale.getCollations === "function"), notfalls mit dem Getter als Fallback. - Browser-Unterstützung: Die Methode gehört zur Intl Locale Info API. Chromium-Browser und Safari unterstützen sie. In Firefox fehlte sie lange; prüfe die aktuelle Kompatibilität, bevor du dich ohne Fallback darauf verlässt.
- Ergebnis ist engine-abhängig: Welche Werte zurückkommen, hängt von den CLDR/ICU-Daten der Laufzeitumgebung ab. Node.js-Builds mit
small-iculiefern womöglich weniger Werte. Schreibe keine Tests, die ein exaktes Array erwarten. "standard"und"search"tauchen nie im Ergebnis auf, sind aber trotzdem gültig."search"wählt man übernew Intl.Collator(loc, { usage: "search" }).- Die Kennungen sind Unicode-Kürzel wie
"phonebk","trad"oder"dict", keine lesbaren Namen. Für die Anzeige in einer Oberfläche brauchst du eine eigene Zuordnung zu verständlichen Bezeichnungen.