Nei moduli core e talvolta nei template, vedo le classi di supporto utilizzate per la traduzione:
Mage::helper('someModule')->__('translate me');
Perché è preferibile:
$this->__('translate me');
Nei moduli core e talvolta nei template, vedo le classi di supporto utilizzate per la traduzione:
Mage::helper('someModule')->__('translate me');
Perché è preferibile:
$this->__('translate me');
Risposte:
Teorizzando, ma quando chiami
$this->__('Foo')
in un modello, quale file di traduzione CSV del modulo verrà utilizzato da Magento per tradurre Foo?
Non è sempre chiaro quale assistente di traduzione del modulo Magento alla fine chiamerà per tradurre la stringa / chiave. Poiché Magento ti consente di utilizzare la stessa chiave in moduli diversi per stringhe diverse, è spesso importante sapere quali dati di traduzione del modulo stai utilizzando. In effetti, se un modello viene utilizzato su più moduli, l'utilizzo $this->__()
potrebbe essere "considerato dannoso", poiché restituirebbe valori diversi a seconda del contesto del blocco in cui il sistema di layout ha utilizzato il modello.
La mia ipotesi è che gli helper di convenienza siano stati aggiunti in anticipo, ma gli sviluppatori che hanno creato rapidamente i modelli avviando un'istanza aiutano a sapere quale file di traduzione del modulo avrebbe tradotto una stringa e quel modello si è diffuso al test del framework. Questa riga di codice, di per sé, è ambigua.
$this->__('Foo');
Ma puoi essere sicuro che questa riga di codice utilizzerà le Mage_Catalog
informazioni sulla localizzazione.
Mage::helper('catalog')->__('Foo')
Perché vuoi usare un modulo esplicito.
Se si utilizza $this->__()
in un contesto di blocco, il modulo del blocco viene utilizzato per la traduzione. Quindi, se si desidera utilizzare un modulo speciale, è necessario utilizzareMage::helper('mymodule')->__()
Mage_Checkout::My Cart
sintassi. E quindi è importante quale modulo viene utilizzato per la traduzione
Fondamentalmente sto per dire la stessa cosa degli altri ragazzi.
Se lo usi Mage::helper(...)
, assicurati di utilizzare un aiuto specifico per la traduzione.
Ad esempio prendiamo il Mage_Adminhtml_Block_Catalog_Product_Grid
blocco.
Per le intestazioni delle colonne c'è questo: 'header'=> Mage::helper('catalog')->__('Name'),
. se invece dell'helper del catalogo $this->__
fosse stato utilizzato, il testo sarebbe stato tradotto utilizzando il Mage_Adminhtml
modulo.
Ma questo è un caso in cui la logica alla base dell'utilizzo di helper nominati ha senso.
Volevo solo mostrare un caso in cui l'utilizzo $this->__('..')
anziché l'approccio di supporto può portare a problemi. Parlo per esperienza.
Prendiamo il blocco Mage_Catalog_Block_Breadcrumbs
. C'è una linea che assomiglia a questo: Mage::helper('catalog')->__('Home')
.
Penseresti di essere nel catalog
modulo in modo da poter usare $this
invece. Ma cosa succede se si ignora il blocco dal blocco chiamato Namespace_Module_Block_Breadcrumbs
?
Se $this
fosse usato, lo sarebbe il modulo usato per la traduzione Namespace_Module
e probabilmente non lo vorrai.
Ci sono due opzioni per evitarlo. O usando un helper chiamato come già accade per la maggior parte dei blocchi core.
Oppure tu come sviluppatore puoi aggiungere questo nella classe di blocco:
public function getModuleName() {
return 'Mage_Catalog';
}
Quindi sei sicuro che tutti i testi che usano $this->__
dal tuo blocco (inclusi anche i modelli che rendono incluso il blocco) saranno tradotti usando il modulo del catalogo.