Localización e internacionalización en cakephp 1.2

Uno de los agregados más importantes de cake 1.2 es el soporte para i18n y l10. Para activarla, cualquier controller que procese contenido localizado, debería usar la clase L10n que cake nos provee.

En mi caso, la aplicación completa usará localización, entonces agrego al principio de app_controller.php:

uses('L10n');
class AppController extends Controller {

Luego de esto, necesitamos crear archivos para manejar el texto localizado, cake maneja esto en el directorio APP/locale. Cada lenguaje tiene un conjunto de cadenas de texto con sus repectivas claves, o id. Cada lenguaje es un subdirectorio dentro de APP/locale con el código de tres caracteres correspondiente al lenguaje (ISO 639-2, ver lista).

Cada subdirectorio de lenguaje debe contener un archivo default.po dentro del directorio LC_MESSAGES con las cadenas y sus claves. Por ejemplo, mi .po para inglés es APP/locale/eng/LC_MESSAGES/default.po

Hay que tener en cuenta que cada clave debe ser única y debe tener un valor asociado.

Los archivos .po deber tener un encoding ISO-8859-1 y los strings no pueden tener más de 1014 caracteres y deben estar formados de la siguiente manera:

msgid "clave o id del texto"
msgstr "cadena asociada en el idioma  actual."

Luego te tener esto listo, debemos indicar a cake el lenguaje a utilizar. podemos hacer esto en el controller, mi método preferido: en app_controller.php

function beforeFilter(){
        $this->L10n = new L10n();
        $languages=array('es','en');
        $paramLang=strtok($_SERVER['HTTP_HOST'],'.');
        $lang = $this->Session->check('lang') ? $this->Session->read('lang'):'en';
        if(isset($paramLang) && in_array($paramLang,$languages) ){
            $lang = $paramLang;
            $this->Session->write('lang',$lang);
        }else{
            $this->Session->write('lang',$lang);
        }
        $this->L10n->get($lang);
        Configure::write('Config.language', $lang);
    }

me permite guardar el lenguaje en sesión, y cambiarlo con subdominios. Una vez elegido el método para guardar y cambiar el lenguaje actual, las líneas

        $this->L10n->get($lang);
        Configure::write(’Config.language’, $lang);

son las que indican a cake que debe usar el lenguaje especificado para imprimir las cadenas asociadas cuando usamos __().

AJAXed with AWP