Signatur
Beschreibung
Die Accessor-Eigenschaft script gibt das Schriftsystem zurück, in dem die Sprache eines Gebietsschemas geschrieben wird. Der Wert entspricht dem Script-Subtag eines BCP-47-Sprach-Tags: ein vierstelliger Code nach ISO 15924 mit großem Anfangsbuchstaben, etwa Latn (lateinisch), Cyrl (kyrillisch), Arab (arabisch), Hans (vereinfachtes Chinesisch) oder Hant (traditionelles Chinesisch).
Das ist vor allem bei Sprachen wichtig, die in mehreren Schriften geschrieben werden, z. B. Serbisch (sr-Latn / sr-Cyrl), Usbekisch, Aserbaidschanisch oder Chinesisch. Mit script kann man etwa passende Schriftarten, Übersetzungsdateien oder Textrichtungen auswählen.
Der Wert kann auf zwei Wegen gesetzt werden: direkt im Tag (new Intl.Locale("sr-Cyrl")) oder über die Option script im Konstruktor. Die Option überschreibt dabei den Subtag im Tag. Ist keine Schrift angegeben, liefert die Eigenschaft undefined – eine wahrscheinliche Schrift erhält man erst über maximize().
Rückgabewert
"Latn") oder undefined, wenn das Gebietsschema keinen Script-Subtag enthält.Beispiele
Schrift aus Tag und Option auslesen
const serbischKyrillisch = new Intl.Locale("sr-Cyrl-RS");
console.log(serbischKyrillisch.script);
// Option überschreibt den Subtag im Tag
const serbischLatein = new Intl.Locale("sr-Cyrl-RS", { script: "Latn" });
console.log(serbischLatein.script);
console.log(serbischLatein.toString());
// Kein Script-Subtag vorhanden
console.log(new Intl.Locale("de-DE").script);
Wahrscheinliche Schrift mit maximize() ermitteln
const ermittleSchrift = (tag) => {
const locale = new Intl.Locale(tag);
// script ist oft undefined – maximize() ergänzt die wahrscheinlichste Schrift
return locale.script ?? locale.maximize().script;
};
console.log(ermittleSchrift("de"));
console.log(ermittleSchrift("ru"));
console.log(ermittleSchrift("zh-TW"));
console.log(ermittleSchrift("zh-CN"));
console.log(ermittleSchrift("ar"));
Passende Schriftart je nach Schriftsystem wählen
const schriftarten = {
Latn: "'Inter', sans-serif",
Cyrl: "'Inter', 'PT Sans', sans-serif",
Arab: "'Noto Naskh Arabic', serif",
Hans: "'Noto Sans SC', sans-serif",
Hant: "'Noto Sans TC', sans-serif",
};
const schriftartFuer = (tag) => {
const { script } = new Intl.Locale(tag).maximize();
return schriftarten[script] ?? "sans-serif";
};
console.log(schriftartFuer("zh-Hant-HK"));
console.log(schriftartFuer("fa"));
// Wichtig · Fallstricke
- Nur lesbar:
scriptist ein Getter ohne Setter. Eine Zuweisung wird ignoriert (im Strict Mode gibt es einenTypeError). Ändern lässt sich die Schrift nur durch ein neuesIntl.Locale-Objekt mit der Optionscript. - Häufig
undefined: Die meisten Tags wie"en-US"enthalten keinen Script-Subtag. Wer immer einen Wert braucht, nutztmaximize().script– das Ergebnis ist aber nur eine Wahrscheinlichkeitsannahme auf Basis der CLDR-Daten. - Kanonisierung: Die Schreibweise wird vereinheitlicht, z. B. wird aus
"sr-cyrl"der Wert"Cyrl". Ungültige Werte in der Option (z. B.{ script: "Latin" }) lösen einenRangeErroraus. - Keine Textrichtung:
scriptsagt nichts direkt über die Schreibrichtung aus; dafür gibt esgetTextInfo()bzw.textInfo(noch nicht in allen Engines, Firefox fehlt teilweise). - Kompatibilität:
Intl.Localegibt es seit Chrome 74, Firefox 75, Safari 14 und Node.js 12. Sehr alte Umgebungen benötigen ein Polyfill (z. B.@formatjs/intl-locale).