Quelle est la différence entre l'utilisation de $ this-> t ('text') et t ('text') dans un plugin de bloc

7

J'ai remarqué dans de nombreux tutoriels pour la construction de plugins de blocs,

$this->t('text')

est utilisé pour créer du texte traduisible, en particulier dans la fonction de forme de bloc. Cependant en utilisant

t('text') 

ne produit aucune erreur. Y a-t-il une différence entre l'utilisation de l'un ou l'autre? Et s'il n'y en a pas, quelle est la meilleure pratique?

Mat
la source

Réponses:

6

Pour être exact sur votre question: il n'y a pas de différence dans la mise en œuvre interne.

Mais comme meilleure pratique , vous devriez utiliser $this->tau lieu du global tdans la mesure du possible. Si vous cochez la fonction, trenvoie un nouvel objet TranslateableMarkup .

Si votre classe indique qu'il $this->tn'est pas défini, vous pouvez ajouter le StringTranslationTrait pour ajouter le comportement ou l'injecter en tant que dépendance.

L'utilisation de ce trait ajoutera les méthodes t () et formatPlural () à la classe. Ceux-ci doivent être utilisés pour chaque chaîne traduisible, de la même manière que le code procédural doit utiliser les fonctions globales t () et \ Drupal :: translation () -> formatPlural (). Cela permet aux outils d'extraction de chaînes de trouver des chaînes traduisibles.

Si la classe est capable d'injecter des services à partir du conteneur, elle doit injecter le service 'string_translation' et l'affecter à $ this-> stringTranslation.

Donc, en règle générale, vous ne voulez généralement pas mélanger les procédures dans la POO, sauf si cela est complètement inévitable (par exemple, les fonctions PHP natives).

Kevin
la source
4

La documentation de t () indique:

Si possible, utilisez le \Drupal\Core\StringTranslation\StringTranslationTrait::t(). Sinon, créez \Drupal\Core\StringTranslation\TranslatableMarkupdirectement un nouvel objet.

Cela n'explique pas la raison de cela, mais si vous regardez le commentaire sur la page de documentation , cela vous donnera une raison d'utiliser cette méthode de trait, ou cette classe.

Les classes peuvent être testées individuellement avec PHPUnit, qui s'exécute sans bootstrapping core, mais la t()fonction n'est disponible que lorsque core est bootstrappé.
L'utilisation $this->t()et StringTranslationTraitpermet de se moquer de la traduction, afin que la classe puisse être testée de manière isolée avec PHPUnit.

kiamlaluno
la source