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
Namensraumobjekt enthält mehrere Konstruktoren sowie Funktionalitäten, die für die Internationalisierungskonstruktoren und andere sprachsensitive Funktionen typisch sind. Zusammen bilden sie die ECMAScript Internationalization API, die sprachsensitive Zeichenfolgenvergleichung, Zahlenformatierung, Datum- und Zeitformatierung und mehr bietet.
Beschreibung
Im Gegensatz zu den meisten globalen Objekten ist Intl
kein Konstruktor. Sie können es weder mit dem new
Operator verwenden noch das Intl
Objekt als Funktion aufrufen. Alle Eigenschaften und Methoden von Intl
sind statisch (genau wie das Math
Objekt).
Die Internationalisierungskonstruktoren sowie mehrere sprachsensitive Methoden anderer Konstruktoren (siehe Siehe auch) verwenden ein gemeinsames Muster zur Identifizierung von Regionen und zur Bestimmung der tatsächlich verwendeten. Sie akzeptieren alle locales
und options
Argumente und führen die angeforderten Regionen gegen die von ihnen unterstützten Regionen mithilfe eines im options.localeMatcher
Property angegebenen Algorithmus aus.
locales Argument
Das locales
Argument wird verwendet, um die Region zu bestimmen, die in einer bestimmten Operation verwendet wird. Die JavaScript-Implementierung untersucht locales
und berechnet dann eine Region, die ihren Präferenzen am nächsten entspricht. locales
kann sein:
undefined
(oder ausgelassen): Die Standardregion der Implementierung wird verwendet.- Eine Region: Ein Regionsbezeichner oder ein
Intl.Locale
Objekt, das einen Regionsbezeichner umschließt. - Eine Liste von Regionen: Jeder andere Wert, der in ein Objekt umgewandelt und dann als Array von Regionen behandelt wird.
In den beiden letztgenannten Fällen ist die tatsächlich verwendete Region die am besten unterstützte, die durch Regionenverhandlung bestimmt wird. Wenn ein Regionsbezeichner keine Zeichenfolge oder kein Objekt ist, wird ein TypeError
ausgelöst. Wenn ein Regionsbezeichner eine syntaktisch ungültige Zeichenfolge ist, wird ein RangeError
ausgelöst. Wenn ein Regionsbezeichner gültig, aber der Implementierung nicht bekannt ist, wird er ignoriert und die nächste Region in der Liste wird betrachtet, sodass schließlich auf die Systemregion zurückgegriffen wird. Sie sollten sich jedoch nicht darauf verlassen, dass ein bestimmter Regionsname ignoriert wird, da die Implementierung jederzeit Daten für jede Region hinzufügen kann. Zum Beispiel verwendet new Intl.DateTimeFormat("default")
nur die Standardregion der Implementierung, weil "default"
syntaktisch gültig, aber nicht als Region anerkannt ist.
Ein Regionsbezeichner ist eine Zeichenfolge bestehend 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 einzigartigen Variantentags, jedes mit entweder 5–8 alphanumerischen oder einer Ziffer gefolgt von 3 alphanumerischen Zeichen Optional
- Einer oder mehreren BCP 47 Erweiterungssequenzen Optional
- Einer privat verwendeten Erweiterungssequenz Optional
Jeder Subtag und jede Sequenz werden durch Bindestriche getrennt. Regionsbezeichner sind ASCII Groß-/Kleinschreibung ignorierend. Allerdings ist es üblich, den Skriptsubtag in Großschreibung (der erste Buchstabe wird großgeschrieben, nachfolgende Buchstaben sind klein) zu verwenden, die Regionssubtags in Großbuchstaben und alles andere in Kleinbuchstaben zu schreiben. Zum Beispiel:
"hi"
: Hindi (Sprache)"de-AT"
: Deutsch (Sprache) wie in Österreich (Region) verwendet"zh-Hans-CN"
: Chinesisch (Sprache) geschrieben in vereinfachten Zeichen (Skript) wie in China (Region) verwendet"en-emodeng"
: Englisch (Sprache) im Dialekt "Frühneuenglisch" (Variante)
Subtags zur Identifizierung von Sprachen, Skripten, Regionen (einschließlich Ländern) und (selten verwendeten) Varianten 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 sollten Sie sich nicht zu sehr darauf verlassen, dass Subtags universell unterstützt werden.
BCP 47 Erweiterungssequenzen bestehen aus einer einzelnen Ziffer oder einem Buchstaben (außer "x"
) und einem oder mehreren zwei- bis achtbuchstabigen oder ziffernhaltigen Subtags, 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 Erweiterungs-Subtags 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 derIntl
API-Objekte anzufordern. Beispiele:"de-DE-u-co-phonebk"
: Verwendung der Telefonbuchvariante der deutschen Sortierreihenfolge, die umlautierte Vokale als entsprechende Zeichenpaare interpretiert: ä → ae, ö → oe, ü → ue."th-TH-u-nu-thai"
: Verwendung thailändischer Ziffern (๐, ๑, ๒, ๓, ๔, ๕, ๖, ๗, ๘, ๙) in der Zahlenformatierung."ja-JP-u-ca-japanese"
: Verwendung des japanischen Kalenders in der Datums- und Zeitformatierung, sodass 2013 als das Jahr 25 der Heisei-Periode oder 平成 25 ausgedrückt wird."en-GB-u-ca-islamic-umalqura"
: Verwendung des britischen 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 transformierten Inhalt an: zum Beispiel Text, der aus einer anderen Region übersetzt wurde. KeineIntl
Funktionalität berücksichtigt derzeit die"t"
Erweiterung. Diese Erweiterung enthält jedoch manchmal eine verschachtelte Region (ohne Erweiterungen): Beispielsweise enthält die transformierte Erweiterung in"de-t-en"
den Regionsbezeichner für Englisch. Wenn eine verschachtelte Region vorhanden ist, muss sie ein gültiger Regionsbezeichner sein. Zum Beispiel, weil"en-emodeng-emodeng"
ungültig ist (da es ein doppeltesemodeng
Variantensubtag enthält), ist auch"de-t-en-emodeng-emodeng"
ungültig.
Schließlich kann eine privat verwendete Erweiterungssequenz, die den Buchstaben "x"
verwendet, erscheinen, gefolgt von einem oder mehreren eins- bis achtbuchstabigen oder ziffernhaltigen Subtags, die durch Bindestriche getrennt sind. Dies ermöglicht Anwendungen, Informationen für ihren eigenen privaten Gebrauch zu codieren, die von allen Intl
Operationen ignoriert werden.
options Argument
Das options
Argument muss ein Objekt mit Eigenschaften sein, die je nach Konstruktor und Funktion variieren. Wenn das options
Argument nicht bereitgestellt oder undefiniert ist, werden für alle Eigenschaften Standardwerte verwendet.
Eine Eigenschaft wird von allen sprachsensitiven Konstruktoren und Funktionen unterstützt: Die localeMatcher
Eigenschaft, deren Wert eine Zeichenkette "lookup"
oder "best fit"
sein muss und die eines der unten beschriebenen Regionenabgleichsalgorithmen auswählt.
Regionsidentifikation und -verhandlung
Die Liste der Regionen, die durch das locales
Argument angegeben ist, nachdem Unicode-Erweiterungen daraus entfernt wurden, wird als priorisierte Anforderung der Anwendung interpretiert. Die Laufzeit vergleicht sie mit den verfügbaren Regionen und wählt die beste verfügbare. Es gibt zwei Abgleichsalgorithmen: Der "lookup"
Abgleicher folgt dem Lookup-Algorithmus, der in BCP 47 spezifiziert ist; der "best fit"
Abgleicher lässt die Laufzeit eine Region bereitstellen, die mindestens, aber möglicherweise mehr, für die Anforderung geeignet ist als das Ergebnis des Lookup-Algorithmus. Wenn die Anwendung kein locales
Argument bereitstellt oder die Laufzeit keine Region hat, die zur Anfrage passt, wird die Standardregion der Laufzeit verwendet. Der Abgleicher kann über eine Eigenschaft des options
Arguments ausgewählt werden (siehe unten).
Wenn der ausgewählte Regionsbezeichner 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 vom Regionsbezeichner 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, die objekten darstellen, die eine sprachsensitive Zeichenfolgenvergleichung ermöglichen.
Intl.DateTimeFormat
-
Konstruktor für Objekte, die eine sprachsensitive Datum- und Zeitformatierung ermöglichen.
Intl.DisplayNames
-
Konstruktor für Objekte, die die konsistente Übersetzung von Sprach-, Regions- und Skriptnamen ermöglichen.
Intl.DurationFormat
-
Konstruktor für Objekte, die eine loaclesensitive 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 eine sprachsensitive Zahlenformatierung ermöglichen.
Intl.PluralRules
-
Konstruktor für Objekte, die eine plural-sensitive Formatierung und sprachspezifische Regeln für Plurale ermöglichen.
Intl.RelativeTimeFormat
-
Konstruktor für Objekte, die eine sprachsensitive relative Zeitformatierung ermöglichen.
Intl.Segmenter
-
Konstruktor für Objekte, die eine loaclesensitive Textsegmentierung ermöglichen.
Intl[Symbol.toStringTag]
-
Der anfängliche Wert der
[Symbol.toStringTag]
Eigenschaft ist die Zeichenkette"Intl"
. Diese Eigenschaft wird inObject.prototype.toString()
verwendet.
Statische Methoden
Intl.getCanonicalLocales()
-
Gibt kanonische Regionsnamen zurück.
Intl.supportedValuesOf()
-
Gibt ein sortiertes Array zurück, das die unterstützten einzigartigen Kalender-, Kollations-, Währungs-, Nummerierungssystem- oder Einheitentwerte der Implementierung enthält.
Beispiele
Formatieren von Daten und Zahlen
Sie können Intl
verwenden, um Daten und Zahlen in einer Form zu formatieren, die für eine bestimmte Sprache und Region konventionell ist:
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 hardcodierten Regionsnamen 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 navigator.languages
Eigenschaft eine sortierte Liste der vom Benutzer bevorzugten Sprachen. Diese Liste kann direkt an die Intl
Konstruktoren übergeben werden, um eine Präferenz-basierte Rückfallauswahl von Regionen zu implementieren. Der Prozess der Regionenverhandlung wird verwendet, um die am besten geeignete verfügbare Region 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)