Pregunta

Estoy usando MessageFormat (parte de la intl extensión) en PHP.La extensión de los usos de la UCI 4.6.1.

Sin embargo, el problema no es con PHP.

Me gustaría formato de un trozo de cuerda por tomar una decisión sobre el primer token {0}:

  • Cuando {0} es 0, el texto debe ser a
  • Cuando se 1, el texto debe ser b
  • Para todos los demás casos, el texto debe ser c

Entiendo que esto se podría hacer con plural, =0 para el 0 caso, pero a través de mis pruebas, no parece funcionar, lo más probable debido a los desplazamientos y personalizado plurales se introdujeron en 4.8.

Yo soy así, tratando de lograr que el uso de select:

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

Sin embargo, por alguna razón, el formateador de mensaje no pudo formato de la anterior y devuelve false (no podía formato).

¿Por qué es este el caso?Hay un problema con mi sintaxis?


Actualización rápida:Después de algo de investigación, parece que no puedo usar seleccionar para que coincida con los valores que comienzan con un número.Hay maneras de evitar esto?

Otra actualización:Actualizado a la UCI 49.1.2 y intl 3.0.0a2.Ahora puedo utilizar =0, =1, etc, pero esto ha dejado de funcionar (estaba trabajando anteriormente):

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

donde como funciona esto:

{0, plural, one{a} other{b}}
¿Fue útil?

Solución

Terminé de actualizar a la versión más reciente de intl y la UCI 49.1.2.

Sin embargo, una vez que se ha hecho, esto no iba a funcionar:

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

Pero esto funcionó:

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

Otros consejos

El select tipo de argumento es una cadena exacta coincidencia.Usted necesita para asegurarse de que están pasando un argumento de cadena de valor y, a continuación, tienen cláusulas de ese partido.Evite el uso de los plurales exacto para el caso de que coincidan, ya que cada localidad tiene sus propias reglas, por lo que one significa.

El siguiente debe darte lo que quieras, pero yo sé mucho más sobre el formato de la aplicación PHP.

MessageFormatter::formatMessage($locale,
  '{0, select, _0 {a} _1 {b} other {c}}',
  array( "_$value" ))
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top