¿Cómo uso el TranslateBehavior en CakePHP?
(2)
Para cualquiera que busque lo mismo, cakephp actualizó su documentación. Para Traducir Comportamiento, vaya aquí ..
No hay documentación en cakephp.org y no puedo encontrar una en google. Por favor, enlácenme documentación o suministre una!
El comportamiento de traducción es otra de las características muy útiles pero mal documentadas de CakePHP. Lo he implementado un par de veces con éxito razonable en sitios web multilingües a lo largo de las siguientes líneas.
En primer lugar, el comportamiento de traducción solo internacionalizará el contenido de la base de datos de su sitio. Si tiene más contenido estático, querrá ver la función de envoltorio __(''string'')
Cake y gettext
(aquí hay información útil sobre esto)
Suponiendo que hay contenidos que queremos traducir con la siguiente tabla db:
CREATE TABLE `contents` (
`id` int(11) unsigned NOT NULL auto_increment,
`title` varchar(255) default NULL,
`body` text,
PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
El modelo content.php tiene:
var $actsAs = array(''Translate'' => array(''title'' => ''titleTranslation'',
''body'' => ''bodyTranslation''
));
en su definición. Luego necesita agregar la tabla i18n a la base de datos de esta manera:
CREATE TABLE `i18n` (
`id` int(10) NOT NULL auto_increment,
`locale` varchar(6) NOT NULL,
`model` varchar(255) NOT NULL,
`foreign_key` int(10) NOT NULL,
`field` varchar(255) NOT NULL,
`content` mediumtext,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Luego, cuando guarde los datos en la base de datos de su controlador, configure la configuración regional en el idioma que desee (este ejemplo sería para el polaco):
$this->Content->locale = ''pol'';
$result = $this->Content->save($this->data);
Esto creará entradas en la tabla i18n para los campos de título y cuerpo para la configuración regional de pol. Finds buscará en función de la configuración regional actual configurada en el navegador del usuario, y devolverá una matriz como:
[Content]
[id]
[titleTranslation]
[bodyTranslation]
Usamos el excelente componente p28n para implementar una solución de cambio de idioma que funciona bastante bien con los comportamientos gettext y translate.
No es un sistema perfecto, ya que crea relaciones HABTM sobre la marcha, puede causar algunos problemas con otras relaciones que puede haber creado manualmente, pero si tiene cuidado, puede funcionar bien.