Como traduzir com pluralização no Twig?
-
29-10-2019 - |
Pergunta
Como posso traduzir o texto codificado atual com a chave do arquivo de idioma (messages.en.xliff
)?
Eu tentei usar o
{% trans %} translation_key{% endtrans %}
sem sucesso.Symfony retorna este erro
Uma mensagem deve ser um texto simples em 'ProjectEventsBundle:Default:show_event.html.twig'
500 Erro interno do servidor - Twig_Error_Syntax
{% transchoice count %}
{0} The current hardcoded text|{1} is attending|{2} are attending|]2,Inf] and %count% - 2 others are attending
{% endtranschoice %}
Desde já, obrigado.
Solução 4
Eu encontrei uma solução.Está um pouco sujo, mas está funcionando.Se você encontrar uma maneira melhor, não se esqueça de postar.
{% set noattendee %}{% trans %} no.attendee {% endtrans %}{% endset %}
{% set oneattendee %}{% trans %} one.attendee {% endtrans %}{% endset %}
{% set twoattendees %}{% trans %} two.attendees {% endtrans %}{% endset %}
{% set treeattendees %}{% trans with {'%people%': people} %} tree.attendees {% endtrans %}{% endset %}
{% set manyattendees %}{% trans with {'%people%': people} %} many.attendees {% endtrans %}{% endset %}
{% transchoice count with {
'%noattendee%': noattendee,
'%oneattendee%': oneattendee,
'%twoattendees%': twoattendees,
'%treeattendees%': treeattendees,
'%manyattendees%': manyattendees}
%}
{0} %noattendee%|{1} %oneattendee%|{2} %twoattendees%|{3} %treeattendees%|]3,Inf] %manyattendees%
{% endtranschoice %}
Outras dicas
Eu usaria uma solução como esta:
mensagens.en.xliff:
<trans-unit id="1">
<source>some.translation.key</source>
<target>{0} no.attendee|{1} one attendee|{2} two attendees|{3} three attendees|]3,Inf] many attendees</target>
</trans-unit>
Modelo de galho:
{{ 'some.translation.key'|transchoice(count) }}
Se precisar colocar alguns argumentos, você deve passá-los como segundo argumento.
Aqui está o protótipo do filtro:
public function transchoice($message, $count, array $arguments = array(), $domain = "messages", $locale = null)
Este assunto é bastante antigo, mas sugiro que você faça algo assim:
Em suas mensagens.LOCALE.yml
you.translaction.key: "{1}1 Comment|]1,Inf]%count% Comments"
No seu modelo de galho
{% set count = 2 %}
{% transchoice count with {'%count%': count} %}you.translaction.key{% endtranschoice %}
Saúde,
Simão
Encontrado na Documentação Symfony :
Symfony2 fornece tags Twig especializadas (trans e transchoice) para ajudar na tradução de mensagens de blocos de texto estáticos:
{% trans %}Hello %name%{% endtrans %}
{% transchoice count %}
{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples
{% endtranschoice %}
A tag de transchoice obtém automaticamente a variável% count% do contexto atual e a passa para o tradutor.Este mecanismo só funciona quando você usa um marcador seguindo o padrão% var%.