Usando selecione com messageformat
-
12-12-2019 - |
Pergunta
Eu estou usando MessageFormat (parte do intl
extensão) em PHP.A extensão usa UTI 4.6.1.
No entanto, o problema não é com o PHP.
Eu gostaria de formato de um pedaço de barbante, fazendo uma decisão sobre o primeiro token {0}
:
- Quando
{0}
é0
, o texto deve sera
- Quando é
1
, o texto deve serb
- Para todos os outros casos, o texto deve ser
c
Eu entendo que isso poderia ser feito com plural
, =0
para o 0
caso, mas, através de meus testes, ele parece não funcionar, provavelmente porque os deslocamentos e personalizado plurais foram introduzidas em 4.8.
Eu sou assim, tentando realizar o que usar select
:
{0, select, 0 {a} other {{0,plural,one{b}other{c}}}}
No entanto, por algum motivo, o formatador de mensagens não pôde formato acima e retorna false
(não podia formato).
Por que é assim?Há um problema com o meu sintaxe?
Atualização rápida:Após algumas perguntas, parece que eu não posso usar selecione os valores que começar com um número.Há alguma maneira de contornar isso?
Outra atualização:Atualizado para a UTI 49.1.2 e intl
3.0.0a2.Agora eu posso usar =0
, =1
, etc , etc, etc, mas este parou de funcionar (estava trabalhando anteriormente):
{0}{0, plural, one{a} other{b}}
onde, como isso funciona:
{0, plural, one{a} other{b}}
Solução
Eu acabei de atualizar para a versão mais recente do intl
e UTI 49.1.2.
No entanto, uma vez que foi feito, isso não iria funcionar:
{0}{0, plural, one{a} other{b}}
Mas isso funcionou:
{0, plural, =0{a} one{# b} other {# c}}
Outras dicas
O select
tipo de argumento é uma seqüência de caracteres exata correspondência.Você precisará certificar-se de que você está passando um argumento de cadeia de valor e, em seguida, possuem cláusulas que corresponder.Evitar o uso de plurais para o caso exato de correspondência, uma vez que cada localidade possui suas próprias regras para o que one
significa.
A seguir deve dar o que você quer, mas eu sei muito mais sobre o formato que o PHP implementação.
MessageFormatter::formatMessage($locale,
'{0, select, _0 {a} _1 {b} other {c}}',
array( "_$value" ))