Start · Sprachen · JavaScript · Referenz · Intl.Locale.prototype.getNumberingSystems()

Intl.Locale.prototype.getNumberingSystems()

Methode

Gibt ein Array mit einem oder mehreren eindeutigen Zahlensystem-Bezeichnern (z. B. <code>"latn"</code>, <code>"arab"</code>) zurück, die für diese Locale üblich sind.

seit JavaScript Intl Locale Info API (TC39-Vorschlag, Stage 3): Ch Kategorie: method-property

Signatur

Intl.Locale.prototype.getNumberingSystems()

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 Option numberingSystem im 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

Typ
string[]
Beschreibung
Ein neues Array mit mindestens einem Zahlensystem-Bezeichner (z. B. ["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());
}
de-DE [ 'latn' ] ar-EG [ 'arab' ] ja-JP [ 'latn' ]

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());
[ 'thai' ] [ 'deva' ]

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));
arab ١٬٢٣٤٫٥

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);
[ { value: 'arab', label: '٢٠٢٤' }, { value: 'latn', label: '2024' } ]

// 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. mit typeof 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 gesetzten nu-Wert oder undefined, während getNumberingSystems() auch ohne Erweiterung die Standardwerte ermittelt.
  • Jeder Aufruf erzeugt ein neues Array – bei häufiger Nutzung das Ergebnis zwischenspeichern.