Nos módulos principais e, às vezes, nos modelos, vejo as classes auxiliares sendo usadas para tradução:
Mage::helper('someModule')->__('translate me');
Por que isso é preferível a:
$this->__('translate me');
Nos módulos principais e, às vezes, nos modelos, vejo as classes auxiliares sendo usadas para tradução:
Mage::helper('someModule')->__('translate me');
Por que isso é preferível a:
$this->__('translate me');
Respostas:
Apenas teorizando, mas quando você chama
$this->__('Foo')
em um modelo, qual arquivo de tradução CSV do módulo o Magento usará para traduzir o Foo?
Nem sempre é claro qual assistente de tradução do módulo o Magento chamará para traduzir a string / chave. Como o Magento permite que você use a mesma chave em módulos diferentes para strings diferentes, geralmente é importante saber quais dados de tradução do módulo você está usando. De fato, se um modelo for usado em vários módulos, o uso $this->__()
poderá ser "considerado prejudicial", pois retornaria valores diferentes, dependendo do contexto do bloco no qual o sistema de layout usou o modelo.
Meu palpite é que os auxiliares de conveniência foram adicionados com antecedência, mas os desenvolvedores que criaram os modelos rapidamente iniciam a instanciação de ajuda, para que soubessem qual arquivo de tradução do módulo traduziria uma string e esse padrão se espalhou para o teste da estrutura. Essa linha de código, por si só, é ambígua.
$this->__('Foo');
Mas você pode ter certeza de que essa linha de código usará as Mage_Catalog
informações de localização.
Mage::helper('catalog')->__('Foo')
Porque você deseja usar um módulo explícito.
If you use $this->__()
in a block context, the module of the block is used for translation. So if you want to use a special module, then you have to use Mage::helper('mymodule')->__()
Mage_Checkout::My Cart
sintaxe. E por isso é importante que o módulo é utilizado para tradução
Basicamente, vou dizer a mesma coisa que os outros caras disseram.
Se você usar, Mage::helper(...)
verifique se um auxiliar específico é usado para tradução.
Por exemplo, vamos pegar o Mage_Adminhtml_Block_Catalog_Product_Grid
bloco.
Para os cabeçalhos das colunas não é o seguinte: 'header'=> Mage::helper('catalog')->__('Name'),
. se ao invés do auxiliar de catálogo $this->__
tivesse sido usado, o texto teria sido traduzido usando o Mage_Adminhtml
módulo.
Mas este é um caso em que a lógica por trás do uso de ajudantes nomeados faz sentido.
Eu só queria mostrar um caso em que o uso, em $this->__('..')
vez da abordagem auxiliar, pode levar a problemas. Eu falo por experiência própria.
Vamos pegar o bloco Mage_Catalog_Block_Breadcrumbs
. Existe uma linha parecida com esta: Mage::helper('catalog')->__('Home')
.
Você pensaria que está no catalog
módulo para poder usá-lo $this
. Mas e se você substituir o bloco pelo seu chamado Namespace_Module_Block_Breadcrumbs
?
Se $this
foi usado, o módulo usado para tradução seria Namespace_Module
e você provavelmente não quer isso.
Existem duas opções para evitar isso. Ou usando um auxiliar nomeado, como já acontece na maioria dos blocos principais.
Ou você, como desenvolvedor, pode adicionar isso na classe de bloco:
public function getModuleName() {
return 'Mage_Catalog';
}
Então, você tem certeza de que todos os textos usados $this->__
em seu bloco (modelos que também incluem o bloco) serão traduzidos usando o módulo de catálogo.
Uma razão (que é apenas a minha percepção): quando você usa o helper, é mais específico sobre o arquivo de tradução, como se Mage::helper('catalog')
ele encontrasse a frase no arquivo de catálogo, enquanto que quando você o usa $this
pesquisaria aleatoriamente todos os arquivos de tradução. Isso é o que eu acho.