Start · Sprachen · JavaScript · Referenz · Intl.Collator

Intl.Collator

Klasse

Ermöglicht sprachsensitiven String-Vergleich gemäß Locale-Regeln und konfigurierbarer Sortier­optionen.

seit JavaScript ES2015 (ES6) / Baseline: alle modernen Browser Kategorie: core

Signatur

class Intl.Collator

Beschreibung

Intl.Collator ist Teil der ECMAScript Internationalization API und stellt einen leistungsfähigen, lokalisierungsgerechten Zeichenfolgenvergleich bereit. Im Gegensatz zu einfachen Vergleichen mit < oder > berücksichtigt ein Collator sprachspezifische Regeln – etwa die korrekte Sortierung von Umlauten im Deutschen (ä nach a), die Groß-/Kleinschreibung oder die Behandlung von Akzenten.

Ein Intl.Collator-Objekt wird einmalig mit einer Locale (z. B. 'de-DE') und Optionen wie sensitivity, usage oder numeric erstellt. Anschließend kann die Methode compare(a, b) wie eine Komparatorfunktion für Array.prototype.sort() verwendet werden, was besonders effizient ist, da das Objekt intern wiederverwendet wird statt bei jedem Vergleich neu initialisiert zu werden.

Die Option usage unterscheidet zwischen 'sort' (Standard, für Sortierungen) und 'search' (für Suche, bei der z. B. Akzente ignoriert werden sollen). Mit sensitivity lässt sich steuern, ob Groß-/Kleinschreibung und Akzente berücksichtigt werden. Die Option numeric: true bewirkt, dass Zahlen in Strings numerisch verglichen werden ('10' kommt nach '9').

Die statische Methode Intl.Collator.supportedLocalesOf() erlaubt es, vorab zu prüfen, welche der gewünschten Locales nativ unterstützt werden, ohne auf einen Fallback zurückgreifen zu müssen.

Parameter

Name Typ Default Beschreibung
$locales string | string[] Systemlocale Ein BCP-47-Sprach-Tag (z. B. 'de-DE', 'en-US') oder ein Array solcher Tags. Bestimmt, welche Sprach- und Sortierregeln angewendet werden.
$options object {}

Optionsobjekt mit folgenden Eigenschaften:

  • usage ('sort' | 'search', Standard: 'sort') – Verwendungszweck des Vergleichs.
  • sensitivity ('base' | 'accent' | 'case' | 'variant') – Legt fest, welche Unterschiede als ungleich gelten.
  • ignorePunctuation (boolean, Standard: false) – Satzzeichen beim Vergleich ignorieren.
  • numeric (boolean, Standard: false) – Numerische Sortierung für Zahlen in Strings aktivieren.
  • caseFirst ('upper' | 'lower' | 'false') – Groß- oder Kleinbuchstaben zuerst sortieren.
  • collation (string) – Explizit einen Unicode-Kollationsalgorithmus angeben (z. B. 'phonebk' für deutsches Telefonbuch).

Rückgabewert

Typ
Intl.Collator
Beschreibung
Eine neue Intl.Collator-Instanz mit der Methode compare(a, b) und der Methode resolvedOptions().

Beispiele

Deutsches Array mit Umlauten korrekt sortieren

const woerter = ['Zebra', 'Apfel', 'Österreich', 'Äpfel', 'Banane', 'über'];

const collator = new Intl.Collator('de-DE');

const sortiert = woerter.sort(collator.compare);
console.log(sortiert);
['Apfel', 'Äpfel', 'Banane', 'Österreich', 'über', 'Zebra']

Numerische Sortierung und Groß-/Kleinschreibung ignorieren

// Numerische Sortierung: '10' soll nach '9' kommen
const dateien = ['datei10.txt', 'datei9.txt', 'datei2.txt', 'datei1.txt'];

const numericCollator = new Intl.Collator('de-DE', { numeric: true });
console.log(dateien.sort(numericCollator.compare));
// ['datei1.txt', 'datei2.txt', 'datei9.txt', 'datei10.txt']

// Suche: Akzente und Groß-/Kleinschreibung ignorieren
const suchCollator = new Intl.Collator('de-DE', {
  usage: 'search',
  sensitivity: 'base',
});

const begriffe = ['Café', 'cafe', 'CAFE', 'Kaffee'];
const treffer = begriffe.filter(
  (b) => suchCollator.compare(b, 'cafe') === 0
);
console.log(treffer);
// ['Café', 'cafe', 'CAFE']
['datei1.txt', 'datei2.txt', 'datei9.txt', 'datei10.txt'] ['Café', 'cafe', 'CAFE']

resolvedOptions und supportedLocalesOf

// Welche Optionen wurden tatsächlich angewendet?
const col = new Intl.Collator('de-DE', { numeric: true, caseFirst: 'upper' });
console.log(col.resolvedOptions());
// { locale: 'de-DE', usage: 'sort', sensitivity: 'variant',
//   ignorePunctuation: false, collation: 'standard',
//   numeric: true, caseFirst: 'upper' }

// Vorab prüfen, ob Locales unterstützt werden
const supported = Intl.Collator.supportedLocalesOf(['de-DE', 'tlh', 'fr-FR']);
console.log(supported); // ['de-DE', 'fr-FR']  (Klingonisch nicht unterstützt)
{ locale: 'de-DE', usage: 'sort', sensitivity: 'variant', ignorePunctuation: false, collation: 'standard', numeric: true, caseFirst: 'upper' } ['de-DE', 'fr-FR']

// Wichtig · Fallstricke

Performance: Ein Intl.Collator-Objekt sollte einmal erstellt und wiederverwendet werden, da die Initialisierung (Laden der Locale-Daten) aufwändig ist. Das Binden der compare-Methode ist nicht notwendig, da sie intern den Collator referenziert.

Locale-Fallback: Wird eine nicht unterstützte Locale angegeben, greift die API automatisch auf die nächstpassende unterstützte Locale zurück. Mit Intl.Collator.supportedLocalesOf() lässt sich dies vorab prüfen.

Unicode-Kollationserweiterungen: Locale-Tags können Erweiterungsschlüssel enthalten, z. B. 'de-DE-u-co-phonebk' für Telefonbuch-Sortierung (ä wird wie ae sortiert). Die gleiche Wirkung erzielt man über die Option collation: 'phonebk'.

Vergleich mit String.prototype.localeCompare(): localeCompare ist praktisch für Einzelvergleiche, intern erstellt es aber bei jedem Aufruf implizit einen Collator. Für Sortierungen großer Arrays ist die explizite Verwendung von Intl.Collator deutlich schneller.