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

Intl.RelativeTimeFormat.prototype.resolvedOptions()

Methode

Gibt ein neues Objekt mit den tatsächlich verwendeten Optionen (Locale, Stil, Zahlenformat, Zahlensystem) einer <code>Intl.RelativeTimeFormat</code>-Instanz zurück.

seit JavaScript ES2020 (ECMA-402, 7. Edition) – Baseline: alle mod Kategorie: method-property

Signatur

Intl.RelativeTimeFormat.prototype.resolvedOptions()

Beschreibung

Die Methode resolvedOptions() zeigt, welche Einstellungen eine Intl.RelativeTimeFormat-Instanz tatsächlich verwendet. Das kann von dem abweichen, was Sie dem Konstruktor übergeben haben: Die Engine verhandelt die Locale mit den verfügbaren Sprachdaten, setzt Standardwerte für fehlende Optionen ein und übernimmt Unicode-Erweiterungen wie -u-nu- aus dem Locale-Tag.

Das zurückgegebene Objekt enthält diese Eigenschaften:

  • locale – das BCP-47-Tag der tatsächlich genutzten Locale (z. B. "de-DE" oder beim Fallback "de").
  • style – "long", "short" oder "narrow" (Standard: "long").
  • numeric – "always" oder "auto" (Standard: "always").
  • numberingSystem – das verwendete Zahlensystem, z. B. "latn" oder "arab".

Nützlich ist die Methode vor allem zur Fehlersuche, zum Prüfen, ob eine gewünschte Sprache wirklich unterstützt wird, und zum Erzeugen eines zweiten Formatierers mit genau denselben Einstellungen. Jeder Aufruf liefert ein neues Objekt. Wenn Sie es ändern, hat das keine Auswirkung auf den Formatierer.

Rückgabewert

Typ
{ locale: string, style: "long" | "short" | "narrow", numeric: "always" | "auto", numberingSystem: string }
Beschreibung
Ein neues, einfaches Objekt mit den aufgelösten Optionen locale, style, numeric und numberingSystem.

Beispiele

Aufgelöste Optionen mit Standardwerten anzeigen

const rtf = new Intl.RelativeTimeFormat('de-DE', { numeric: 'auto' });

console.log(rtf.resolvedOptions());
console.log(rtf.format(-1, 'day'));
{ locale: 'de-DE', style: 'long', numeric: 'auto', numberingSystem: 'latn' } gestern

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

const createFormatter = (wanted) => {
  const rtf = new Intl.RelativeTimeFormat(wanted);
  const { locale } = rtf.resolvedOptions();
  if (!locale.startsWith(wanted.split('-')[0])) {
    console.warn(`"${wanted}" nicht verfügbar, Fallback auf "${locale}"`);
  }
  return rtf;
};

createFormatter('fr-CA');
createFormatter('tlh'); // Klingonisch: meist nicht vorhanden
"tlh" nicht verfügbar, Fallback auf "en-US" (abhängig von der Standard-Locale der Umgebung)

Unicode-Erweiterung für das Zahlensystem

const rtf = new Intl.RelativeTimeFormat('ar-EG-u-nu-arab', { style: 'short' });
const { locale, numberingSystem, style } = rtf.resolvedOptions();

console.log(locale, numberingSystem, style);
console.log(rtf.format(3, 'hour'));
ar-EG-u-nu-arab arab short خلال ٣ ساعات

Formatierer mit identischen Einstellungen klonen

const original = new Intl.RelativeTimeFormat('en-GB', { style: 'narrow', numeric: 'auto' });
const { locale, ...options } = original.resolvedOptions();

const clone = new Intl.RelativeTimeFormat(locale, options);
console.log(clone.format(-2, 'week'));
2w ago

// Wichtig · Fallstricke

  • Die Locale kann abweichen: locale gibt die tatsächlich ausgehandelte Locale an. Das kann eine allgemeinere Sprache sein ("de" statt "de-XY") oder die Standard-Locale der Umgebung. Verlassen Sie sich also nicht darauf, dass hier Ihr übergebenes Tag steht.
  • Der genaue Wert kann je nach Engine und ICU-Version unterschiedlich sein (Chrome, Firefox, Safari, Node.js mit small-icu oder full-icu). Ältere Node.js-Builds mit small-icu fallen oft auf "en-US" zurück.
  • numberingSystem wird nur übernommen, wenn es über die Unicode-Erweiterung -u-nu- angegeben wurde und unterstützt wird. Ab ES2023 kann es auch als Option numberingSystem übergeben werden. Ein ungültiger Wert wird stillschweigend durch das Standard-Zahlensystem der Locale ersetzt.
  • Das zurückgegebene Objekt ist eine Momentaufnahme. Wenn Sie es ändern, ändert sich der Formatierer nicht.
  • Wird die Methode mit einem this aufgerufen, das keine Intl.RelativeTimeFormat-Instanz ist, löst sie einen TypeError aus.
  • Unterstützung: Chrome 71+, Firefox 65+, Safari 14+, Node.js 12+.