Signatur
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
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);
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)));
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');
// Wichtig · Fallstricke
- Nur mit
newaufrufbar:Intl.Locale('de')ohnenewlöst einenTypeErroraus. - Ungültige Tags: Ist
tagkein String und kein Objekt, gibt es einenTypeError. Ist es syntaktisch falsch (z. B."de_DE"mit Unterstrich oder ein leerer String), gibt es einenRangeError. Benutzereingaben deshalb intry…catcheinpacken. - 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.numericist ein Boolean. Im Tag erscheint er als-knbzw.-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()odergetTextInfo()werden noch nicht überall unterstützt, zum Teil nur als ältere Eigenschaften (calendars,weekInfo).