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_Catalog
informació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 Cart
sintaxis. 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_Grid
bloque.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_Adminhtml
mó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
catalog
módulo para poder usarlo$this
en su lugar. Pero, ¿qué pasa si anula el bloque por su bloque llamadoNamespace_Module_Block_Breadcrumbs
?Si
$this
se usó, entonces el módulo utilizado para la traducción seríaNamespace_Module
y 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$this
buscará aleatoriamente en todos los archivos de traducción. Eso es lo que pienso.fuente