Qual é a diferença entre {{| t}} e {% trans%}?

11

Percebo que o suporte ao Drupal 8 {% trans %}que, de acordo com a documentação do Symfony ( a extensão i18n ), adiciona suporte ao getig no Twig.

{{ |t }}, até onde eu sei, é a maneira herdada de adicionar seqüências traduzíveis aos modelos do Drupal. De acordo com a documentação , t()converte uma string para o idioma atual ou para um determinado idioma.

Ambos suportam site multilíngue.

  • Quais são as diferenças entre essas extensões?
  • Quando devo usar um sobre o outro?
itsdarrylnorris
fonte
Eu uso trans para plurais. Caso contrário, simples t. Por exemplo "{% trans%} item {% plural count%} itens {% endtrans%}"

Respostas:

20

O {{ |t }}filtro e os {% trans %} ... {% endtrans %}blocos, quando usados ​​no contexto do arquivo de modelo Twig no Drupal, fazem parte do sistema de localização do Drupal. E a tradução de strings processadas com qualquer uma delas é realizada da mesma maneira e via localize.drupal.org. Para cadeias de texto simples, elas podem ser usadas de forma intercambiável, no entanto, o %transbloco possui alguns recursos úteis adicionais para cadeias de caracteres complexas.

A diferença é que o tfiltro permite apenas cadeias simples, enquanto o uso de um %transbloco permite o uso de espaços reservados dinâmicos na cadeia. Muito parecido com o uso da t()função php .

Aqui estão alguns exemplos:

Tradução simples de strings via tfiltro:

{{ 'Hello Stack Exchange!'|t }}

Tradução de string com espaço reservado:

{% trans %}Hello {{ user.name }}, today's date is {{ date|placeholder }}.{% endtrans %}

Os espaços reservados são escapados por padrão, mas também podem ser deixados sem escape {{ var|passthrough }}ou formatados como espaços reservados {{ var|placeholder }}. Isso é equivalente a usar @string,! String e% string na função t (), respectivamente.

Você também pode usar %transblocos para formatar seqüências de caracteres plurais.

{% trans %}
  There is 1 comment.
{% plural count %}
  There are {{ count }} comments.
{% endtrans %}

Para strings simples realmente não há regras sobre quando você deve usar |tvs. %trans. Portanto, eu recomendaria usar o que for mais fácil de ler em seu modelo. Na minha experiência, o uso do |tfiltro funciona bem para cadeias curtas, enquanto o %transbloco é mais fácil para cadeias longas de texto.

Mais informações sobre o uso podem ser encontradas aqui: https://www.drupal.org/node/2357633 e aqui https://www.drupal.org/developing/api/8/localization

eojthebrave
fonte
Explicação impressionante. Obrigado! A explicação sobre o que faltava seriamente (IMHO). Sua explicação mais completa com exemplos me ajudou muito e me deu algumas idéias. Especialmente o exemplo de cadeia plural. Isso é bem liso!
Tyler Youngblood