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

Intl.Locale.prototype.variants

Eigenschaft

Gibt die Varianten-Subtags einer <code>Intl.Locale</code> als durch Bindestriche getrennte Zeichenkette zurück, oder <code>undefined</code>, wenn keine vorhanden sind.

seit JavaScript ES2025 (ECMA-402); neu, noch nicht in allen Browse Kategorie: method-property

Signatur

get Intl.Locale.prototype.variants

Beschreibung

Die Zugriffseigenschaft variants liefert die Varianten-Subtags eines BCP-47-Sprach-Tags. Varianten stehen nach Sprache, Schrift und Region und bezeichnen Spielarten einer Sprache, die sich nicht über die Region ausdrücken lassen. Typische Beispiele sind Rechtschreibreformen wie 1901 (traditionelle) und 1996 (reformierte deutsche Rechtschreibung), Dialekte wie valencia (Valencianisch) oder Umschriften wie pinyin.

Enthält ein Tag mehrere Varianten, werden sie als eine Zeichenkette zurückgegeben, getrennt durch Bindestriche (-), z. B. "rozaj-biske". Hat die Locale keine Variante, ist der Wert undefined. Die Werte sind kanonisiert, also immer kleingeschrieben.

Die Eigenschaft ist nur lesbar (ein reiner Getter ohne Setter). Sinnvoll ist sie, wenn du Locale-Kennungen auswerten oder vergleichen möchtest, etwa um Inhalte in einer bestimmten Rechtschreibung oder einem Dialekt auszuwählen, ohne den Tag-String selbst zu zerlegen.

Rückgabewert

Typ
string | undefined
Beschreibung
Die Varianten-Subtags als kleingeschriebene Zeichenkette, bei mehreren durch - getrennt. undefined, wenn die Locale keine Varianten hat.

Beispiele

Variante einer Rechtschreibung auslesen

const reformiert = new Intl.Locale("de-DE-1996");
const traditionell = new Intl.Locale("de-CH-1901");

console.log(reformiert.variants);
console.log(traditionell.variants);
console.log(traditionell.region);
1996 1901 CH

Locale ohne Variante und Groß-/Kleinschreibung

const en = new Intl.Locale("en-US");
console.log(en.variants);

// Varianten werden kanonisiert (kleingeschrieben)
const ca = new Intl.Locale("ca-ES-VALENCIA");
console.log(ca.variants);
console.log(ca.toString());
undefined valencia ca-ES-valencia

Mehrere Varianten in ein Array zerlegen

const sl = new Intl.Locale("sl-rozaj-biske");

// Robust gegen undefined: leeres Array, wenn keine Varianten vorhanden sind
const liste = sl.variants?.split("-") ?? [];

console.log(liste);
console.log(liste.includes("rozaj"));
[ 'biske', 'rozaj' ] // Reihenfolge kann je nach Engine kanonisiert sein true

Praxis: Inhalte nach Dialekt auswählen

const texte = {
  valencia: "Benvinguts (valencià)",
  standard: "Benvinguts (català)"
};

const begruessung = (tag) => {
  const locale = new Intl.Locale(tag);
  const varianten = locale.variants?.split("-") ?? [];
  return varianten.includes("valencia") ? texte.valencia : texte.standard;
};

console.log(begruessung("ca-ES-valencia"));
console.log(begruessung("ca-ES"));
Benvinguts (valencià) Benvinguts (català)

// Wichtig · Fallstricke

  • Kompatibilität: variants ist eine neue Ergänzung zu ECMA-402 und wird erst von aktuellen Browser- und Node.js-Versionen unterstützt. In älteren Umgebungen gibt der Zugriff undefined zurück, auch wenn das Tag Varianten enthält. Prüfe die Unterstützung daher mit "variants" in Intl.Locale.prototype und lies die Varianten sonst als Ausweichlösung aus toString() bzw. baseName.
  • Nur lesbar: Eine Zuweisung wie locale.variants = "1901" hat keine Wirkung (im Strict Mode wirft sie einen TypeError). Wenn du andere Varianten brauchst, erzeugst du eine neue Intl.Locale aus einem angepassten Tag-String.
  • Reihenfolge: Bei der Kanonisierung können mehrere Varianten neu sortiert werden (nach UTS #35 alphabetisch). Verlass dich deshalb nicht auf eine bestimmte Reihenfolge, sondern prüfe z. B. mit split("-").includes(…).
  • Doppelte Varianten: Ein Tag mit doppelter Variante (z. B. "de-1996-1996") ist strukturell ungültig. Der Konstruktor wirft dann einen RangeError.
  • Unicode-Erweiterungen (-u-…) gehören nicht zu den Varianten. Die liest du über eigene Eigenschaften wie calendar oder numberingSystem aus.