Start · Sprachen · JavaScript · Referenz · Intl

Intl

Klasse

Das <code>Intl</code>-Namensraum-Objekt stellt die ECMAScript-Internationalisierungs-API bereit und enthält Konstruktoren sowie Hilfsfunktionen für sprach- und regionssensitive Formatierungen und Vergleiche.

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

Signatur

class Intl

Beschreibung

Intl ist das zentrale Einstiegsobjekt der ECMAScript Internationalization API (ECMA-402). Es ist kein Konstruktor, sondern ein eingebautes Namensraum-Objekt (ähnlich wie Math), das spezialisierte Klassen für lokalisierte Ausgaben sowie zwei statische Hilfsfunktionen beherbergt.

Über Intl lassen sich folgende Aufgaben erledigen:

  • Zahlen & Währungen formatierenIntl.NumberFormat
  • Datum & Uhrzeit formatierenIntl.DateTimeFormat
  • Relative Zeitangaben (z. B. „vor 3 Stunden") – Intl.RelativeTimeFormat
  • Sprachsensitive TextsortierungIntl.Collator
  • Listenformatierung (z. B. „A, B und C") – Intl.ListFormat
  • Pluralregeln (one/few/many/other …) – Intl.PluralRules
  • Anzeigenamen von Sprachen, Regionen, SchriftenIntl.DisplayNames
  • Segmentierung von Text (Wörter, Sätze, Grapheme) – Intl.Segmenter

Alle Konstruktoren akzeptieren als erstes Argument einen Locale-Bezeichner (z. B. "de-DE", "en-US", "zh-Hant") oder ein Intl.Locale-Objekt, sowie ein optionales Optionsobjekt. Die statischen Methoden Intl.getCanonicalLocales() und Intl.supportedValuesOf() erlauben die Abfrage unterstützter Locale-Bezeichner und Kategoriewerte.

Die tatsächlich verfügbaren Locales hängen von der JavaScript-Laufzeitumgebung (Browser oder Node.js) ab. Für kritische Anwendungen empfiehlt es sich, die gewünschten Locales mit Intl.getCanonicalLocales() zu kanonisieren und über resolvedOptions() der jeweiligen Instanz sicherzustellen, dass die gewünschte Locale tatsächlich verwendet wird.

Beispiele

Zahlen und Währungen lokalisiert formatieren

// Zahl als Währungsbetrag auf Deutsch formatieren
const betrag = 1234567.89;

const deFormat = new Intl.NumberFormat('de-DE', {
  style: 'currency',
  currency: 'EUR',
});
console.log(deFormat.format(betrag));

// Dasselbe auf Englisch (US)
const usFormat = new Intl.NumberFormat('en-US', {
  style: 'currency',
  currency: 'USD',
});
console.log(usFormat.format(betrag));
1.234.567,89 € $1,234,567.89

Datum und Uhrzeit lokalisiert ausgeben

const datum = new Date('2024-06-15T09:30:00Z');

const deDate = new Intl.DateTimeFormat('de-DE', {
  dateStyle: 'full',
  timeStyle: 'short',
  timeZone: 'Europe/Berlin',
});
console.log(deDate.format(datum));

// Japanisches Kalenderformat
const jaDate = new Intl.DateTimeFormat('ja-JP-u-ca-japanese', {
  dateStyle: 'full',
  timeZone: 'Asia/Tokyo',
});
console.log(jaDate.format(datum));
Samstag, 15. Juni 2024 um 11:30 令和6年6月15日土曜日

Relative Zeitangaben (RelativeTimeFormat)

const rtf = new Intl.RelativeTimeFormat('de', { numeric: 'auto' });

console.log(rtf.format(-1, 'day'));   // gestern
console.log(rtf.format(3, 'week'));   // in 3 Wochen
console.log(rtf.format(-2, 'month')); // vor 2 Monaten
gestern in 3 Wochen vor 2 Monaten

Sprachsensitive Sortierung mit Intl.Collator

const woerter = ['Österreich', 'Apfel', 'Übung', 'Zoo', 'ähnlich'];

const collator = new Intl.Collator('de', { sensitivity: 'base' });
const sortiert = [...woerter].sort(collator.compare);
console.log(sortiert);
['ähnlich', 'Apfel', 'Österreich', 'Übung', 'Zoo']

Kanonische Locale-Bezeichner ermitteln

// Locale-Strings kanonisieren
const kanonisch = Intl.getCanonicalLocales(['DE-de', 'EN_US', 'zh-hans']);
console.log(kanonisch);

// Unterstützte Zeitzonen abfragen
const zeitzonen = Intl.supportedValuesOf('timeZone');
console.log(zeitzonen.slice(0, 5));
['de-DE', 'en-US', 'zh-Hans'] ['Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', 'Africa/Asmera']

Listenformatierung und Pluralregeln

// Liste auf Deutsch formatieren
const listFormat = new Intl.ListFormat('de', { style: 'long', type: 'conjunction' });
console.log(listFormat.format(['Apfel', 'Birne', 'Kirsche']));

// Pluralregel bestimmen
const plural = new Intl.PluralRules('de-DE');
console.log(plural.select(1));  // 'one'
console.log(plural.select(2));  // 'other'
console.log(plural.select(0));  // 'other'
Apfel, Birne und Kirsche one other other

// Wichtig · Fallstricke

Verfügbarkeit von Locales: Nicht jede Laufzeitumgebung unterstützt alle Locales. Insbesondere in Node.js-Umgebungen (ohne ICU-Vollausstattung, z. B. node --icu-data-dir=…) können Locales fehlen. Mit resolvedOptions() lässt sich prüfen, welche Locale tatsächlich verwendet wird.

Performance: Das Erstellen von Intl-Instanzen ist vergleichsweise teuer. Instanzen sollten außerhalb von Schleifen einmal erzeugt und wiederverwendet werden – z. B. als Modul-Level-Konstante oder per Caching.

Unveränderlichkeit: Intl selbst ist kein Konstruktor; new Intl() wirft einen TypeError. Alle Funktionalität wird über die untergeordneten Konstruktoren genutzt.

Browser-Kompatibilität: Der Kern (Intl.NumberFormat, Intl.DateTimeFormat, Intl.Collator) ist seit IE11 bzw. Safari 10 verfügbar. Neuere Klassen wie Intl.Segmenter (ES2022) oder Intl.DisplayNames erfordern aktuelle Browser-Versionen (Chrome 87+, Firefox 86+, Safari 14.1+).