Signatur
Beschreibung
Die Zugriffseigenschaft region liefert den Regions-Subtag eines BCP-47-Sprach-Tags. Meist ist das ein Ländercode aus zwei Großbuchstaben nach ISO 3166-1 (z. B. "DE", "AT", "CH"). Es kann aber auch ein dreistelliger UN-M.49-Code für größere Gebiete sein, etwa "419" für Lateinamerika oder "150" für Europa.
Die Region legt regionale Unterschiede innerhalb einer Sprache fest. Dazu gehören Zahlen- und Datumsformate, Währungskonventionen und Schreibweisen: de-DE und de-CH sind beide Deutsch, formatieren Zahlen aber unterschiedlich. Mit region kannst du diesen Teil gezielt auslesen, ohne den Tag selbst mit regulären Ausdrücken zu zerlegen. Das ist z. B. nützlich für länderspezifische Voreinstellungen, Versandlogik oder die Auswahl einer Standardwährung.
Die Region lässt sich entweder direkt im Tag angeben ("en-GB") oder über die Option region im Konstruktor setzen bzw. überschreiben. Die Eigenschaft kann nur gelesen werden, einen Setter gibt es nicht. Wenn du eine andere Region brauchst, erzeugst du ein neues Intl.Locale-Objekt.
Rückgabewert
"US", oder ein dreistelliger Zifferncode wie "419"). undefined, wenn das Gebietsschema keine Region enthält.Beispiele
Region aus einem Sprach-Tag auslesen
const locales = ['de-DE', 'de-CH', 'en', 'es-419', 'zh-Hant-TW'];
for (const tag of locales) {
const locale = new Intl.Locale(tag);
console.log(tag, '→', locale.region);
}
Region über die Konstruktor-Option setzen oder überschreiben
const basis = new Intl.Locale('en-US');
const britisch = new Intl.Locale('en-US', { region: 'gb' });
console.log(basis.region); // US
console.log(britisch.region); // GB (normalisiert)
console.log(britisch.toString()); // en-GB
Fehlende Region mit maximize() ergänzen
const nutzerLocale = new Intl.Locale(navigator.language || 'de');
// maximize() leitet die wahrscheinlichste Region ab (Likely Subtags)
const region = nutzerLocale.region ?? nutzerLocale.maximize().region;
const waehrungen = { DE: 'EUR', AT: 'EUR', CH: 'CHF', US: 'USD', GB: 'GBP' };
const waehrung = waehrungen[region] ?? 'EUR';
const preis = new Intl.NumberFormat(nutzerLocale, {
style: 'currency',
currency: waehrung,
}).format(1234.5);
console.log(region, waehrung, preis);
Regionsnamen lesbar anzeigen
const locale = new Intl.Locale('fr-CA');
const namen = new Intl.DisplayNames(['de'], { type: 'region' });
console.log(`Region: ${namen.of(locale.region)}`);
// Wichtig · Fallstricke
- Die Region ist optional: Bei Tags wie
"de"oder"en"istregionundefined. Prüfe den Wert deshalb immer, z. B. mit??, oder ergänze ihn mitmaximize(). Die Region, diemaximize()liefert, ist nur geschätzt und sagt nichts über den tatsächlichen Standort des Nutzers. - Region ist nicht gleich Sprache:
navigator.languagegibt die Spracheinstellung des Browsers wieder, nicht das Land, in dem sich der Nutzer befindet. Für rechtlich relevante Entscheidungen wie Steuern, Versand oder Geo-Sperren ist der Wert nicht verlässlich. - Normalisierung: Buchstabencodes werden in Großbuchstaben zurückgegeben (
"gb"wird zu"GB"). Vergleiche deshalb immer mit Großbuchstaben. - Zifferncodes: UN-M.49-Codes wie
"419"sind Zeichenketten, keine Zahlen, und stehen für Regionen, nicht für einzelne Länder. Nachschlagetabellen, die nur Ländercodes kennen, sollten dafür einen Ausweichwert haben. - Nur lesbar: Eine Zuweisung wie
locale.region = 'AT'bleibt ohne Wirkung (im Strict Mode gibt es einenTypeError). Erzeuge stattdessen ein neues Objekt mit der Optionregion. - Ungültige Werte: Eine syntaktisch ungültige Region in den Optionen (z. B.
{ region: 'Deutschland' }) wirft einenRangeError. - Kompatibilität:
Intl.Localewird in allen modernen Browsern (Chrome 74+, Firefox 75+, Safari 14+, Edge 79+) und in Node.js ab 12 unterstützt.