En los módulos principales y, a veces, en las plantillas, veo que se usan clases auxiliares para la traducción:
Mage::helper('someModule')->__('translate me');
¿Por qué es preferible esto a:
$this->__('translate me');
localisation
Brendan Falkowski
fuente
fuente

Respuestas:
Solo teorizando, pero cuando llamas
en una plantilla, ¿qué archivo de traducción CSV de módulo utilizará Magento para traducir Foo?
No siempre está claro qué módulo de ayuda de traducción Magento llamará en última instancia para traducir la cadena / clave. Dado que Magento le permite usar la misma clave en diferentes módulos para diferentes cadenas, a menudo es importante saber qué datos de traducción de módulo está utilizando. De hecho, si se usa una plantilla en varios módulos, el uso
$this->__()podría "considerarse dañino", ya que devolvería valores diferentes dependiendo del contexto de bloque en el que el sistema de diseño utilizó la plantilla.Supongo que los ayudantes de conveniencia se agregaron por adelantado, pero los desarrolladores que construyen las plantillas rápidamente comenzando a crear instancias ayudan para que sepan qué archivo de traducción del módulo traduciría una cadena, y ese patrón se extendió a la prueba del marco. Esta línea de código, en sí misma, es ambigua.
Pero puede estar seguro de que esta línea de código utilizará la
Mage_Cataloginformación de localización.fuente
Porque quieres usar un módulo explícito.
Si lo usa
$this->__()en un contexto de bloque, el módulo del bloque se usa para la traducción. Entonces, si desea usar un módulo especial, entonces debe usarMage::helper('mymodule')->__()fuente
Mage_Checkout::My Cartsintaxis. Por lo tanto, es importante qué módulo se utiliza para la traducciónBásicamente voy a decir lo mismo que dijeron los otros chicos.
Si lo usa
Mage::helper(...), asegúrese de que se use un ayudante específico para la traducción.Por ejemplo, tomemos el
Mage_Adminhtml_Block_Catalog_Product_Gridbloque.Para los encabezados de columna no es lo siguiente:
'header'=> Mage::helper('catalog')->__('Name'),. si en lugar del asistente de catálogo$this->__se hubiera utilizado, el texto se habría traducido utilizando elMage_Adminhtmlmódulo.Pero este es un caso donde la lógica detrás del uso de ayudantes con nombre tiene sentido.
Solo quería mostrar un caso en el que el uso en
$this->__('..')lugar del enfoque auxiliar puede generar problemas. Yo hablo por experiencia.Tomemos el bloque
Mage_Catalog_Block_Breadcrumbs. Hay una línea que tiene este aspecto:Mage::helper('catalog')->__('Home').Pensaría que está en el
catalogmódulo para poder usarlo$thisen su lugar. Pero, ¿qué pasa si anula el bloque por su bloque llamadoNamespace_Module_Block_Breadcrumbs?Si
$thisse usó, entonces el módulo utilizado para la traducción seríaNamespace_Moduley probablemente no lo desee.Hay dos opciones para evitar esto. Ya sea usando un ayudante con nombre como ya sucede para la mayoría de los bloques principales.
O usted como desarrollador puede agregar esto en la clase de bloque:
Entonces está seguro de que todos los textos que se usan
$this->__desde su bloque (las plantillas que también incluyen el bloque) se traducirán usando el módulo de catálogo.fuente
Una razón (que es solo mi percepción), cuando usa helper, es más específico sobre el archivo de traducción,
Mage::helper('catalog')ya que encontrará la oración en el archivo de catálogo, mientras que cuando la use$thisbuscará aleatoriamente en todos los archivos de traducción. Eso es lo que pienso.fuente