Signatur
Beschreibung
Die Accessor-Eigenschaft collation liefert den Kollationstyp eines Intl.Locale-Objekts. Er legt fest, nach welchen Regeln Zeichenketten sortiert und verglichen werden. Viele Sprachen haben mehrere übliche Sortierordnungen, zum Beispiel die deutsche Telefonbuch-Sortierung ("phonebk", bei der „ü“ wie „ue“ behandelt wird) oder bei Chinesisch die Sortierung nach Pinyin ("pinyin") bzw. nach Strichzahl ("stroke").
Den Wert setzt du auf zwei Wegen: über die Unicode-Erweiterung -u-co- im Sprach-Tag (z. B. "de-DE-u-co-phonebk") oder über die Option collation im Konstruktor new Intl.Locale(tag, { collation }). Kommt beides vor, gilt die Option. Ist kein Kollationstyp angegeben, gibt die Eigenschaft undefined zurück.
Richtig nützlich wird die Eigenschaft zusammen mit Intl.Collator oder String.prototype.localeCompare(): Ein Locale-Objekt mit Kollationstyp kannst du direkt an einen Collator übergeben, um nach einer bestimmten Sortierordnung zu sortieren. Die Eigenschaft hat nur einen Getter. Sie ist also schreibgeschützt; für einen anderen Wert erzeugst du ein neues Intl.Locale-Objekt.
Rückgabewert
"phonebk", "pinyin", "stroke", "emoji", "eor") oder undefined, wenn keiner angegeben wurde.Beispiele
Kollationstyp aus dem Sprach-Tag lesen
const locale = new Intl.Locale("de-DE-u-co-phonebk");
console.log(locale.collation);
console.log(locale.baseName);
Kollationstyp über die Konstruktor-Option setzen
const zh = new Intl.Locale("zh-CN", { collation: "pinyin" });
console.log(zh.collation);
console.log(zh.toString());
// Die Option hat Vorrang vor der Erweiterung im Tag
const ueberschrieben = new Intl.Locale("zh-u-co-stroke", { collation: "pinyin" });
console.log(ueberschrieben.collation);
// Ohne Angabe: undefined
console.log(new Intl.Locale("de").collation);
Praxis: Namen nach deutscher Telefonbuch-Ordnung sortieren
const namen = ["Müller", "Muffler", "Mueller"];
const standard = new Intl.Locale("de");
const telefonbuch = new Intl.Locale("de", { collation: "phonebk" });
const sortiere = (locale) =>
[...namen].sort(new Intl.Collator(locale).compare);
console.log(standard.collation ?? "(Standard)", sortiere(standard));
console.log(telefonbuch.collation, sortiere(telefonbuch));
Prüfen, ob die Kollation tatsächlich unterstützt wird
const locale = new Intl.Locale("en-US", { collation: "pinyin" });
console.log(locale.collation); // wird nicht geprüft
const collator = new Intl.Collator(locale);
console.log(collator.resolvedOptions().collation);
// Wichtig · Fallstricke
- Keine Prüfung auf Unterstützung:
Intl.Localekontrolliert nur, ob die Schreibweise stimmt (3–8 alphanumerische Zeichen). Ob die Kollation für die Sprache existiert, prüft es nicht. Welche Kollation tatsächlich greift, zeigt erstnew Intl.Collator(locale).resolvedOptions().collation; nicht unterstützte Werte werden dort zu"default". - Ungültige Werte: Eine syntaktisch falsche Option wie
{ collation: \"x\" }wirft einenRangeError. "standard"und"search": Diese Werte ignoriertIntl.Collatorabsichtlich. Für die Suche verwendest du stattdessen die Collator-Optionusage: \"search\".- Schreibgeschützt: Die Eigenschaft hat nur einen Getter. Eine Zuweisung bleibt ohne Wirkung und wirft im Strict Mode einen
TypeError. - Alle verfügbaren Kollationen eines Locales liefert
Intl.Locale.prototype.getCollations(). In älteren Engines heißt das Gegenstückcollationsund ist dort als Eigenschaft umgesetzt. Die Liste unterstützter Werte insgesamt gibtIntl.supportedValuesOf(\"collation\")zurück. - Kompatibilität: Chrome 74+, Firefox 75+, Safari 14+, Node.js 12+ (mit vollständigen ICU-Daten).