Signatur
Beschreibung
Die Accessor-Eigenschaft baseName liefert den Teil eines Locale-Bezeichners, der die Sprache selbst beschreibt. Nach Unicode-Terminologie ist das der unicode_language_id. Er besteht aus language["-" script]["-" region]*("-" variant). Alles, was nach einer Erweiterung folgt, fehlt. Dazu gehören Unicode-Erweiterungen wie -u-ca-gregory-hc-h12, andere Erweiterungen wie -t-… und private Anteile wie -x-….
Nützlich ist baseName immer dann, wenn Sie Locales nach Sprache und Region vergleichen oder gruppieren wollen und Formatierungsvorgaben dabei keine Rolle spielen sollen. Formatierungsvorgaben sind zum Beispiel Kalender, Zahlensystem oder Stundenzyklus. Typische Einsätze:
- Übersetzungsdateien suchen, etwa
messages/de-AT.json - Schlüssel für Caches bilden
- Einen Fallback auf unterstützte Sprachen umsetzen
Der Wert ist immer in kanonischer Form. Die Sprache steht klein, die Schrift beginnt mit einem Großbuchstaben, die Region steht groß. Werte aus dem Options-Objekt des Konstruktors, zum Beispiel region oder script, sind bereits eingerechnet. Die Eigenschaft hat nur einen Getter und nimmt keine Parameter.
Rückgabewert
"en-Latn-US" oder "de-AT".Beispiele
Erweiterungen abtrennen
const locale = new Intl.Locale("en-Latn-US-u-ca-gregory-hc-h12");
console.log(locale.toString()); // vollständiger Bezeichner
console.log(locale.baseName); // nur der Kern
Options-Objekt und Kanonisierung
// Werte aus den Optionen landen im baseName, calendar dagegen nicht
const at = new Intl.Locale("de", { region: "AT", calendar: "gregory" });
console.log(at.baseName);
// Groß-/Kleinschreibung wird vereinheitlicht
console.log(new Intl.Locale("EN-us").baseName);
// Zusammen mit maximize() werden Schrift und Region ergänzt
console.log(new Intl.Locale("zh-TW").maximize().baseName);
Praxis: Fallback auf unterstützte Übersetzungen
const supported = new Set(["de", "en-US", "fr"]);
const resolveLocale = (tag) => {
const loc = new Intl.Locale(tag);
const candidates = [
loc.baseName, // z. B. en-Latn-US
loc.region ? `${loc.language}-${loc.region}` : null, // z. B. en-US
loc.language // z. B. en
].filter(Boolean);
return candidates.find((c) => supported.has(c)) ?? "en-US";
};
console.log(resolveLocale("de-CH-u-nu-latn"));
console.log(resolveLocale("en-Latn-US-u-ca-buddhist"));
console.log(resolveLocale("ja-JP"));
// Wichtig · Fallstricke
- Nur lesbar: Die Eigenschaft hat keinen Setter. Eine Zuweisung wird im nicht-strikten Modus stillschweigend ignoriert. Im strikten Modus löst sie einen
TypeErroraus. Für geänderte Werte erzeugen Sie eine neueIntl.Locale. - Rufen Sie den Getter mit einem Objekt auf, das keine
Intl.Localeist (z. B. überObject.getOwnPropertyDescriptor(...).get.call({})), gibt es einenTypeError. baseNameergänzt keine fehlenden Angaben.new Intl.Locale(\"de\").baseNameergibt nur\"de\". Wenn Sie wahrscheinliche Schrift und Region brauchen, rufen Sie vorhermaximize()auf. Zum Kürzen gibt esminimize().- Für den Vergleich von Locales ist
baseNamesicherer als ein Vergleich der Rohzeichenketten, weil der Wert kanonisiert ist. - Kompatibilität: Verfügbar in allen modernen Browsern (Chrome 74+, Firefox 75+, Safari 14+) und ab Node.js 12. Im Internet Explorer gibt es die Eigenschaft nicht.