Qual é a diferença entre usar $ this-> t ('text') et ('text') em um plugin de bloco

7

Eu notei em muitos tutoriais para construir plugins de bloco,

$this->t('text')

é usado para criar texto traduzível, especialmente na função de formulário de bloco. No entanto, usando

t('text') 

não produz nenhum erro. Existe alguma diferença entre usar um desses? E se não houver, qual é a melhor prática?

Matt
fonte

Respostas:

6

Para ser exato em sua pergunta: não há diferença na implementação interna.

Mas como prática recomendada , você deve usar em $this->tvez do global tsempre que possível. Se você marcar a função, testá retornando um novo objeto TranslateableMarkup .

Se sua classe diz que $this->tnão está definido, você pode adicionar o StringTranslationTrait para adicionar o comportamento ou injetá-lo como uma dependência.

O uso dessa característica adicionará os métodos t () e formatPlural () à classe. Eles devem ser usados ​​para todas as seqüências traduzíveis, semelhante a como o código processual deve usar as funções globais t () e \ Drupal :: translation () -> formatPlural (). Isso permite que as ferramentas do extrator de strings encontrem strings traduzíveis.

Se a classe for capaz de injetar serviços do contêiner, ela deve injetar o serviço 'string_translation' e atribuí-lo a $ this-> stringTranslation.

Portanto, como regra de boas práticas, geralmente você não deseja misturar procedimentos no OOP, a menos que seja totalmente inevitável (por exemplo, funções nativas do PHP).

Kevin
fonte
4

A documentação para t () declara:

Quando possível, use o \Drupal\Core\StringTranslation\StringTranslationTrait::t(). Caso contrário, crie um novo \Drupal\Core\StringTranslation\TranslatableMarkupobjeto diretamente.

Ele não explica o motivo disso, mas se você olhar para o comentário na página de documentação , ele fornecerá um motivo para usar esse método de característica ou essa classe.

As classes podem ser testadas individualmente com o PHPUnit, que é executado sem o núcleo de inicialização, mas a t()função só está disponível quando o núcleo é inicializado.
Usando $this->t()e StringTranslationTraitpermitindo que a tradução seja zombada, para que a classe possa ser testada isoladamente com o PHPUnit.

kiamlaluno
fonte