El uso de select con messageformat
-
12-12-2019 - |
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}
es0
, el texto debe sera
- Cuando se
1
, el texto debe serb
- 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}}
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" ))