Frage

ich benutze Nachrichtenformat (Teil der intl Erweiterung) in PHP.Die Erweiterung nutzt ICU 4.6.1.

Das Problem liegt jedoch nicht bei PHP.

Ich möchte ein Stück String formatieren, indem ich eine Entscheidung über das erste Token treffe {0}:

  • Wann {0} Ist 0, sollte der Text sein a
  • Wann ist es 1, sollte der Text sein b
  • In allen anderen Fällen sollte der Text sein c

Ich verstehe, dass das machbar wäre plural, =0 für die 0 Fall, aber meinen Tests zufolge scheint es nicht zu funktionieren, höchstwahrscheinlich weil Offsets und benutzerdefinierte Pluralformen in 4.8 eingeführt wurden.

Ich versuche daher, dies mithilfe von zu erreichen select:

{0, select, 0 {a} other {{0,plural,one{b}other{c}}}}

Aus irgendeinem Grund konnte der Nachrichtenformatierer die obige Nachricht jedoch nicht formatieren und kehrt zurück false (Konnte nicht formatiert werden).

Warum ist das so?Gibt es ein Problem mit meiner Syntax?


Schnelles Update:Nach einiger Recherche scheint es, dass ich select nicht verwenden kann, um Werte abzugleichen, die mit einer Zahl beginnen.Gibt es Möglichkeiten, dies zu umgehen?

Noch ein Update:Aktualisiert auf ICU 49.1.2 und intl 3.0.0a2.Ich kann es jetzt verwenden =0, =1, usw., aber das funktioniert nicht mehr (funktionierte zuvor):

{0}{0, plural, one{a} other{b}}

wo wie das funktioniert:

{0, plural, one{a} other{b}}
War es hilfreich?

Lösung

Am Ende habe ich auf die neueste Version von aktualisiert intl und Intensivstation 49.1.2.

Sobald dies jedoch erledigt war, würde dies nicht funktionieren:

{0}{0, plural, one{a} other{b}}

Aber das hat funktioniert:

{0, plural, =0{a} one{# b} other {# c}}

Andere Tipps

Der select Der Argumenttyp ist eine exakte Zeichenfolgenübereinstimmung.Sie müssen sicherstellen, dass Sie einen String-Argumentwert übergeben und dann über entsprechende Klauseln verfügen.Vermeiden Sie die Verwendung von Pluralformen für die exakte Zuordnung von Groß- und Kleinschreibung, da jedes Gebietsschema seine eigenen Regeln dafür hat one bedeutet.

Die folgende sollen Ich gebe Ihnen, was Sie wollen, aber ich weiß viel mehr über das Format als über die PHP-Implementierung.

MessageFormatter::formatMessage($locale,
  '{0, select, _0 {a} _1 {b} other {c}}',
  array( "_$value" ))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top