Drupal twig, distintas formas de traducir.

Después de buscar, una vez más, la forma de resolver una traducción en el sistema de plantillas de Drupal 8, se me ocurrió que estaría bien tener siempre una chuleta a mano con las diferentes maneras con las que podemos hacer una traducción en twig. Empecemos.

La más conocida y simple, aplicamos el filtro |t a la cadena de texto:

    {{ 'Hello World!'|t }}

También podemos utilizar el filtro |trans, pero este es más útil cuando lo usamos como bloque:

    {% trans %}Hello World!{% endtrans %}

Es evidente que esta forma utiliza más código para realizar lo mismo que la anterior, así que el modo bloque se suele usar cuando necesitamos incluir html o variables junto con la cadena de texto:

    {% trans %}Hello World! {{ date }}{% endtrans %}

Y, sobre todo, lo utilizamos cuando queremos traducir un texto que puede tener forma plural:

    {% trans %}

         Hello World!

    {% plural count %}

        Hello {{ count }} Worlds!

    {% endtrans %}

Y una variante más que nos permite trans es utilizar contextos, con los que podemos traducir una misma cadena de texto de dos formas diferentes, en dos situaciones diferentes:

    {% trans with {'context': 'home', 'langcode': 'es'} %}

        Hello World!

    {% endtrans %}

    {% trans with {'context': 'node', 'langcode': 'es'} %}

        Hello World!

    {% endtrans %}

Podemos también guardar la traducción que nos proporciona el filtro |t en una variable:

    {% set my_text = 'Hello World!'|t %}

    {{ my_text }}

Y esta misma fórmula la podríamos usar en formato bloque si queremos añadir algo más que la cadena de texto:

    {% set my_text_html %}

        {{ 'Hello World!'|t }} <strong>{{date}}</strong>

    {% endset %}

    {{ my_text_html }}

Como ya vimos en un post anterior, este formato puede ser útil cuando añadimos un enlace en twig en el que queremos que el texto tenga html.

Aunque si sólo necesitamos traducir una cadena de texto para un enlace, la pondremos directamente en el enlace:

    {{ link('Hello World!'|t, 'internal:/', {'class':['hello-world__link']}) }}

Espero que este resumen sea de ayuda para quienes tienen que trabajar a diario con las traducciones en Twig.