Quelle est la différence entre {{| t}} et {% trans%}?

11

Je remarque que le support de Drupal 8 {% trans %}qui, selon la documentation Symfony (l' extension i18n ), ajoute le support gettext à Twig.

{{ |t }}, pour autant que je sache, est la manière traditionnelle d'ajouter des chaînes traduisibles dans les modèles Drupal. Selon la documentation , t()traduit une chaîne dans la langue actuelle ou une langue donnée.

Les deux prennent en charge un site Web multilingue.

  • Quelles sont les différences entre ces extensions?
  • Quand devrais-je en utiliser un par-dessus l'autre?
itsdarrylnorris
la source
J'utilise trans pour les pluriels. Sinon simple t. Par exemple, «{% trans%} élément {% plural count%} éléments {% endtrans%}»

Réponses:

21

Le {{ |t }}filtre et les {% trans %} ... {% endtrans %}blocs, lorsqu'ils sont utilisés dans le contexte du fichier modèle Twig dans Drupal, font partie du système de localisation Drupal. Et la traduction des chaînes traitées avec l'une ou l'autre est gérée de la même manière et via localize.drupal.org. Pour les chaînes de texte simples, elles peuvent être utilisées de manière interchangeable, mais le %transbloc possède quelques fonctionnalités supplémentaires utiles pour les chaînes complexes.

La différence est que le tfiltre ne permet que des chaînes simples, tandis que l'utilisation d'un %transbloc permet l'utilisation d'espaces réservés dynamiques dans la chaîne. Tout comme l'utilisation de la t()fonction php .

Voici quelques exemples:

Traduction de chaîne simple via un tfiltre:

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

Traduction de chaîne avec espace réservé:

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

Les {{ var|passthrough }}espaces réservés sont échappés par défaut, mais peuvent également être laissés sans échappement ou formatés en tant qu'espaces réservés {{ var|placeholder }}. Cela équivaut à utiliser @string,! String et% string dans la fonction t () respectivement.

Vous pouvez également utiliser des %transblocs afin de formater plusieurs chaînes.

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

Pour les chaînes simples , il n'y a vraiment pas de règles sur le moment où vous devez utiliser |tcontre %trans. Je recommanderais donc d'utiliser ce qui est le plus facile à lire dans votre modèle. D'après mon expérience, l'utilisation du |tfiltre fonctionne bien pour les chaînes courtes, tandis que le %transbloc est plus facile pour les chaînes de texte plus longues.

Plus d'informations sur l'utilisation peuvent être trouvées ici: https://www.drupal.org/node/2357633 et ici https://www.drupal.org/developing/api/8/localization

eojthebrave
la source
Super explication. Je vous remercie! L'explication sur le faire manquait gravement (à mon humble avis). Votre explication plus approfondie avec des exemples m'a beaucoup aidé et m'a donné quelques idées. Surtout l'exemple de chaîne plurielle. C'est assez lisse!
Tyler Youngblood