Zum Hauptinhalt springen

Nachrichtensyntax

Inoffizielle Beta-Übersetzung

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:

  • short wird verwendet, um Zeiten mit Stunden und Minuten zu formatieren

  • medium wird verwendet, um Zeiten mit Stunden, Minuten und Sekunden zu formatieren

  • long wird verwendet, um Zeiten mit Stunden, Minuten, Sekunden und Zeitzone zu formatieren

  • full entspricht 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:

SymbolMeaningNotes
GEra designator
yyear
Mmonth in year
Lstand-alone month in year
dday in month
Eday of week
elocal day of weeke..eee is not supported
cstand-alone local day of weekc..ccc is not supported
aAM/PM marker
hHour [1-12]
HHour [0-23]
KHour [0-11]
kHour [1-24]
mMinute
sSecond
zTime 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).

Gefahr

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).

Info

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.

Gefahr

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).

Gefahr

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!

Benutzerdefiniertes Verhalten

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.