Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Das Intl-Objekt ist der Namensraum für die ECMAScript-Internationalisierungs-API, die eine breite Palette von lokalisierungs- und kulturbezogenen Daten und Operationen bietet.
Das Intl-Objekt ist stark an Anwendungsfällen orientiert. Es bietet ein separates Objekt für jeden Anwendungsfall, der lokalisierungsspezifische Logik erfordert. Derzeit bietet es die folgenden Funktionen:
Die meisten Intl-APIs haben ein ähnliches Design (Intl.Locale ist die einzige Ausnahme). Sie beginnen mit der Konstruktion einer Instanz mit der gewünschten Locale und den Optionen. Dies definiert einen Satz von Regeln für die gewünschte Operation (Formatierung, Kollation, Segmentierung usw.). Dann, wenn Sie die Methode auf der Instanz aufrufen, wie format(), compare() oder segment(), wendet das Objekt die angegebene Regel auf die übergebenen Daten an.
Das allgemeine Signatur des Konstruktors ist:
Ein String mit einem BCP 47 Sprach-Tag oder eine Intl.Locale-Instanz oder ein Array solcher Locale-Identifikatoren. Die Standardeinstellung der Laufzeit wird verwendet, wenn undefined übergeben wird oder wenn keiner der angegebenen Locale-Identifikatoren unterstützt wird. Für die allgemeine Form und Interpretation des locales-Arguments siehe die Parameterbeschreibung auf der Intl-Hauptseite.
options OptionalEin Objekt, das Eigenschaften enthält, die spezifische Aspekte der Operation anpassen, was der Schlüssel zum Verständnis der Verwendung jedes Intl-Objekts ist.
Locales liegen allen Verhaltensweisen von Intl zugrunde. Eine Locale ist ein Satz von Konventionen, dargestellt in der Intl-API durch das Intl.Locale-Objekt. Alle Intl-Konstruktoren, die Sprach-Tags akzeptieren, akzeptieren auch Intl.Locale-Objekte.
Jede Locale wird hauptsächlich durch vier Dinge definiert: eine language, ein script, eine region und manchmal einige variants. Wenn sie in dieser Reihenfolge verbunden werden, bilden sie ein BCP 47 Sprach-Tag.
Eine Locale enthält auch einen Satz von Konventionen, die von dieser speziellen Kultur verwendet werden:
| Datum/Uhrzeit-Formatierung | calendar | Wird verwendet, um Tage in Jahre, Monate und Wochen zu gruppieren und ihnen Namen zuzuweisen. Zum Beispiel wird das Datum gregory "2022-01-01" im Kalender hebrew zu "28 Tevet 5782". | ca |
| hourCycle | Entscheidet, ob Zeiten im 12-Stunden- oder 24-Stunden-Format angezeigt werden und ob die kleinste Stundenzahl 0 oder 1 ist. | hc | |
| Zahlenformatierung, einschließlich Daten, Zeiten, Dauern usw. | numberingSystem | Verwandelt Zahlen in eine lokalisierungsspezifische Notation. Das reguläre 0123456789 System wird latn (Latein) genannt. Oft hat jedes Script ein Zahlensystem, das einfach eine Ziffer-zu-Ziffer-Übersetzung ist, aber einige Scripts haben mehr als ein Zahlensystem, einige schreiben normalerweise keine Zahlen in diesem Script (zum Beispiel hat Chinesisch sein eigenes hanidec Zahlensystem, aber die meisten Texte verwenden das standardmäßige latn System), und andere erfordern spezielle Umrechnungsalgorithmen (zum Beispiel Römische Zahlen - roman). | nu |
| Kollation | collation | Definiert den generischen Kollationsalgorithmus. Zum Beispiel, wenn Sie die deutsche phonebk Kollation verwenden, wird "ä" wie "ae" behandelt und zwischen "ad" und "af" sortiert. | co |
| caseFirst | Entscheidet, ob Groß- oder Kleinbuchstaben zuerst sortiert werden oder ob die Groß-/Kleinschreibung ignoriert wird. | kf | |
| numeric | Entscheidet, ob Zahlen als Zahlen oder als Strings sortiert werden. Zum Beispiel, wenn wahr, wird "10" nach "2" sortiert. | kn |
Diese Eigenschaften können explizit angegeben werden, wenn das Intl.Locale-Objekt erstellt oder Sprach-Tags an andere Intl-Konstruktoren übergeben werden. Es gibt zwei Möglichkeiten dies zu tun — sie an das Sprach-Tag anhängen oder sie als Optionen angeben.
Mithilfe von Intl.DateTimeFormat als Beispiel erstellen beide der folgenden Zeilen einen Formatierer, der Daten im hebräischen Kalender formatiert:
Nicht erkannte Eigenschaften werden ignoriert, sodass Sie die gleiche Syntax wie oben mit Intl.NumberFormat verwenden können, aber es wird nichts anderes tun, als einfach en-US zu übergeben, da die Zahlenformatierung die calendar-Eigenschaft nicht verwendet.
Es ist schwierig, die Standardwerte dieser Locale-Konventionen zu ermitteln. new Intl.Locale("en-US").calendar gibt undefined zurück, da das Locale-Objekt nur die Informationen enthält, die Sie ihm übergeben haben. Der Standardkalender ist theoretisch abhängig von der API, mit der Sie den Kalender verwenden, sodass Sie den Standardkalender von en-US, wie er von Intl.DateTimeFormat verwendet wird, mit seiner resolvedOptions()-Methode ermitteln können. Das Gleiche gilt für andere Eigenschaften.
Intl.Locale-Objekte tun zwei Dinge gleichzeitig: Sie repräsentieren ein geparstes BCP 47 Sprach-Tag (wie oben demonstriert) und sie liefern Informationen über diese Locale. Alle ihre Eigenschaften, wie calendar, werden nur aus der Eingabe extrahiert, ohne dabei eine Datenquelle nach Standardwerten abzufragen. Auf der anderen Seite hat es eine Gruppe von Methoden, um reale Informationen über die Locale zu erfragen. Zum Beispiel ergänzen die Methoden getCalendars(), getHourCycles(), getNumberingSystems() und getCollations() die Eigenschaften calendar, hourCycle, numberingSystem und collation, und jede gibt ein Array bevorzugter Werte für diese Eigenschaft zurück.
Intl.Locale-Instanzen beinhalten auch andere Methoden, die nützliche Informationen preisgeben, wie getTextInfo(), getTimeZones(), und getWeekInfo().
Eine gemeinsame Frage zur Internationalisierung lautet: Wie weiß ich, welche Locale ich nutzen soll?
Die offensichtlichste Antwort lautet: "was der Nutzer bevorzugt." Browser stellen die Spracheinstellungen des Nutzers über die navigator.languages-Eigenschaft zur Verfügung. Dies ist ein Array von Sprach-Identifikatoren, das direkt an den Konstruktor des Formatierers übergeben werden kann – mehr dazu später. Der Nutzer kann diese Liste in seinen Browsereinstellungen konfigurieren. Sie können auch ein leeres Array oder undefined übergeben, wodurch die Standardeinstellung des Browsers verwendet wird.
Allerdings liefert dies möglicherweise nicht immer das wünschenswerteste Ergebnis. Von Intl formatierte Strings stellen einen winzigen Bruchteil des auf Ihrer Website angezeigten Texts dar; die meisten lokalisierten Inhalte werden von Ihnen, dem Website-Entwickler, bereitgestellt. Angenommen, Ihre Website wird nur in zwei Sprachen angeboten: Englisch und Französisch. Wenn ein japanischer Nutzer Ihre Website besucht und erwartet, diese auf Englisch zu nutzen, wird er verwirrt sein, wenn er den englischen Text mit Zahlen und Daten auf Japanisch sieht!
In der Regel möchten Sie nicht die Standardsprache des Browsers verwenden. Vielmehr möchten Sie die gleiche Sprache verwenden, in der der Rest Ihrer Website angeboten wird. Angenommen, Ihre Website hat einen Sprachschalter, der die Auswahl des Nutzers irgendwo speichert — Sie könnten diese direkt verwenden.
Falls Ihre Website ein Backend hat, das die Sprache basierend auf dem Accept-Language-Header des Nutzers dynamisch auswählt und entsprechend anderes HTML zurücksendet, könnten Sie auch die [HTMLElement.lang]-Eigenschaft des HTML-Elements verwenden: new Intl.NumberFormat(document.documentElement.lang).
Falls Ihre Website nur in einer Sprache angeboten wird, könnten Sie die Locale direkt in Ihrem Code hartkodieren: new Intl.NumberFormat("en-US").
Wie bereits erwähnt, können Sie dem Konstruktor auch ein Array von Locales übergeben, das eine Liste von Fallback-Optionen darstellt. Das erste Beispiel mit navigator.languages ist ein Beispiel hierfür: Wenn die erste nutzer-configurierte Locale nicht für die bestimmte Operation unterstützt wird, wird die nächste versucht, und so weiter, bis eine angeforderte Locale gefunden wird, für die die Laufzeit Daten hat. Sie können dies auch manuell tun. Im nachstehenden Beispiel spezifizieren wir eine Liste von Locales in absteigender Reihenfolge der Spezifität, die alle Sprachen darstellen, die ein chinesischer Sprecher aus Hongkong wahrscheinlich versteht, sodass der Formatierer die spezifischste von ihm unterstützte Locale auswählt.
Es gibt keine API, um alle unterstützten Locales aufzulisten, aber es gibt ein paar Methoden zum Umgang mit der Locale-Liste:
Die zweite gemeinsame Frage für alle Objekte lautet "was gibt die Methode zurück?" Diese Frage lässt sich nicht über den Aufbau oder Typ des zurückgegebenen Wertes hinaus leicht beantworten, da es keine normative Spezifikation gibt, die genau vorschreibt, was genau zurückgegeben werden sollte. Die meiste Zeit ist das Ergebnis einer Methode konsistent. Allerdings kann sich die Ausgabe zwischen Implementierungen unterscheiden, sogar innerhalb derselben Locale — Unterschiede in Ausgaben sind ausdrücklich von der Spezifikation vorgesehen und erlaubt. Es ist möglicherweise auch nicht das, was Sie erwarten. Zum Beispiel könnte der von format() zurückgegebene String geschützte Leerzeichen oder von bidirektionalen Steuerzeichen umgeben sein. Vergleichen Sie die Ergebnisse einer Intl-Methode nie mit fest kodierten Konstanten; sie sollten nur Nutzern angezeigt werden.
Natürlich klingt diese Antwort unbefriedigend, denn die meisten Entwickler wollen durchaus kontrollieren, wie die Ausgabe aussieht — zumindest will man nicht, dass Nutzer durch unsinnige Ausgaben verwirrt werden. Hier sind einige Richtlinien, wenn Sie Tests durchführen möchten, sei es automatisiert oder manuell:
Ein Hauptanwendungsfall von Intl ist das Ausgeben von lokalisierungsspezifischen Texten, die strukturierte Daten darstellen. Dies ähnelt Übersetzungssoftware, aber anstatt Ihnen die Übersetzung beliebigen Textes zu ermöglichen, nimmt es Daten wie Daten, Zahlen und Listen und formatiert sie gemäß lokalisierungsbezogenen Regeln.
Die Objekte Intl.DateTimeFormat, Intl.DurationFormat, Intl.ListFormat, Intl.NumberFormat, und Intl.RelativeTimeFormat formatieren jeweils eine Art von Daten. Jede Instanz bietet zwei Methoden:
Zum Beispiel hier eine typische Verwendung des Intl.NumberFormat-Objekts:
Sie müssen nicht immer ein Formatierer-Objekt konstruieren, um Strings zu formatieren. Für gelegentliche Zwecke können Sie auch direkt die toLocaleString()-Methode auf den Daten aufrufen, indem Sie die Locale und Optionen als Argumente übergeben. Die toLocaleString()-Methode wird von Temporal.PlainDate.prototype.toLocaleString(), Temporal.Duration.prototype.toLocaleString(), Number.prototype.toLocaleString(), und so weiter implementiert. Lesen Sie die Dokumentation für die Daten, die Sie formatieren, um zu sehen, ob sie toLocaleString() unterstützen und welche Formatierer-Optionen es entspricht.
Beachten Sie, dass toLocaleString() potenziell weniger effizient sein kann als die Verwendung eines Formatierer-Objekts, da jedes Mal, wenn toLocaleString aufgerufen wird, eine Suche in einer großen Datenbank von Lokalisierungsstrings durchgeführt werden muss. Wenn die Methode viele Male mit denselben Argumenten aufgerufen wird, ist es besser, ein Formatierer-Objekt zu erstellen und seine format()-Methode zu verwenden, da ein Formatierer-Objekt die ihm übergebenen Argumente speichert und sich entscheidet, einen Ausschnitt der Datenbank im Cache zu halten, sodass zukünftige format-Aufrufe Lokalisierungsstrings innerhalb eines eingeschränkteren Kontexts suchen können.
Intl.DateTimeFormat formatiert Daten und Zeiten sowie Bereiche von Daten und Zeiten. Das DateTimeFormat-Objekt akzeptiert Datum/Zeit-Eingaben in einer der folgenden Formen: Date, Temporal.PlainDateTime, Temporal.PlainTime, Temporal.PlainDate, Temporal.PlainYearMonth, oder Temporal.PlainMonthDay.
Hinweis: Sie können kein Temporal.ZonedDateTime-Objekt direkt übergeben, da die Zeitzone bereits im Objekt festgelegt ist. Sie sollten Temporal.ZonedDateTime.prototype.toLocaleString() verwenden oder es zuerst in ein Temporal.PlainDateTime-Objekt konvertieren.
Gängige Anwendungsfälle für lokalisierte Datums- und Zeitformatierung sind wie folgt:
Um zu entscheiden, wie der formatierte String aussehen soll, wählen Sie zunächst den Kalender (der Jahr-, Monat-, Wochen-, und Tagesberechnung beeinflusst) und die Zeitzone (die das genaue Zeitmoment sowie möglicherweise das Datum beeinflusst). Dies geschieht mithilfe der zuvor genannten calendar-Option (oder dem -ca- Erweiterungsschlüssel im Locale-Identifikator) und der timeZone-Option.
Hier zeigen wir, wie die Kombination von calendar- und timeZone-Konfigurationen zu unterschiedlichen Darstellungen desselben Moments führen.
Die Ausgabe sieht so aus:
| 'gregory' | 'America/New_York' | 'Freitag, 31. Dezember 2021 um 19:00:00 Eastern Standard Time' |
| 'gregory' | 'Asia/Tokyo' | 'Samstag, 1. Januar 2022 um 09:00:00 Japan Standard Time' |
| 'hebrew' | 'America/New_York' | 'Freitag, 27 Tevet 5782 um 19:00:00 Eastern Standard Time' |
| 'hebrew' | 'Asia/Tokyo' | 'Samstag, 28 Tevet 5782 um 09:00:00 Japan Standard Time' |
Ein Datum/Uhrzeit besteht aus den folgenden Komponenten: weekday, era, year, month, day, dayPeriod, hour, minute, second, fractionalSecondDigits, und timeZoneName. Ihre nächste Entscheidung ist, welche Komponenten in der Ausgabe enthalten sein sollen und welche Formen sie annehmen sollen. Sie haben zwei Möglichkeiten:
Sie sollten eine dieser beiden Methoden wählen, da sie gegenseitig exklusiv sind. Die gleichzeitige Verwendung beider Methoden führt zu einem Fehler.
Grundsätzlich sucht das DateTimeFormat-Objekt nach Anforderung einer Kombination von Komponenten nach einer "Schablone", die mit den angeforderten Komponenten übereinstimmt, sodass es nur die Werte eins nach dem anderen ausfüllen muss. Nicht jede Kombination von Komponenten hat eine vordefinierte Schablone. DateTimeFormat hat eine formatMatcher-Option, die entscheidet, wie zu verhandeln ist, indem Komponenten länger oder kürzer gemacht werden als angefordert, oder indem Komponenten weggelassen oder hinzugefügt werden. Es wird ziemlich technisch, daher sollten Sie das Intl.DateTimeFormat() Nachschlagewerk lesen, um besser zu verstehen, wie es damit umgeht.
Hier, demonstrieren wir einige gängige Methoden zum Formatieren der Komponenten:
Es gibt weitere Anpassungsoptionen. Beispielsweise können Sie die hourCycle-Option verwenden, um die Uhrzeit im 12-Stunden- oder 24-Stunden-Format anzuzeigen und Mitternacht/Mittag als 12:00 oder 0:00 anzuzeigen. Sie können auch die numberingSystem-Option verwenden, um Zahlen in einem anderen Zahlensystem anzuzeigen.
Neben format() gibt es eine zweite wichtige Methode, formatRange(), die einen Bereich von Daten oder Zeiten formatiert. Sie nimmt zwei DateTime-Darstellungen des gleichen Typs, formatiert jede einzeln, verbindet sie mit einem Bereichsseparator (wie der en-Dash), und entfernt gegebenenfalls doppelte Teile.
Die Zahlenformatierung erfolgt mit dem Intl.NumberFormat-Objekt. Das NumberFormat-Objekt akzeptiert Eingaben in Form von Zahlen, Strings oder BigInt-Werten. Das Übergeben eines Strings oder BigInt anstelle einer Zahl ermöglicht Ihnen, Zahlen zu formatieren, die zu groß oder zu klein sind, um als JavaScript-Zahl genau dargestellt zu werden.
Gängige Anwendungsfälle für die lokalisierte Zahlenformatierung sind wie folgt:
Um zu entscheiden, wie der formatierte String aussehen soll, wählen Sie zuerst das Zahlensystem (was die Zeichen beeinflusst, die für die Ziffern verwendet werden). Der Zweck eines Zahlensystems wurde bereits in den Locale-Informationen diskutiert. Eine weitere Option, die Sie entscheiden müssen, ist der style, der den Kontext festlegt, in welchem die Zahl dargestellt wird, und möglicherweise die Standardwerte anderer Optionen beeinflusst. Er ist eines von "decimal", "percent", "currency", oder "unit". Wenn Sie Währungen formatieren möchten, müssen Sie auch die currency-Option angeben. Wenn Sie Einheiten formatieren möchten, müssen Sie auch die unit-Option angeben.
Die Ausgabe sieht so aus:
| 'decimal' | '1,234,567.89' |
| 'percent' | '123,456,789%' |
| 'currency' | '$1,234,567.89' |
| 'unit' | '1,234,567.89 m' |
Die nächste Gruppe von Optionen spezifizieren alle, wie der numerische Teil aussehen soll. Zunächst möchten Sie möglicherweise extrem große Werte auf eine lesbarere Weise darstellen. Sie können die notation-Option auf "scientific" oder "engineering" setzen, die beide die 1.23e+6-Notation verwenden. Der Unterschied ist, dass letztere Vielfache von 3 für den Exponenten verwendet, um die Mantisse (den Teil vor dem e-Symbol) zwischen 1 und 1000 zu halten, während die Erstere für den Exponenten jede ganze Zahl verwenden kann und die Mantisse zwischen 1 und 10 hält. Sie können auch notation auf "compact" setzen, um eine für Menschen lesbarere Notation zu verwenden.
Die Ausgabe sieht so aus:
| 'scientific' | '1.2E4' |
| 'engineering' | '12E3' |
| 'compact-short' | '12K' |
| 'compact-long' | '12 tausend' |
Dann möchten Sie möglicherweise die Zahl runden (falls Sie notation angegeben haben, dann nur den Mantissenteil), sodass Sie keine Zahl anzeigen, die zu lang ist. Dies sind die Ziffernoptionen, die umfassen:
Die genaue Interaktion dieser Optionen ist recht komplex und es ist nicht lohnenswert, sie hier zu behandeln. Sie sollten die Ziffernoptionen nachlesen, um mehr Details zu erfahren. Dennoch ist das grundsätzliche Konzept einfach: Zunächst ermitteln wir die Anzahl der Dezimalstellen, die wir beibehalten möchten, und dann runden wir überzählige Dezimalstellen ab oder auf, abhängig vom Wert der letzten Ziffer.
Die Ausgabe sieht so aus:
| { minimumFractionDigits: 4, maximumFractionDigits: 4 } | '1,234.5679' |
| { minimumSignificantDigits: 4, maximumSignificantDigits: 4 } | '1,235' |
| { minimumFractionDigits: 0, maximumFractionDigits: 0, roundingMode: "floor" } | '1,234' |
| { minimumFractionDigits: 0, maximumFractionDigits: 0, roundingMode: "floor", roundingIncrement: 10 } | '1,230' |
Es gibt weitere Anpassungsoptionen. Beispielsweise können Sie die Optionen useGrouping und signDisplay verwenden, um anzupassen, ob und wie die Gruppentrennzeichen (wie "," in "1,234,567.89") und das Vorzeichen angezeigt werden sollen. Beachten Sie jedoch, dass die verwendeten Zeichen für Gruppentrennzeichen, Dezimaltrennpunkt und Vorzeichen lokalisierungsabhängig sind, sodass Sie sie nicht direkt anpassen können.
Neben format() gibt es eine zweite wichtige Methode, formatRange(), die einen Bereich von Zahlen formatiert. Sie nimmt zwei Zahlendarstellungen, formatiert jede einzeln, verbindet sie mit einem Bereichsseparator (wie der en-Dash), und entfernt gegebenenfalls doppelte Teile.
Sie haben möglicherweise bereits Code geschrieben, der dies tut:
Dieser Code ist nicht internationalisiert. In einigen Sprachen ist der Listentrenner kein Komma. In den meisten Sprachen (einschließlich Englisch) benötigen Sie eine Konjunktion vor dem letzten Element. Aber auch nur das manuelle Hinzufügen eines "und" macht es nicht korrekt für alle Englischsprecher, weil es die Debatte um Oxford-Kommas im Englischen gibt: "apple, banana, and cherry" vs. "apple, banana and cherry".
Das Intl.ListFormat-Objekt löst dieses Problem. Es nimmt ein Array von Strings und verbindet sie auf eine lokalisierungsabhängige Weise, sodass das Ergebnis eine Konjunktion (und), Disjunktion (oder) oder eine Liste von Einheiten repräsentiert.
Weitere Beispiele und Optionen finden Sie unter Intl.ListFormat().
Intl.RelativeTimeFormat formatiert einen Zeitunterschied. Das RelativeTimeFormat-Objekt nimmt relative Zeiten in Form von zwei Argumenten: eine Zahl (mit beliebigem Vorzeichen) und eine Zeitöffnung, wie "day", "hour", oder "minute".
Es erledigt mehrere Dinge gleichzeitig:
Weitere Beispiele und Optionen finden Sie unter Intl.RelativeTimeFormat().
Intl.DurationFormat bietet die Formatierung von Dauern, wie "3 hours, 4 minutes, 5 seconds". Es ist keine primitive Operation mit eigenem Formatierer: Es verwendet intern Intl.NumberFormat und Intl.ListFormat, um jede Dauereinheit zu formatieren, und fügt sie dann mit einem Listentrenner zusammen. Das DurationFormat-Objekt nimmt Dauern in der Form eines Temporal.Duration-Objekts oder eines einfachen Objekts mit denselben Eigenschaften an.
Abgesehen von der Anpassung des Zahlensystems, entscheidet die Dauernformatierungs-Option, ob jede Komponente angezeigt wird und wie lang sie sein sollen.
Weitere Beispiele und Optionen finden Sie unter Intl.DurationFormat().
Das Intl.Collator-Objekt ist nützlich zum Vergleichen und Sortieren von Strings. Es nimmt zwei Strings und gibt eine Zahl zurück, die ihre relative Ordnung angibt, auf die gleiche Weise wie das compareFn-Argument der Array.prototype.sort-Methode.
Es gibt viele Gründe, warum Sie keine JavaScript-Operatoren wie === oder > verwenden sollten, um benutzerorientierte Strings zu vergleichen:
Es gibt zwei unterschiedliche Anwendungsfälle für Kollation: Sortierung und Suche. Sortierung erfolgt, wenn Sie eine Liste von Strings haben und diese nach einer bestimmten Regel ordnen möchten. Suche erfolgt, wenn Sie eine Liste von Strings haben und einen String finden möchten, der einer Suchanfrage entspricht. Bei der Suche sollten Sie nur darauf achten, ob das Vergleichsergebnis Null (gleich) ist oder nicht, nicht auf das Vorzeichen des Ergebnisses.
Es gibt viele verschiedene Arten zu sortieren, sogar innerhalb derselben Locale. Beispielsweise gibt es im Deutschen zwei verschiedene Sortierreihenfolgen, Telefonbuch und Wörterbuch. Die Telefonbuchsortierung betont den Klang—als ob "ä", "ö" und so weiter auf "ae", "oe" und so weiter erweitert würden, bevor sie sortiert werden.
Einige deutsche Wörter konjugieren mit zusätzlichen Umlauten, sodass es in Wörterbüchern sinnvoll ist, die Umlaute zu ignorieren (außer beim Sortieren von Wörtern, die sich nur in Umlauten unterscheiden: schon vor schön).
Das Intl.PluralRules-Objekt ist nützlich, um die korrekte Pluralform eines Wortes auszuwählen. Es pluralisiert die Wörter nicht automatisch für Sie (zum Beispiel können Sie nicht "apple" übergeben und "apples" erwarten), aber es sagt Ihnen, welche Pluralform basierend auf einer Zahl verwendet werden soll. Sie tun dies möglicherweise bereits:
Aber dies ist schwer auf andere Sprachen zu verallgemeinern, insbesondere auf solche mit vielen Pluralformen. Sie können Intl.PluralRules für eine allgemeine Einführung in Pluralregeln einsehen. Hier demonstrieren wir einige gängige Anwendungsfälle.
Das Intl.Segmenter-Objekt ist nützlich, um einen String in Segmente zu teilen. Ohne Intl können Sie bereits einen String durch UTF-16 Code-Einheiten und Unicode Code-Punkte teilen:
Aber wie Sie sehen können, sind Unicode-Code-Punkte nicht dasselbe wie das, was menschliche Nutzer als diskrete Zeichen wahrnehmen. Dies geschieht oft bei Emojis, wo ein einzelnes Emoji durch mehrere Code-Punkte dargestellt werden kann. Wenn der Nutzer mit Text arbeitet, ist ein Graphem die kleinste Einheit von Text, die sie manipulieren können, wie löschen oder auswählen. Das Segmenter-Objekt ermöglicht die Segmentierung auf Graphemebene, was nützlich ist zum Zählen von Zeichen, Messen der Textbreite und mehr. Es nimmt einen String und gibt ein iterierbares Segmente-Objekt zurück, wobei jedes Element eine segment-Eigenschaft hat, die den Text des Segments repräsentiert.
Der Segmentierer kann auch eine höhere Segmentierung durchführen, einschließlich der Segmentierung auf Wort- und Satzebene. Diese Anwendungsfälle sind notwendigerweise sprachspezifisch. Beispielsweise ist das folgende eine sehr schlechte Implementierung der Wortzählung:
Es gibt mehrere Probleme damit: nicht alle Sprachen verwenden Leerzeichen, um Wörter zu trennen, nicht alle Leerzeichen trennen Wörter, und nicht alle Wörter werden durch Leerzeichen getrennt. Um dies zu lösen, verwenden Sie Segmenter mit granularity: "word". Das Ergebnis ist der Eingabestring, getrennt in Segmente von Wörtern und Nicht-Wörtern. Wenn Sie Wörter zählen, sollten Sie die Nicht-Wörter herausfiltern, indem Sie die isWordLike-Eigenschaft jedes Segments überprüfen.
Die Wortsegmentierung funktioniert auch bei zeichenbasierten Sprachen. Beispielsweise können im Chinesischen mehrere Zeichen ein einziges Wort darstellen, aber es gibt keinen Leerraum dazwischen. Der Segmentierer implementiert dasselbe Verhalten wie die eingebaute Wortsegmentierung des Browsers, die durch Doppelklicken auf ein Wort ausgelöst wird.
Die Satzsegmentierung ist ähnlich komplex. Beispielsweise gibt es im Englischen viele Satzzeichen, die das Ende eines Satzes markieren könnten (".", "!", "?", und so weiter).
Beachten Sie, dass der Segmentierer keine Zeichen entfernt. Er teilt einfach den String in Segmente, von denen jedes einen Satz darstellt. Sie können dann die Satzzeichen entfernen, wenn Sie möchten. Auch die aktuelle Implementierung des Segmentierers unterstützt keine Satzsegmentierung-Unterdrückungen (Verhinderung von Satzumbrüchen nach Punkten wie "Mr." oder "Approx."), aber es wird daran gearbeitet, dies zu unterstützen.
Nachdem so viele Optionen und Verhaltensweisen eingeführt wurden, fragen Sie sich möglicherweise, wie Sie diese dem Nutzer präsentieren können. Intl hat zwei nützliche APIs zum Aufbau von Benutzeroberflächen: Intl.supportedValuesOf() und Intl.DisplayNames.
Die Intl.supportedValuesOf()-Funktion gibt ein Array von unterstützten Werten für eine gegebene Option zurück. Beispielsweise können Sie dies verwenden, um eine Dropdown-Liste unterstützter Kalender zu füllen, aus der Benutzer auswählen können, um Daten anzuzeigen.
Diese Bezeichner sind jedoch oft nicht benutzerfreundlich. Beispielsweise möchten Sie möglicherweise die Kalender in der Sprache des Nutzers anzeigen oder sie unabgekürzt darstellen. Das Intl.DisplayNames-Objekt ist dafür nützlich. Es ist wie ein Formatierer, ist aber nicht schablonenbasiert. Stattdessen ist es eine direkte Zuordnung von sprachunabhängigen Bezeichnern zu lokalisierten Namen. Es unterstützt das Formatieren von Sprachen, Regionen, Schriften (die drei Unterfelder eines BCP 47 Sprach-Tags), Währung, Kalender und Datum-Zeit-Feldern.
Probieren Sie die untenstehende Demo aus:
Der Bauplan für ein besseres Internet.
Besuche die gemeinnützige Muttergesellschaft der Mozilla Corporation, die Mozilla Foundation.
Teile dieses Inhalts sind ©1998–2026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfügbar unter einer Creative-Commons-Lizenz.