Start · Sprachen · JavaScript · Referenz · Intl.DisplayNames.prototype.resolvedOptions()

Intl.DisplayNames.prototype.resolvedOptions()

Methode

Gibt ein neues Objekt mit den Optionen zurück, die beim Erzeugen eines <code>Intl.DisplayNames</code>-Objekts tatsächlich festgelegt wurden, einschließlich der ausgehandelten Locale.

seit JavaScript ES2021 (ECMA-402, 8. Ausgabe); languageDisplay sei Kategorie: method-property

Signatur

Intl.DisplayNames.prototype.resolvedOptions()

Beschreibung

Die Methode resolvedOptions() zeigt, mit welchen Einstellungen eine Intl.DisplayNames-Instanz tatsächlich arbeitet. Das ist nicht unbedingt das, was an den Konstruktor übergeben wurde: Die Locale wird mit den Locales abgeglichen, die die Laufzeitumgebung unterstützt, und fehlende Optionen werden mit Standardwerten ergänzt (z. B. style: "long" und fallback: "code").

Das zurückgegebene Objekt hat folgende Eigenschaften:

  • locale – BCP-47-Tag der tatsächlich verwendeten Locale
  • style – "long", "short" oder "narrow"
  • type – "language", "region", "script", "currency", "calendar" oder "dateTimeField"
  • fallback – "code" oder "none"
  • languageDisplay – "dialect" oder "standard"; nur vorhanden, wenn type den Wert "language" hat

Typische Anwendungsfälle sind die Fehlersuche bei der Internationalisierung, das Prüfen, ob die gewünschte Locale wirklich unterstützt wird, und das Weitergeben einer bestehenden Konfiguration an andere Intl-Formatierer.

Rückgabewert

Typ
{ locale: string, style: string, type: string, fallback: string, languageDisplay?: string }
Beschreibung
Ein neues Objekt mit den tatsächlich verwendeten Optionen. Wenn man es verändert, hat das keinen Einfluss auf die Instanz.

Beispiele

Standardwerte sichtbar machen

const regionNames = new Intl.DisplayNames(['de'], { type: 'region' });

console.log(regionNames.resolvedOptions());
console.log(regionNames.of('CH'));
{ locale: 'de', style: 'long', type: 'region', fallback: 'code' } Schweiz

languageDisplay nur bei type "language"

const sprachen = new Intl.DisplayNames(['de'], {
  type: 'language',
  languageDisplay: 'standard',
  style: 'short'
});

const opts = sprachen.resolvedOptions();
console.log(opts.languageDisplay);
console.log(sprachen.of('en-US'));

const waehrungen = new Intl.DisplayNames(['de'], { type: 'currency' });
console.log('languageDisplay' in waehrungen.resolvedOptions());
standard Englisch (USA) false

Prüfen, ob die gewünschte Locale unterstützt wird

const getDisplayNames = (wunschLocale, type) => {
  const dn = new Intl.DisplayNames([wunschLocale], { type, fallback: 'none' });
  const { locale } = dn.resolvedOptions();
  if (!locale.startsWith(wunschLocale.split('-')[0])) {
    console.warn(`Locale ${wunschLocale} nicht verfügbar, verwende ${locale}`);
  }
  return dn;
};

const dn = getDisplayNames('fr-CA', 'currency');
console.log(dn.resolvedOptions().locale);
console.log(dn.of('EUR'));
fr-CA euro

Konfiguration klonen und nur eine Option ändern

const lang = new Intl.DisplayNames(['de-AT'], { type: 'language' });
const { locale, ...rest } = lang.resolvedOptions();

// gleiche Einstellungen, aber kurzer Stil
const kurz = new Intl.DisplayNames([locale], { ...rest, style: 'short' });
console.log(kurz.resolvedOptions().style);
short

// Wichtig · Fallstricke

  • Die Locale kann abweichen: Wird eine Locale nicht unterstützt, fällt die Laufzeitumgebung auf eine passende oder auf die Standard-Locale zurück. Ob man die gewünschte Locale wirklich bekommen hat, sieht man nur an resolvedOptions().locale. Unicode-Erweiterungen wie -u-ca-… werden entfernt, weil DisplayNames keine davon unterstützt.
  • languageDisplay ist nur vorhanden, wenn type den Wert "language" hat. Prüfe die Eigenschaft deshalb nicht blind.
  • Die Pflichtoption type hat keinen Standardwert: Fehlt sie, wirft schon der Konstruktor einen TypeError.
  • Jeder Aufruf gibt ein neues Objekt zurück. Zwei Aufrufe liefern also nie dasselbe Objekt (=== ergibt false).
  • Die genauen Ausgaben von of() hängen von den CLDR-Daten der jeweiligen Engine ab und können sich zwischen Browsern und Node.js-Versionen leicht unterscheiden. Node.js-Builds mit small-icu unterstützen oft nur Englisch.
  • Kompatibilität: Chrome 81+, Firefox 86+, Safari 14.1+, Node.js 14+. languageDisplay und die Typen calendar und dateTimeField kamen später hinzu (ES2022).