Signatur
Beschreibung
Die Zugriffseigenschaft numberingSystem liefert den Bezeichner des Zahlensystems, das für eine Lokalisierung festgelegt wurde. Ein Zahlensystem bestimmt, welche Ziffernzeichen bei der Formatierung von Zahlen verwendet werden – etwa die lateinischen Ziffern 0–9 ("latn"), arabisch-indische Ziffern ("arab"), Devanagari ("deva") oder Thai-Ziffern ("thai").
Der Wert kommt aus zwei möglichen Quellen: aus der Unicode-Erweiterung -u-nu- im Sprach-Tag (z. B. "ar-EG-u-nu-latn") oder aus der Option numberingSystem im Konstruktor new Intl.Locale(tag, { numberingSystem }). Wird beides angegeben, hat die Option Vorrang.
Die Eigenschaft ist schreibgeschützt (nur Getter). Sie gibt ausschließlich den explizit gesetzten Wert zurück – das Standard-Zahlensystem einer Sprache wird nicht ermittelt. Ist nichts angegeben, ist der Wert undefined. Die tatsächlich verwendeten bzw. verfügbaren Zahlensysteme erhält man über Intl.NumberFormat.prototype.resolvedOptions() oder Intl.Locale.prototype.getNumberingSystems().
Praktisch nützlich ist die Eigenschaft, um Benutzereinstellungen auszulesen, Locale-Tags zu analysieren oder zu prüfen, ob ein Tag bereits eine Zahlensystem-Präferenz enthält, bevor man ihn an Intl.NumberFormat oder Intl.DateTimeFormat weiterreicht.
Rückgabewert
"latn", "arab", "hanidec") oder undefined, wenn weder Tag noch Option ein Zahlensystem festlegen.Beispiele
Zahlensystem aus Tag und Option auslesen
const ausTag = new Intl.Locale('ar-EG-u-nu-latn');
console.log(ausTag.numberingSystem);
const ausOption = new Intl.Locale('hi-IN', { numberingSystem: 'deva' });
console.log(ausOption.numberingSystem);
console.log(ausOption.toString());
// Option überschreibt die Erweiterung im Tag
const beides = new Intl.Locale('th-TH-u-nu-latn', { numberingSystem: 'thai' });
console.log(beides.numberingSystem);
Kein explizites Zahlensystem → undefined
const locale = new Intl.Locale('ar-EG');
console.log(locale.numberingSystem);
// Das tatsächlich verwendete System liefert NumberFormat
const nf = new Intl.NumberFormat(locale);
console.log(nf.resolvedOptions().numberingSystem);
Zahlen mit bevorzugtem Zahlensystem formatieren
const formatiere = (betrag, tag) => {
const locale = new Intl.Locale(tag);
const system = locale.numberingSystem ?? 'latn'; // Fallback auf lateinische Ziffern
return new Intl.NumberFormat(locale.baseName, {
numberingSystem: system,
style: 'currency',
currency: 'EGP'
}).format(betrag);
};
console.log(formatiere(1234.5, 'ar-EG'));
console.log(formatiere(1234.5, 'ar-EG-u-nu-arab'));
// Wichtig · Fallstricke
- Kein Standardwert:
numberingSystemliefert nur explizit gesetzte Werte. Für das Standard-System einer SpracheIntl.NumberFormat(...).resolvedOptions().numberingSystemodergetNumberingSystems()verwenden. - Schreibgeschützt: Eine Zuweisung wie
locale.numberingSystem = 'arab'hat keine Wirkung (im Strict ModeTypeError). Stattdessen eine neueIntl.Localemit der Option erzeugen. - Ungültige Werte: Der Konstruktor wirft einen
RangeError, wenn der Wert syntaktisch kein gültiger Unicode-Typ ist (3–8 alphanumerische Zeichen). Syntaktisch gültige, aber unbekannte Bezeichner werden akzeptiert und erst beim Formatieren ignoriert. - Die Ausgabe von formatierten Zahlen (Beispiel 3) hängt von der ICU-/CLDR-Version der Laufzeitumgebung ab und kann leicht abweichen.
- Kompatibilität: Verfügbar in Chrome 74+, Firefox 75+, Safari 14+, Node.js 12+. Ältere Node-Builds mit
small-icuunterstützen evtl. nicht alle Zahlensysteme.