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 ser a
  • Quando é 1, o texto deve ser b
  • 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}}
Foi útil?

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" ))
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top