web-dev-qa-db-fra.com

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

Je remarque que Drupal 8 supporte {% 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 fonction documentation , t() traduit une chaîne dans la langue actuelle ou dans 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?
11
itsdarrylnorris

Le filtre {{ |t }} Et les blocs {% trans %} ... {% endtrans %}, Lorsqu'ils sont utilisés dans le contexte de Twig fichier modèle dans Drupal, font partie du Drupal système de localisation. 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, cependant le bloc %trans a quelques fonctionnalités supplémentaires utiles pour les chaînes complexes.

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

Voici quelques exemples:

Traduction de chaîne simple via le filtre t:

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

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

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

Les espaces réservés sont échappés par défaut, mais peuvent également être laissés sans échappement {{ var|passthrough }} 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 blocs %trans 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 aucune règle sur le moment où vous devez utiliser |t Contre %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 filtre |t Fonctionne bien pour les chaînes courtes, tandis que le bloc %trans 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/23576 et ici https://www.drupal.org/developing/api/8/localisation

21
eojthebrave