Start · Sprachen · JavaScript · Referenz · Intl.Locale.prototype.baseName

Intl.Locale.prototype.baseName

Eigenschaft

Gibt den Kern-Bezeichner einer <code>Intl.Locale</code> zurück: Sprache, Schrift, Region und Varianten, aber ohne Unicode-Erweiterungen wie <code>-u-ca-…</code>.

seit JavaScript ES2020 (ECMA-402), Baseline: alle modernen Browser Kategorie: method-property

Signatur

get Intl.Locale.prototype.baseName

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

Typ
string
Beschreibung
Der kanonische Basis-Bezeichner der Locale ohne Erweiterungen, z. B. "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
en-Latn-US-u-ca-gregory-hc-h12 en-Latn-US

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);
de-AT en-US zh-Hant-TW

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"));
de en-US en-US

// 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 TypeError aus. Für geänderte Werte erzeugen Sie eine neue Intl.Locale.
  • Rufen Sie den Getter mit einem Objekt auf, das keine Intl.Locale ist (z. B. über Object.getOwnPropertyDescriptor(...).get.call({})), gibt es einen TypeError.
  • baseName ergänzt keine fehlenden Angaben. new Intl.Locale(\"de\").baseName ergibt nur \"de\". Wenn Sie wahrscheinliche Schrift und Region brauchen, rufen Sie vorher maximize() auf. Zum Kürzen gibt es minimize().
  • Für den Vergleich von Locales ist baseName sicherer 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.