Ver Mensaje Individual
  #10 (permalink)  
Antiguo 25/07/2011, 14:12
kiko's
 
Fecha de Ingreso: julio-2005
Mensajes: 310
Antigüedad: 18 años, 9 meses
Puntos: 36
Respuesta: Traducir breadcrumb

Hola

Os explico como está montado el tinglado, aunque creo que será complicado.

Para traducir contenido escribo lo siguiente en el view:
[..]
$this->translate('ejemplo1');
$this->translate('ejemplo2');
[..]

El plugin encargado de la traducción es el siguiente:
Código PHP:
class Application_Plugin_ControllerLanguage extends Zend_Controller_Plugin_Abstract {

    public function 
routeShutdown(Zend_Controller_Request_Abstract $request) {

        
$locale = new Zend_Locale();

        
$options = array('scan' => Zend_Translate::LOCALE_FILENAME);
        
$translate = new Zend_Translate('gettext'APPLICATION_PATH '/languages/''auto'$options);
        
$cookieData $this->getRequest()->getCookie('idioma');

        
$requestParams $this->getRequest()->getParams();
        
$language = (isset($requestParams['language'])) ? $requestParams['language'] : false;

        if (!empty(
$cookieData) && $language == false) {
            
$language $cookieData;
        } else {

            if (
$language == false)
                
$language 'ca';

            
setcookie('idioma'$languagetime() + (60 60 24 30 12), '/'WEBSITE_DOMAIN);
        }
        if (!
$translate->isAvailable($language)) {
            throw new 
Zend_Controller_Action_Exception('This page dont exist'404);
        } else {
            
$locale->setLocale($language);
            
$translate->setLocale($locale);

            
setcookie('lang'$locale->getLanguage(), null'/');

            
Zend_Registry::set('Zend_Locale'$locale);
            
Zend_Registry::set('Zend_Translate'$translate);

            
//Activamos la traducción para los formularios
            
$formTranslate = new Zend_Translate('array',
                            
APPLICATION_PATH '/languages/',
                            
'auto',
                            array(
'scan' => Zend_Translate::LOCALE_DIRECTORY)
            );
            
Zend_Form::setDefaultTranslator($formTranslate);
        }
    }


Además en el Bootstrap tengo:
$langRoute = new Zend_Controller_Router_Route_Hostname(
':language.dominio.com'
);

Si escribo http://es.dominio.com el contenido se traduce al español y se pongo http://ca.dominio.com el contenido se traduce al catalán. El contenido de las traducciones está almacenado en:
/application/languages/ca_ES/LC_MESSAGES/ca.mo
/application/languages/es_ES/LC_MESSAGES/es.mo

Para crear el breadcrumb seguí las instrucciones del enlace que comento en mi primer tema.

Supongo que debo añadir algún código en el archivo Application_Plugin_ControllerLanguage como hice para traducir los formularios, pero no se me ocurre qué.

Creo que no se me olvida nada más.