Question

j'utilise Format du message (partie de la intl extension) en PHP.L'extension utilise ICU 4.6.1.

Cependant, le problème ne vient pas de PHP.

Je voudrais formater un morceau de chaîne en prenant une décision sur le premier jeton {0}:

  • Quand {0} est 0, le texte doit être a
  • Lorsqu'il est 1, le texte doit être b
  • Pour tous les autres cas, le texte doit être c

Je comprends que cela pourrait être fait avec plural, =0 pour le 0 cas, mais d'après mes tests, cela ne semble pas fonctionner, probablement parce que les décalages et les pluriels personnalisés ont été introduits dans la version 4.8.

J'essaie donc d'accomplir cela en utilisant select:

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

Cependant, pour une raison quelconque, le formateur de message n'a pas pu formater ce qui précède et renvoie false (impossible de formater).

pourquoi est-ce le cas?Y a-t-il un problème avec ma syntaxe ?


Mise à jour rapide :Après quelques recherches, il semble que je ne puisse pas utiliser select pour faire correspondre les valeurs commençant par un nombre.Existe-t-il des moyens de contourner ce problème ?

Autre mise à jour :Mise à jour vers ICU 49.1.2 et intl 3.0.0a2.Je peux maintenant utiliser =0, =1, etc., mais cela a cessé de fonctionner (fonctionnait auparavant) :

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

où comme cela fonctionne:

{0, plural, one{a} other{b}}
Était-ce utile?

La solution

J'ai fini par mettre à jour vers la dernière version de intl et USI 49.1.2.

Cependant, une fois cela fait, cela ne fonctionnerait plus :

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

Mais cela a fonctionné :

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

Autres conseils

Le select le type d'argument est une correspondance exacte de chaîne.Vous devez vous assurer que vous transmettez une valeur d'argument de chaîne, puis avoir des clauses qui correspondent.Évitez d'utiliser des pluriels pour une correspondance exacte de la casse, car chaque langue a ses propres règles sur ce que one moyens.

Ce qui suit devrait vous donne ce que vous voulez, mais j'en sais beaucoup plus sur le format que sur l'implémentation PHP.

MessageFormatter::formatMessage($locale,
  '{0, select, _0 {a} _1 {b} other {c}}',
  array( "_$value" ))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top