Traducción del tipo de Productos en Magento

Seguimos de traducciones (si, estuve con éste tema durante estos días).

Una de las palabras (conjunto de valores en realidad) que no parecían responder a los archivos de configuración, eran los del tipo de Productos.

Nos encontramos con éstos valores cada vez que queremos dar de alta un nuevo Producto.

Como pueden ver, por más que tengo el locale configurado en es_AR, obtengo éste resultado.

Tipo de Producto sin aplicar la traducción

Después de controlar los archivos de traducción y de pegarle un par de vueltas al codigo, apareció el culpable.

Los formularios que utilizan el combo, obtienen los valores de la clase Mage_Catalog_Model_Product_Type.

Para acceder a esos datos, invocan al método getOptionArray().

El código original de éste método es:

static public function getOptionArray()
{
    $options = array();
    foreach(self::getTypes() as $typeId => $type) {
        $options[$typeId] = $type['label'];
    }
    return $options;
}

Dado que el objetivo del post no es explicar el funcionamiento total de la clase, vamos a concentrarnos en nuestro problema: lograr que se traduzcan los tipos de Productos.

Lo que hace el método, es obtener todos los tipos de Producto posible, y generar un array que será el devuelto.

Si prestan atención, dentro del foreach, se está agregando el label (etiqueta) que se asocia a cada uno de los valores del array.

El problema está justamente en ese punto. Al momento de asignar el label, no se lo está traduciendo, de manera que sin importar que Locale tengamos seleccionado, siempre lo veremos en inglés. La solución a esto, es forzar el uso de la traducción.

Si aplicamos el cambio, el método nos quedaría de la siguiente forma.

static public function getOptionArray()
{
    $options = array();
    foreach(self::getTypes() as $typeId => $type) {
        $options[$typeId] = Mage::helper('catalog')->__($type['label']);
    }
    return $options;
}

El cambio ha sido implementar el Helper que invoca a la función de traducción.

Ahora si, sólo tenemos que actualizar nuestra página y ya va a funcionar como correspondería.

Traducción del Tipo de Productos en Magento

Lamentablemente, al momento de actualizar el código (con lo que será el lanzamiento de la versión 1.1.7), vamos a tener que revisar la nueva versión de la clase, para evitar perder nuestra funcionalidad.

Update: hace unas horas se me dio por sumar este tema al Bug Tracker de Magento, y caramba, me lo aceptaron. 😀

Como es necesario estar registrado para ver los bugs, dejo captura.

Bug 8324 de Magento