Nachrichtensyntax
Diese Seite wurde von PageTurner AI übersetzt (Beta). Nicht offiziell vom Projekt unterstützt. Fehler gefunden? Problem melden →
Wenn Sie Text übersetzen, benötigen Sie eine Möglichkeit für Ihre Übersetzer, die Feinheiten von Rechtschreibung, Grammatik und Konjugation auszudrücken, die jeder Sprache eigen sind. Wir verwenden die ICU Message-Syntax, die auch in Java und PHP eingesetzt wird.
Die Bibliothek intl-messageformat verarbeitet die Nachricht und Eingabedaten und erzeugt eine entsprechend formatierte Zeichenkette. Diese Funktion ist in allen von uns bereitgestellten Integrationen enthalten.
Die folgenden Abschnitte beschreiben die ICU Message-Syntax und zeigen, wie Sie diese Funktionen der FormatJS-Bibliotheken nutzen:
Grundprinzipien
Die einfachste Transformation für eine Nachricht ist ein Literalstring.
Hello everyone
Alle anderen Transformationen erfolgen durch Ersetzungen namens "Argumente". Sie werden in geschweifte Klammern ({ und }) gesetzt und beziehen sich auf einen Wert in den Eingabedaten.
Einfaches Argument
Sie können ein {key}-Argument verwenden, um einen Wert in die Nachricht einzufügen. Der Schlüssel wird in den Eingabedaten gesucht, und die Zeichenkette wird mit seinem Wert interpoliert.
Formatiertes Argument
Werte können auch basierend auf ihrem Typ formatiert werden. Dazu verwenden Sie ein {key, type, format}-Argument.
Die Bestandteile des Arguments sind:
-
key: Gibt an, wo in den Eingabedaten die Daten zu finden sind -
type: Optional, definiert wie der Wert interpretiert wird (siehe unten) -
format: Optional, eine weitere Verfeinerung der Darstellung für diesen Datentyp
number-Typ
Dieser Typ dient zur sprachsensitiven Formatierung von Zahlen. Er versteht folgende Werte für das optionale format-Element des Arguments:
Intern nutzt er die Intl.NumberFormat API. Sie können benutzerdefinierte Werte für das format-Element definieren, die an den Intl.NumberFormat-Konstruktor übergeben werden.
Das Einbetten der Zahlenformatierung bietet Übersetzern wertvollen Kontext. Wir unterstützen auch ICU Number Skeletons mit derselben Syntax:
Weitere Informationen finden Sie hier.
Für präzise Kontrolle über Dezimalstellen verwenden Sie die Symbole # und 0 für Bruchpräzision, die die Anzahl anzuzeigender Nachkommastellen festlegen:
Beachten Sie, dass das Symbol # keine nachgestellten Nullen darstellt, wie in diesem Beispiel:
Um nachgestellte Nullen anzuzeigen, verwenden Sie das Symbol 0:
Weitere Details finden Sie unter Fraction Precision.
date-Typ
Dieser Typ dient zur sprachsensitiven Formatierung von Datumswerten. Er versteht folgende Werte für das optionale Format-Element des Arguments:
-
short: Kürzestmögliche Datumsdarstellung -
medium: Datumsformat mit kurzer textueller Monatsdarstellung -
long: Datumsformat mit ausführlicher textueller Monatsdarstellung -
full: Detaillierteste Datumsdarstellung
Intern wird die Intl.DateTimeFormat-API verwendet. Benutzerdefinierte Werte für das Format-Element werden direkt an den Intl.DateTimeFormat-Konstruktor übergeben.
time-Typ
Dieser Typ dient zur sprachsensitiven Formatierung von Uhrzeiten. Er versteht folgende Werte für das optionale Format-Element des Arguments:
-
shortwird verwendet, um Zeiten mit Stunden und Minuten zu formatieren -
mediumwird verwendet, um Zeiten mit Stunden, Minuten und Sekunden zu formatieren -
longwird verwendet, um Zeiten mit Stunden, Minuten, Sekunden und Zeitzone zu formatieren -
fullentspricht long
Intern wird die Intl.DateTimeFormat-API verwendet. Benutzerdefinierte Werte für das Format-Element werden direkt an den Intl.DateTimeFormat-Konstruktor übergeben.
Unterstützte DateTime-Skelette
Ähnlich wie beim Typ number unterstützen wir auch ICU DateTime-Skelette. ICU bietet vielfältige Muster zur Anpassung von Datums- und Zeitformaten. Allerdings sind nicht alle über die ECMA402 Intl API verfügbar. Daher unterstützen wir nur folgende Muster:
| Symbol | Meaning | Notes |
|---|---|---|
| G | Era designator | |
| y | year | |
| M | month in year | |
| L | stand-alone month in year | |
| d | day in month | |
| E | day of week | |
| e | local day of week | e..eee is not supported |
| c | stand-alone local day of week | c..ccc is not supported |
| a | AM/PM marker | |
| h | Hour [1-12] | |
| H | Hour [0-23] | |
| K | Hour [0-11] | |
| k | Hour [1-24] | |
| m | Minute | |
| s | Second | |
| z | Time Zone |
{select}-Format
Das Format {key, select, matches} wählt eine Ausgabe basierend auf dem Abgleich eines Werts mit mehreren Optionen (vergleichbar mit switch-Anweisungen in Programmiersprachen). Der Schlüssel wird in den Eingabedaten gesucht. Der entsprechende Wert wird mit einem der matches abgeglichen, woraufhin die zugehörige Ausgabe zurückgegeben wird. Das key-Argument muss Unicode Pattern_Syntax folgen. matches ist eine durch Leerzeichen getrennte Liste von Übereinstimmungen.
Das Format einer Übereinstimmung ist match {output} (vergleichbar mit case bei switch). match ist ein Literalwert. Bei Gleichheit mit dem Wert für key wird der zugehörige output verwendet.
Output ist selbst eine Nachricht, kann also ein Literalstring sein oder weitere verschachtelte Argumente enthalten.
Die Übereinstimmung other ist speziell und wird verwendet, wenn keine andere passt (vergleichbar mit default bei switch).
other ist laut icu4j-Implementierung erforderlich. Wir werfen einen Fehler, wenn select ohne other verwendet wird.
Hier ein Beispiel mit verschachtelten Argumenten:
{plural}-Format
Das Format {key, plural, matches} wählt eine Ausgabe basierend auf den Pluralregeln der aktuellen Locale. Es ähnelt dem {select}-Format, erwartet jedoch einen numerischen Wert, der einer Pluralkategorie zugeordnet wird.
Der Match ist ein Literalwert und wird einer dieser Pluralkategorien zugeordnet. Nicht alle Sprachen verwenden alle Pluralkategorien.
-
zero: Für Sprachen mit spezieller Grammatik für null Elemente (z.B. Arabisch, Lettisch). -
one: Für Sprachen mit spezieller Grammatik für ein Element (Singular). Wird nicht von allen Sprachen verwendet (z.B. nicht im Chinesischen oder Japanischen) -
two: Für Sprachen mit spezieller Grammatik für zwei Elemente (Dual; z.B. Arabisch, Walisisch) -
few: Für Sprachen mit spezieller Grammatik für kleine Mengen (Paucal; je nach Sprache für 2-4, 3-10 oder komplexere Bereiche) -
many: Für größere Mengen (z.B. Arabisch, Polnisch, Russisch). -
other: Standardkategorie, wenn keine andere passt (z.B. "Plural" bei Sprachen mit einfacher Singular/Plural-Unterscheidung). -
=value: Matcht exakt einen numerischen Wert (unabhängig von Pluralkategorien).
Verwenden Sie nicht =1 anstelle von one. one bedeutet nicht immer die Zahl 1, sondern steht für singular, was in bestimmten Sprachen auf mehr als nur die Zahl 1 zutreffen kann. Einige Sprachen betrachten alle Zahlen, die auf 1 enden (wie 1, 11, 111), als singular.
other ist laut icu4j-Implementierung zwingend erforderlich. Ohne other wird bei Verwendung von plural ein Fehler ausgelöst.
Im output des Matches können Sie das Sonderzeichen # als Platzhalter für den numerischen Wert verwenden. Es wird dann so formatiert, als wäre {key, number} angegeben. Dies ist der bevorzugte Stil.
{selectordinal}-Format
{key, selectordinal, matches} wird verwendet, um die Ausgabe basierend auf den ordinalen Pluralregeln (1., 2., 3. usw.) der aktuellen Sprache zu steuern. Es funktioniert ähnlich wie das {plural}-Format oben, bildet den Wert jedoch auf eine ordinale Pluralkategorie ab.
Der Match ist ein Literalwert und wird einer dieser Pluralkategorien zugeordnet. Nicht alle Sprachen verwenden alle Pluralkategorien.
-
zero: Für Sprachen mit spezieller Grammatik für null Elemente (z.B. Arabisch, Lettisch). -
one: Für Sprachen mit spezieller Grammatik für ein Element (nicht alle Sprachen, z.B. nicht Chinesisch/Japanisch). -
two: Für Sprachen mit spezieller Grammatik für zwei Elemente (z.B. Arabisch, Walisisch). -
few: Für kleine Mengen (regelabhängig: 2-4, 3-10 oder komplexere Muster). -
many: Für größere Mengen (z.B. Arabisch, Polnisch, Russisch). -
other: Standardkategorie, wenn keine andere passt (z.B. "Plural" bei Sprachen mit einfacher Singular/Plural-Unterscheidung). -
=value: Matcht exakt einen numerischen Wert (unabhängig von Pluralkategorien).
other ist laut icu4j-Implementierung zwingend erforderlich. Ohne other wird bei Verwendung von selectordinal ein Fehler ausgelöst.
Im output des Matches kann das #-Sonderzeichen als Platzhalter für den numerischen Wert verwendet werden. Es wird dann so formatiert, als wäre {key, number} angegeben.
Rich-Text-Formatierung
Wir unterstützen auch eingebettete Rich-Text-Formatierung über Tags. So müssen Sätze nicht in Fragmente zerlegt werden.
HINWEIS: Dies sind keine XML/HTML-Tags!
Systeme mit Rich-Text-Formatierung müssen diese Platzhalter extern verarbeiten. Tags werden im Output übergeben und können entweder nachbearbeitet oder via defaultRichTextElements-Konfiguration behandelt werden.
Maskierung/Escaping
Das ASCII-Apostroph ' (U+0027) maskiert Syntaxzeichen im Text – analog zu ICUs Quoting/Escaping.
Zwei aufeinanderfolgende ASCII-Apostrophe ergeben einen ASCII-Apostroph, ähnlich wie %% in printf ein einzelnes % ergibt.
Wir empfehlen jedoch für menschenlesbare Zeichenketten die Verwendung des typografischen Apostrophs ’ (U+2019) und reservieren das ASCII-Apostroph '
(U+0027) ausschließlich für die ICU-Nachrichtensyntax.