Signatur
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
- 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);
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());
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"));
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"));
// Wichtig · Fallstricke
- Kompatibilität:
variantsist eine neue Ergänzung zu ECMA-402 und wird erst von aktuellen Browser- und Node.js-Versionen unterstützt. In älteren Umgebungen gibt der Zugriffundefinedzurück, auch wenn das Tag Varianten enthält. Prüfe die Unterstützung daher mit"variants" in Intl.Locale.prototypeund lies die Varianten sonst als Ausweichlösung austoString()bzw.baseName. - Nur lesbar: Eine Zuweisung wie
locale.variants = "1901"hat keine Wirkung (im Strict Mode wirft sie einenTypeError). Wenn du andere Varianten brauchst, erzeugst du eine neueIntl.Localeaus 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 einenRangeError. - Unicode-Erweiterungen (
-u-…) gehören nicht zu den Varianten. Die liest du über eigene Eigenschaften wiecalendarodernumberingSystemaus.