Start · Sprachen · JavaScript · Referenz · new Intl.Locale()

new Intl.Locale()

Methode

Erzeugt ein <code>Intl.Locale</code>-Objekt, das ein BCP-47-Sprach-Tag darstellt, sodass man es zerlegen, ändern und an andere <code>Intl</code>-APIs weitergeben kann.

seit JavaScript ES2020 (ECMA-402, 7. Ausgabe) · Baseline: alle mod Kategorie: method-property

Signatur

new Intl.Locale(tag, options)

Beschreibung

Der Konstruktor Intl.Locale() wandelt ein BCP-47-Sprach-Tag wie "de-DE" oder "zh-Hant-TW-u-ca-chinese" in ein strukturiertes Objekt um. Die einzelnen Bestandteile wie Sprache, Schrift, Region, Kalender, Nummerierungssystem oder Stundenzyklus lassen sich danach direkt über Eigenschaften wie language, script, region, calendar oder hourCycle abfragen. Fehleranfällige Zeichenkettenzerlegung per Hand fällt damit weg.

Über das zweite Argument options kann man einzelne Bestandteile ergänzen oder überschreiben. Werte aus options haben Vorrang vor denen im Tag. So lassen sich aus einer Basis-Locale gezielt Varianten bauen, etwa "de-DE" mit gregorianischem Kalender und 24-Stunden-Format.

Ein Intl.Locale-Objekt nehmen alle Intl-Konstruktoren (DateTimeFormat, NumberFormat, Collator usw.) an Stelle eines Strings entgegen. Die Methoden maximize() und minimize() ergänzen wahrscheinliche Teil-Tags nach dem „Likely Subtags“-Verfahren oder entfernen sie wieder. toString() liefert das kanonische Tag zurück.

Man muss den Konstruktor mit new aufrufen. Das Tag wird dabei geprüft und in die kanonische Form gebracht, zum Beispiel wird aus "EN-us" das Tag "en-US".

Parameter

Name Typ Default Beschreibung
$tag Pflicht string | Intl.Locale Ein gültiges BCP-47-Sprach-Tag (z. B. "de-AT") oder ein vorhandenes Intl.Locale-Objekt.
$options object {} Konfigurationsobjekt, dessen Werte die Angaben im Tag überschreiben. Mögliche Schlüssel: language, script, region, calendar (z. B. "gregory", "buddhist"), collation, numberingSystem (z. B. "latn", "arab"), caseFirst ("upper", "lower", "false"), hourCycle ("h11", "h12", "h23", "h24") und numeric (boolean).

Beispiele

Locale erzeugen und Bestandteile auslesen

const locale = new Intl.Locale('de-Latn-AT-u-ca-gregory-hc-h23');

console.log(locale.language);   // Sprache
console.log(locale.script);     // Schrift
console.log(locale.region);     // Region
console.log(locale.calendar);   // Kalender
console.log(locale.hourCycle);  // Stundenzyklus
console.log(locale.baseName);   // Tag ohne Erweiterungen
de Latn AT gregory h23 de-Latn-AT

Optionen überschreiben Angaben im Tag

const base = new Intl.Locale('en-US', {
  hourCycle: 'h23',
  numberingSystem: 'latn',
  region: 'GB' // überschreibt US
});

console.log(base.toString());
console.log(base.region);
en-GB-u-hc-h23-nu-latn GB

Locale-Objekt direkt an Intl-Formatierer übergeben

const locale = new Intl.Locale('de-DE', { hourCycle: 'h12' });

const fmt = new Intl.DateTimeFormat(locale, {
  hour: 'numeric',
  minute: '2-digit'
});

console.log(fmt.format(new Date(2024, 0, 15, 17, 30)));
5:30 PM

Fehlende Teil-Tags ergänzen und Eingaben prüfen

const parseLocale = (tag) => {
  try {
    return new Intl.Locale(tag);
  } catch (err) {
    console.warn(`Ungültiges Tag: ${tag}`);
    return new Intl.Locale('en');
  }
};

const zh = parseLocale('zh');
console.log(zh.maximize().toString());
console.log(new Intl.Locale('en-Latn-US').minimize().toString());
parseLocale('de_DE');
zh-Hans-CN en Ungültiges Tag: de_DE

// Wichtig · Fallstricke

  • Nur mit new aufrufbar: Intl.Locale('de') ohne new löst einen TypeError aus.
  • Ungültige Tags: Ist tag kein String und kein Objekt, gibt es einen TypeError. Ist es syntaktisch falsch (z. B. "de_DE" mit Unterstrich oder ein leerer String), gibt es einen RangeError. Benutzereingaben deshalb in try…catch einpacken.
  • Keine Prüfung, ob die Locale unterstützt wird: Syntaktisch korrekte, aber exotische Tags wie "xx-YY" werden angenommen. Ob eine Locale wirklich unterstützt wird, prüft man mit z. B. Intl.DateTimeFormat.supportedLocalesOf().
  • Unveränderlich: Die Eigenschaften sind nur Getter. Für eine Änderung erzeugt man ein neues Objekt: new Intl.Locale(alt, { region: 'CH' }).
  • Der Wert von options.numeric ist ein Boolean. Im Tag erscheint er als -kn bzw. -kn-false.
  • Kompatibilität: Verfügbar ab Chrome 74, Firefox 75, Safari 14 und Node.js 12 (in Node.js mit vollständigen ICU-Daten). Neuere Getter wie getCalendars(), getWeekInfo() oder getTextInfo() werden noch nicht überall unterstützt, zum Teil nur als ältere Eigenschaften (calendars, weekInfo).