¿Cuál es la diferencia entre {{| t}} y {% trans%}?

11

Noté que el soporte de Drupal 8 {% trans %}que, de acuerdo con la documentación de Symfony ( The i18n Extension ), agrega soporte de gettext a Twig.

{{ |t }}, que yo sepa, es la forma tradicional de agregar cadenas traducibles a las plantillas de Drupal. Según la documentación , t()traduce una cadena al idioma actual o a un idioma determinado.

Ambos admiten sitios web multilingües.

  • ¿Cuáles son las diferencias entre esas extensiones?
  • ¿Cuándo debo usar uno sobre el otro?
itsdarrylnorris
fuente
Yo uso trans para plurales. De lo contrario, simple t. Por ejemplo, "{% trans%} item {% plural count%} items {% endtrans%}"

Respuestas:

21

Tanto el {{ |t }}filtro como los {% trans %} ... {% endtrans %}bloques, cuando se usan en el contexto del archivo de plantilla Twig en Drupal, son parte del sistema de localización de Drupal. Y la traducción de cadenas procesadas con cualquiera de las dos se maneja de la misma manera y a través de localize.drupal.org. Para cadenas de texto simples se pueden usar indistintamente, sin embargo, el %transbloque tiene algunas características útiles adicionales para cadenas complejas.

La diferencia es que el tfiltro solo permite cadenas simples, mientras que el uso de un %transbloque permite el uso de marcadores de posición dinámicos en la cadena. Muy parecido a usar la t()función php .

Aquí hay algunos ejemplos:

Traducción de cadena simple a través del tfiltro:

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

Traducción de cadenas con marcador de posición:

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

Los {{ var|passthrough }}marcadores de posición se escapan de forma predeterminada, pero también se pueden dejar sin escapes o formatear como un marcador de posición {{ var|placeholder }}. Esto es equivalente a usar @string,! String y% string en la función t () respectivamente.

También puede usar %transbloques para formatear cadenas plurales.

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

Para las cadenas simples en realidad no hay reglas acerca de cuándo se debe utilizar |tvs %trans. Por lo tanto, recomendaría usar lo que sea más fácil de leer en su plantilla. En mi experiencia, usar el |tfiltro funciona bien para cadenas cortas, mientras que el %transbloque es más fácil para cadenas de texto más largas.

Puede encontrar más información sobre el uso aquí: https://www.drupal.org/node/2357633 y aquí https://www.drupal.org/developing/api/8/localization

eojthebrave
fuente
Impresionante explicación. ¡Gracias! La explicación sobre do era severamente deficiente (en mi humilde opinión). Su explicación más exhaustiva con ejemplos me ayudó mucho y me dio un par de ideas. Especialmente el ejemplo de cadena plural. Eso es muy hábil!
Tyler Youngblood