miércoles, 26 de junio de 2013

¿Como traducir nombres de meses en CakePhp?

Buscando en la web la solución a esta interrogante solo encontré dudas y ninguna solución certera.

Así que, me puse a investigar en el código y descubrí lo siguiente:

La clave se encuentra en el archivo \cake\libs\view\helpers\FormHelper.php, en el método: _generateOptions, que es el lugar en donde se encuentran los nombres de los meses en ingles; Allí podemos observar que los nombres de los mese pasan por la función __d() como se muestra a continuación:

$data['01'] = __d('cake', 'January');
...
$data['12'] = __d('cake', 'December');

Estudiando la función function __d($domain, $msg, $args = null), que se encuentra en: \cake\basics.php observamos que el primer parámetro es $domain, que en el caso de los meses es igual a 'cake', por lo tanto y para hacer el cuento corto, nos indica que debemos crear un archivo llamado cake.po en app/Locale/spa/LC_MESSAGES con la traducción de los meses con sigue:

msgid "January"
msgstr "Enero"

.....

msgid "December"
msgstr "Diciembre"


Recomiendo usar un editor como el que se encuentra en: http://www.poedit.net/ para evitar errores, al menos al principio. 

Por último debemos colocar en el core.php de la aplicación una línea como la que sigue:

    Configure::write('Config.language', 'spa');

Nótese que el valor 'spa' debe coincidir con app/Locale/spa/LC_MESSAGES.

Nota: La versión usada de cakePhp es la 2.3.6.

Espero sus comentarios, aportes y preguntas.