Signatur
Beschreibung
Die Methode getNumberingSystems() liefert die Zahlensysteme, die zu einer Intl.Locale-Instanz passen. Ein Zahlensystem legt fest, mit welchen Ziffern Zahlen dargestellt werden: "latn" steht für die lateinischen Ziffern 0–9, "arab" für arabisch-indische Ziffern (٠١٢٣…), "deva" für Devanagari, "thai" für thailändische Ziffern usw.
Welcher Wert zurückkommt, hängt von der Locale ab:
- Enthält der Locale-Bezeichner die Unicode-Erweiterung
nu(z. B."en-US-u-nu-thai") oder wurde die OptionnumberingSystemim Konstruktor gesetzt, enthält das Array genau diesen einen Wert. - Andernfalls werden die Standard-Zahlensysteme der Locale laut CLDR-Daten zurückgegeben – in der Praxis meist ein einzelner Eintrag.
Nützlich ist die Methode, wenn man vor dem Formatieren wissen will, welche Ziffern Nutzerinnen und Nutzer erwarten – etwa um Eingabefelder zu validieren, Ziffern zu normalisieren oder eine Auswahl von Darstellungsformen anzubieten. Das Ergebnis lässt sich direkt als numberingSystem-Option an Intl.NumberFormat oder Intl.DateTimeFormat übergeben.
Die Methode ersetzt den älteren Getter Intl.Locale.prototype.numberingSystems, der in manchen Engines weiterhin (als veraltet) existiert. Bei jedem Aufruf wird ein neues Array erzeugt, Änderungen daran wirken sich also nicht auf die Locale aus.
Rückgabewert
["latn"]). Ist die nu-Erweiterung gesetzt, enthält es genau diesen Wert.Beispiele
Standard-Zahlensysteme verschiedener Locales abfragen
const locales = ['de-DE', 'ar-EG', 'ja-JP'];
for (const tag of locales) {
const locale = new Intl.Locale(tag);
console.log(tag, locale.getNumberingSystems());
}
Explizit gesetztes Zahlensystem über Erweiterung oder Option
const perTag = new Intl.Locale('en-US-u-nu-thai');
console.log(perTag.getNumberingSystems());
const perOption = new Intl.Locale('hi-IN', { numberingSystem: 'deva' });
console.log(perOption.getNumberingSystems());
Zahl im Standard-Zahlensystem formatieren (mit Fallback)
// Feature-Erkennung: neue Methode oder veralteter Getter
const getNumberingSystems = (locale) =>
typeof locale.getNumberingSystems === 'function'
? locale.getNumberingSystems()
: locale.numberingSystems ?? ['latn'];
const locale = new Intl.Locale('ar-EG');
const [numberingSystem] = getNumberingSystems(locale);
const formatter = new Intl.NumberFormat(locale, { numberingSystem });
console.log(numberingSystem, formatter.format(1234.5));
Alle Ziffernvarianten zur Auswahl anbieten
const locale = new Intl.Locale('ar-EG');
const systems = new Set([...locale.getNumberingSystems(), 'latn']);
const options = [...systems].map((nu) => ({
value: nu,
label: new Intl.NumberFormat(locale, { numberingSystem: nu }).format(2024)
}));
console.log(options);
// Wichtig · Fallstricke
- Browser-Kompatibilität: Die Methode gehört zum Vorschlag „Intl Locale Info“ und ist noch nicht überall verfügbar (u. a. fehlt sie derzeit in Firefox). Ältere Chromium- und Safari-Versionen bieten stattdessen nur den Getter
numberingSystems. Deshalb immer per Feature-Erkennung prüfen, z. B. mittypeof locale.getNumberingSystems === 'function'. - Getter veraltet:
locale.numberingSystems(ohne Klammern) gilt als veraltet und kann in künftigen Versionen entfernt werden – neuen Code auf die Methode ausrichten. - Datenabhängig: Die Ergebnisse stammen aus den CLDR-/ICU-Daten der jeweiligen Engine und können sich zwischen Browser- und Node.js-Versionen unterscheiden. Nicht fest davon ausgehen, dass etwa jede arabische Locale
"arab"liefert – mehrere arabische Regionen nutzen standardmäßig"latn". - Nicht verwechseln:
Intl.Locale.prototype.numberingSystem(Singular) liefert nur den explizit gesetztennu-Wert oderundefined, währendgetNumberingSystems()auch ohne Erweiterung die Standardwerte ermittelt. - Jeder Aufruf erzeugt ein neues Array – bei häufiger Nutzung das Ergebnis zwischenspeichern.