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');
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');
Respuestas:
Solo teorizando, pero cuando llamas
$this->__('Foo')
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.
$this->__('Foo');
Pero puede estar seguro de que esta línea de código utilizará la Mage_Catalog
información de localización.
Mage::helper('catalog')->__('Foo')
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')->__()
Mage_Checkout::My Cart
sintaxis. Por lo tanto, es importante qué módulo se utiliza para la traducción
Bá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 el Mage_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 llamado Namespace_Module_Block_Breadcrumbs
?
Si $this
se usó, entonces el módulo utilizado para la traducción sería Namespace_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:
public function getModuleName() {
return 'Mage_Catalog';
}
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.
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.