La clase Zend_Translate dota a nuestros proyectos de forma nativa del soporte multiidioma, es decir, que componentes como Zend_View o Zend_Form son compatibles con esta internacionalización.
El primer paso a dar es determinar que formato tendrán nuestros diccionarios. La clase Zend_Adapter es la encargada de alimentar a Zend_Translate de los términos traducidos. Zend_Translate_Adapter es similar a los componentes de acceso a bases de datos como Zend_Db_Table y ofrecen diversos formatos de entrada:
- Array: Codificación de los mensajes en código PHP dentro de nuestro proyecto.
- CSV: texto separado por comas.
- GetText: Ficheros de traducción *.mo.
- Ini: Ficheros tradicionales *.ini.
Para más información sobre los diferentes formatos de entrada consultar la documentación de Zend_Translate_Adapters.
En nuestro ejemplo usaremos GetText, para ello es muy recomendable el uso del programa poedit para la generación de los diccionarios.
Para empezar crearemos una carpeta llamada languages en la raíz de application la cual será el destino del repositorio de diccionarios. Dentro crearemos dos ficheros (para empezar) para los idiomas inglés y castellano llamados dict-en.po y dict-es.po.
Contenido del fichero application/languages/dict-en.po:
"Project-Id-Version: CDocCMS" "POT-Creation-Date:" "PO-Revision-Date:" "Last-Translator: Carles <carlesuc@gmail.com>" "Language-Team:" "MIME-Version: 1.0" "Content-Type: text/plain; charset=iso-8859-1" "Content-Transfer-Encoding: 8bit" "Language: en" "X-Generator: Poedit 1.6.4" #: Diccionario Inglés msgid "Powered by the Zend Framework" msgstr "Powered by the Zend Framework"
Contenido del fichero application/languages/dict-es.po:
"Project-Id-Version: CDocCMS" "POT-Creation-Date:" "PO-Revision-Date:" "Last-Translator: Carles <carlesuc@gmail.com>" "Language-Team:" "MIME-Version: 1.0" "Content-Type: text/plain; charset=iso-8859-1" "Content-Transfer-Encoding: 8bit" "Language: es" "X-Generator: Poedit 1.6.4" #: Diccionario Castellano msgid "Powered by the Zend Framework" msgstr "Programado en Zend Framework"
Con la utilidad poedit compilaremos dichos ficheros para generar nuestros diccionarios dict-en.mo y dict-es.mo.
Ahora incluiremos los diccionarios en nuestro fichero application.ini para que sean incluidos como recursos.
Incluiremos las siguientes líneas en el fichero application/configs/application.ini:
resources.translate.adapter = Gettext resources.translate.default.locale = "es_ES" resources.translate.default.file = APPLICATION_PATH "/languages/dict-es.mo" resources.translate.translation.en = APPLICATION_PATH "/languages/dict-en.mo" resources.translate.translation.es = APPLICATION_PATH "/languages/dict-es.mo"
El siguiente paso es cargar el recurso de traducción en nuestro proyecto. Para ello crearemos un directorio donde ubicaremos nuestros recursos con la siguiente estructura:
/ library / CMS / Application / Resource
Crearemos un fichero de traducción llamado Translate.php. En este fichero crearemos una clase llamada CMS_Aplication_Resource_Translate que deriva de Zend_Application_Resource_ResourceAbstract.
El sistema de traducción necesita registrar la clase Zend_Translate, la cual previamente hemos de informar de que idiomas serán los soportados por nuestra aplicación. Para ello del fichero de configuración iremos iterando por los diferentes elementos resources.translate.translation.xx que existan, y los iremos incluyendo a la clase Zend_Translate.
El contenido del fichero library/CMS/Application/Resource/Translate.php es:
<?php class CMS_Application_Resource_Translate extends Zend_Application_Resource_ResourceAbstract { public function init () { $options = $this->getOptions(); $adapter = $options['adapter']; // Diccionario por defecto $defaultTranslation = $options['default']['file']; // Idioma por defecto $defaultLocale = $options['default']['locale']; $translate = new Zend_Translate($adapter, $defaultTranslation, $defaultLocale); // Iteramos entre los diferentes diccionarios y los vamos incluyendo foreach ($options['translation'] as $locale => $translation) { $translate->addTranslation($translation, $locale); } Zend_Registry::set('Zend_Translate', $translate); return $translate; } }
Es necesario incluir en nuestro fichero de configuración la carga de los recuros de traducción, para ello debemos incluir la siguiente línea en el fichero application/configs/application.ini:
pluginPaths.CMS_Application_Resource = APPLICATION_PATH "/../library/CMS/Application/Resource"
Para ver el efecto de la traducción editamos nuestro fichero layout.phtml e incluimos la sentencia $this->translate.
Contenido del fichero application/layouts/scripts/layout.phtml:
<?php echo $this->doctype (); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <?php $this->loadSkin ( $this->skin ); echo $this->headMeta (); echo $this->headTitle (); echo $this->headScript (); echo $this->headLink (); ?> </head> <body> <div id="container"> <div id="header"> <h1>Zend Framework CMS</h1> </div> <div id="navigation"> <?php echo $this->layout()->nav;?> </div> <div id="content-container"> <div id="content"> <?php echo $this->layout()->content?> </div> <div id="aside"> <?php echo $this->layout()->subNav;?> </div> <div id="footer"> <em><?php echo $this->translate('Powered by the Zend Framework');?></em> </div> </div> </div> </body> </html>
No hay comentarios:
Publicar un comentario