Qual è la differenza tra l'utilizzo di $ this-> t ('text') e t ('text') in un plug-in a blocchi


7

Ho notato in molti tutorial per costruire plug-in a blocchi,

$this->t('text')

viene utilizzato per creare testo traducibile, in particolare nella funzione di blocco. Comunque usando

t('text') 

non produce errori. C'è qualche differenza tra l'utilizzo di uno di questi? E se non c'è, quali sono le migliori pratiche?


Risposte:


6

Per essere precisi sulla tua domanda: non c'è differenza nell'implementazione interna.

Ma come best practice , dovresti usare al $this->tposto del globale tovunque possibile. Se si controlla la funzione, tviene restituito un nuovo oggetto TranslateableMarkup .

Se la tua classe dice che $this->tnon è definita, puoi aggiungere StringTranslationTrait per aggiungere il comportamento o iniettarlo come dipendenza.

L'uso di questa caratteristica aggiungerà i metodi t () e formatPlural () alla classe. Questi devono essere usati per ogni stringa traducibile, in modo simile al modo in cui il codice procedurale deve usare le funzioni globali t () e \ Drupal :: translation () -> formatPlural (). Ciò consente agli strumenti di estrazione di stringhe di trovare stringhe traducibili.

Se la classe è in grado di iniettare servizi dal contenitore, dovrebbe iniettare il servizio 'string_translation' e assegnarlo a $ this-> stringTranslation.

Quindi, come regola delle migliori pratiche, in genere non si desidera mescolare procedurale all'interno di OOP a meno che non sia inevitabile (ad esempio funzioni native di PHP).


4

La documentazione per t () afferma:

Quando possibile, utilizzare il \Drupal\Core\StringTranslation\StringTranslationTrait::t(). Altrimenti crea \Drupal\Core\StringTranslation\TranslatableMarkupdirettamente un nuovo oggetto.

Non spiega il motivo di ciò, ma se guardi il commento nella pagina della documentazione , ti darà un motivo per usare quel metodo tratto o quella classe.

Le classi possono essere testate singolarmente con PHPUnit, che funziona senza core bootstrap, ma la t()funzione è disponibile solo quando core è bootstrap.
L'uso $this->t()e la StringTranslationTraitderisione della traduzione consentono di testare la classe in modo isolato con PHPUnit.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.