Intl
Baseline Widely available *
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2017.
* Some parts of this feature may have varying levels of support.
Das Intl
Namensraum-Objekt enthält mehrere Konstruktoren sowie gemeinsame Funktionalitäten für die Internationalisierungskonstruktoren und andere sprachsensitive Funktionen. Gemeinsam bilden sie die ECMAScript Internationalization API, die sprachsensitive Stringvergleiche, Nummernformatierung, Datums- und Zeitformatierung und mehr bietet.
Beschreibung
Im Gegensatz zu den meisten globalen Objekten ist Intl
kein Konstruktor. Sie können es nicht mit dem new
Operator verwenden oder das Intl
Objekt als Funktion aufrufen. Alle Eigenschaften und Methoden von Intl
sind statisch (genauso wie das Math
Objekt).
Die Internationalisierungskonstruktoren sowie mehrere sprachsensitive Methoden anderer Konstruktoren (aufgelistet unter Siehe auch) verwenden ein gemeinsames Muster zur Identifizierung von Lokalen und zur Bestimmung desjenigen, das sie tatsächlich verwenden: Sie akzeptieren alle locales
und options
Argumente und verhandeln das angeforderte Locale gegen die von ihnen unterstützten Locale unter Verwendung eines Algorithmus, der in der Eigenschaft options.localeMatcher
angegeben ist.
locales Argument
Das locales
Argument wird verwendet, um das Locale zu bestimmen, das in einem bestimmten Vorgang verwendet wird. Die JavaScript-Implementierung untersucht locales
und ermittelt dann ein Locale, das es versteht und das möglichst nah an die ausdrückliche Präferenz herankommt. locales
kann sein:
undefined
(oder weggelassen): Das Standard-Locale der Implementierung wird verwendet.- Ein Locale: Ein Locale-Bezeichner oder ein
Intl.Locale
Objekt, das einen Locale-Bezeichner umschließt. - Eine Liste von Locales: Jeder andere Wert, der in ein Objekt umgewandelt und dann als Array von Locales behandelt wird.
In den letzteren beiden Fällen wird das tatsächlich verwendete Locale als das am besten unterstützte Locale durch Locale-Verhandlung bestimmt. Wenn ein Locale-Bezeichner weder ein String noch ein Objekt ist, wird ein TypeError
ausgelöst. Wenn ein Locale-Bezeichner ein syntaktisch ungültiger String ist, wird ein RangeError
ausgelöst. Wenn ein Locale-Bezeichner wohlgeformt ist, die Implementierung ihn aber nicht erkennt, wird er ignoriert und das nächste Locale in der Liste wird betrachtet, wobei schließlich auf das Locale des Systems zurückgegriffen wird. Es sollte jedoch nicht darauf vertraut werden, dass ein bestimmter Locale-Name ignoriert wird, da die Implementierung möglicherweise in Zukunft Daten für jedes beliebige Locale hinzufügt. Zum Beispiel verwendet new Intl.DateTimeFormat("default")
das Standard-Locale der Implementierung nur, weil "default"
syntaktisch gültig, aber als kein Locale erkannt ist.
Ein Locale-Bezeichner ist ein String, der besteht aus:
- Einem Sprachsubtag mit 2–3 oder 5–8 Buchstaben
- Einem Skriptsubtag mit 4 Buchstaben Optional
- Einem Regionssubtag mit entweder 2 Buchstaben oder 3 Ziffern Optional
- Einem oder mehreren eindeutigen Variantensubtags, jeder mit entweder 5–8 alphanumerischen Zeichen oder einer Ziffer gefolgt von 3 alphanumerischen Zeichen Optional
- Einem oder mehreren BCP 47 Erweiterungssequenzen Optional
- Einer privater Verwendungs-Erweiterungssequenz Optional
Jeder Subtag und jede Sequenz sind durch Bindestriche getrennt. Locale-Bezeichner sind ASCII-unempfindlich gegenüber Groß- und Kleinschreibung. Es ist jedoch konventionell, Titel-Schreibung (erster Buchstabe groß, folgende Buchstaben klein) für Skriptsubtags zu verwenden, Großbuchstabenschreibung für Regionssubtags und Kleinschreibung für alles andere. Zum Beispiel:
"hi"
: Hindi (Sprache)"de-AT"
: Deutsch (Sprache) wie in Österreich verwendet (Region)"zh-Hans-CN"
: Chinesisch (Sprache), geschrieben in vereinfachten Schriftzeichen (Skript), wie in China verwendet (Region)"en-emodeng"
: Englisch (Sprache) im Dialekt des "Frühen modernen Englisch" (Variante)
Subtags, die Sprachen, Skripte, Regionen (einschließlich Ländern) und (selten verwendete) Varianten identifizieren, sind im IANA Language Subtag Registry registriert. Dieses Register wird regelmäßig aktualisiert, und Implementierungen sind möglicherweise nicht immer auf dem neuesten Stand, daher sollte nicht zu sehr darauf vertraut werden, dass Subtags universell unterstützt werden.
BCP 47 Erweiterungssequenzen bestehen aus einer einzigen Ziffer oder einem Buchstaben (außer "x"
) und einem oder mehreren zwei- bis achtstelligen Buschtaben- oder Ziffernsubtags, die durch Bindestriche getrennt sind. Für jede Ziffer oder jeden Buchstaben ist nur eine Sequenz erlaubt: "de-a-foo-a-foo"
ist ungültig. BCP 47 Erweiterungssubtags sind im Unicode CLDR Project definiert. Derzeit haben nur zwei Erweiterungen definierte Semantiken:
-
Die
"u"
(Unicode) Erweiterung kann verwendet werden, um eine zusätzliche Anpassung vonIntl
API-Objekten zu verlangen. Beispiele:"de-DE-u-co-phonebk"
: Verwenden Sie die Telefonbuchvariante der deutschen Sortierreihenfolge, die umgelautete Vokale als entsprechende Buchstabenpaare interpretiert: ä → ae, ö → oe, ü → ue."th-TH-u-nu-thai"
: Verwenden Sie thailändische Ziffern (๐, ๑, ๒, ๓, ๔, ๕, ๖, ๗, ๘, ๙) bei der Nummernformatierung."ja-JP-u-ca-japanese"
: Verwenden Sie den japanischen Kalender bei der Datums- und Zeitformatierung, sodass 2013 als das Jahr 25 der Heisei-Periode, oder 平成 25, ausgedrückt wird."en-GB-u-ca-islamic-umalqura"
: Verwenden Sie britisches Englisch mit dem Umm al-Qura (Hijri) Kalender, wobei das gregorianische Datum 14. Oktober 2017 das Hijri-Datum 24 Muharram 1439 ist.
-
Die
"t"
(transformierte) Erweiterung zeigt transformierte Inhalte an: zum Beispiel Text, der aus einer anderen Locale übersetzt wurde. KeineIntl
Funktionalität berücksichtigt derzeit die"t"
Erweiterung. Diese Erweiterung enthält jedoch manchmal ein eingebettetes Locale (ohne Erweiterungen): beispielsweise enthält die transformierte Erweiterung in"de-t-en"
den Locale-Bezeichner für Englisch. Wenn ein eingebettetes Locale vorhanden ist, muss es ein gültiger Locale-Bezeichner sein. Zum Beispiel ist"en-emodeng-emodeng"
ungültig (weil es einen doppeltenemodeng
Variantensubtag enthält), daher ist auch"de-t-en-emodeng-emodeng"
ungültig.
Schließlich kann eine private Verwendungs-Erweiterungssequenz mit dem Buchstaben "x"
erscheinen, gefolgt von einem oder mehreren ein- bis achtstelligen Buchstaben- oder Ziffernsubtags, die durch Bindestriche getrennt sind. Dadurch können Anwendungen Informationen für den eigenen, privaten Gebrauch codieren, die von allen Intl
-Operationen ignoriert werden.
options Argument
Das options
Argument muss ein Objekt mit Eigenschaften sein, die je nach Konstruktoren und Funktionen variieren. Wenn das options
Argument nicht bereitgestellt wird oder undefined
ist, werden für alle Eigenschaften Standardwerte verwendet.
Eine Eigenschaft wird von allen sprachsensitiven Konstruktoren und Funktionen unterstützt: Die localeMatcher
Eigenschaft, deren Wert ein String "lookup"
oder "best fit"
sein muss und die eine der unten beschriebenen Lokalisierungs-Abgleichalgorithmen auswählt.
Locale-Identifikation und -Verhandlung
Die Liste der Locale, die durch das locales
Argument angegeben wird, nachdem die Unicode-Erweiterungen von ihnen entfernt wurden, wird als priorisierte Anfrage der Anwendung interpretiert. Die Laufzeit vergleicht es mit den Locales, die sie zur Verfügung hat, und wählt das am besten verfügbare aus. Es existieren zwei Abgleichalgorithmen: Der "lookup"
-Matcher folgt dem in BCP 47 spezifizierten Suchalgorithmus; der "best fit"
-Matcher lässt die Laufzeit ein Locale bereitstellen, das zumindest, aber möglicherweise mehr, für die Anfrage geeignet ist als das Ergebnis des Suchalgorithmus. Wenn die Anwendung kein locales
Argument bereitstellt oder die Laufzeit kein Locale hat, das der Anfrage entspricht, wird das Standard-Locale der Laufzeit verwendet. Der Matcher kann über eine Eigenschaft des options
Arguments ausgewählt werden (siehe unten).
Wenn der ausgewählte Locale-Bezeichner eine Unicode-Erweiterungssequenz hatte, wird diese Erweiterung jetzt verwendet, um das konstruierte Objekt oder das Verhalten der Funktion anzupassen. Jeder Konstruktor oder jede Funktion unterstützt nur eine Teilmenge der für die Unicode-Erweiterung definierten Schlüssel, und die unterstützten Werte hängen oft von dem Locale-Bezeichner ab. Zum Beispiel wird der "co"
Schlüssel (Kollation) nur von Intl.Collator
unterstützt, und sein "phonebk"
Wert wird nur für Deutsch unterstützt.
Statische Eigenschaften
Intl.Collator
-
Konstruktor für Kollatoren, Objekte, die sprachsensitiven Stringvergleich ermöglichen.
Intl.DateTimeFormat
-
Konstruktor für Objekte, die sprachsensitive Datums- und Zeitformatierung ermöglichen.
Intl.DisplayNames
-
Konstruktor für Objekte, die eine konsistente Übersetzung von Sprach-, Regions- und Skriptanzeigennamen ermöglichen.
Intl.DurationFormat
-
Konstruktor für Objekte, die locale-sensitive Dauerformatierung ermöglichen.
Intl.ListFormat
-
Konstruktor für Objekte, die eine sprachsensitive Listenformatierung ermöglichen.
Intl.Locale
-
Konstruktor für Objekte, die einen Unicode-Locale-Bezeichner darstellen.
Intl.NumberFormat
-
Konstruktor für Objekte, die sprachsensitive Nummernformatierung ermöglichen.
Intl.PluralRules
-
Konstruktor für Objekte, die plural-sensitive Formatierung und sprachspezifische Regeln für Plurale ermöglichen.
Intl.RelativeTimeFormat
-
Konstruktor für Objekte, die sprachsensitive relative Zeitformatierung ermöglichen.
Intl.Segmenter
-
Konstruktor für Objekte, die locale-sensitive Textsegmentierung ermöglichen.
Intl[Symbol.toStringTag]
-
Der anfängliche Wert der
[Symbol.toStringTag]
Eigenschaft ist der String"Intl"
. Diese Eigenschaft wird inObject.prototype.toString()
verwendet.
Statische Methoden
Intl.getCanonicalLocales()
-
Gibt kanonische Locale-Namen zurück.
Intl.supportedValuesOf()
-
Gibt ein sortiertes Array zurück, das die unterstützten, einzigartigen Kalender-, Kollations-, Währungs-, Nummerierungssystem- oder Einheitwerte enthält, die von der Implementierung unterstützt werden.
Beispiele
Formatierung von Daten und Nummern
Sie können Intl
verwenden, um Daten und Nummern in einer für eine spezifische Sprache und Region konventionellen Form zu formatieren:
const count = 26254.39;
const date = new Date("2012-05-24");
function log(locale) {
console.log(
`${new Intl.DateTimeFormat(locale).format(date)} ${new Intl.NumberFormat(
locale,
).format(count)}`,
);
}
log("en-US"); // 5/24/2012 26,254.39
log("de-DE"); // 24.5.2012 26.254,39
Verwenden der bevorzugten Sprache des Browsers
Anstatt einen festkodierten Locale-Namen an die Intl
Methoden zu übergeben, können Sie die vom Benutzer bevorzugte Sprache verwenden, die von navigator.language
bereitgestellt wird:
const date = new Date("2012-05-24");
const formattedDate = new Intl.DateTimeFormat(navigator.language).format(date);
Alternativ bietet die Eigenschaft navigator.languages
eine sortierte Liste der vom Benutzer bevorzugten Sprachen. Diese Liste kann direkt an die Intl
Konstruktoren übergeben werden, um eine auf Präferenzen basierende Fallback-Auswahl von Locales zu implementieren. Der Locale-Verhandlungsprozess wird verwendet, um das am besten geeignete verfügbare Locale auszuwählen:
const count = 26254.39;
const formattedCount = new Intl.NumberFormat(navigator.languages).format(count);
Spezifikationen
Specification |
---|
ECMAScript® 2026 Internationalization API Specification # intl-object |
Browser-Kompatibilität
Siehe auch
Keyboard.getLayoutMap()
navigator.language
navigator.languages
- Die ECMAScript Internationalization API von Norbert Lindenberg (2012)