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');
localisation
Brendan Falkowski
fonte
fonte
Respostas:
Apenas teorizando, mas quando você chama
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.
Mas você pode ter certeza de que essa linha de código usará as
Mage_Catalog
informações de localização.fonte
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 useMage::helper('mymodule')->__()
fonte
Mage_Checkout::My Cart
sintaxe. E por isso é importante que o módulo é utilizado para traduçãoBasicamente, 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 oMage_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 chamadoNamespace_Module_Block_Breadcrumbs
?Se
$this
foi usado, o módulo usado para tradução seriaNamespace_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:
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.fonte
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.fonte