2010-06-02 4 views
2

Je développe une application multilingue. Dans le bootstrap il y a la configuration des routes:Zend_Controller_Router_Route: Impossible de trouver un traducteur

protected function _initRoutes() { 

    $this->bootstrap('frontController'); 
    $router = $this->frontController->getRouter(); 

    // PAGES ROUTE 
    $page = new Zend_Controller_Router_Route(
     ':language/:ident', 
     array(
      'module' => 'core', 
     'controller' => 'pagine', 
     'action' => 'view'    
     ), 
     array(
      'ident' => '[a-zA-Z-_0-9]{3,}', 
     'language' => '[a-z]{2}' 
     ) 
    ); 

    $registrazione = new Zend_Controller_Router_Route(
     ':language/@utenti/@registrati', 
     array(
      'module' => 'core', 
'controller' => 'utenti', 
'action' => 'registrazione' 
     ), 
     array(
     'language' => '[a-z]{2}' 
     ) 
    ); 

    $router->addRoute('page', $page); 
    $router->addRoute('registrazione', $registrazione); 

    ..... 

}

Je ne peux pas régler le traducteur par défaut Zend_Controller_Router_Route (pour les segments traduits) parce que je ne sais pas le paramètre de langue dans l'objet de la demande. je reçois le paramètre de langue au cours de la Plugin multilingue "routeShutdown":

class Activa_Controller_Plugin_Multilanguage extends Zend_Controller_Plugin_Abstract { 

public function routeShutdown(Zend_Controller_Request_Abstract $request) { 
    $language = $request->getParam("language"); 
    $locale = new Zend_Locale($language); 

    $translate = new Zend_Translate('array', APPLICATION_PATH.'/config/lang/'.$language.'.php', $locale); 

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

    Zend_Controller_Router_Route::setDefaultTranslator($translate); 
    //////////////////////// 
    // BUT NOW IS TOO LATE 
    //////////////////////// 
} 

Quand je tape l'adresse "http://servername/it/utenti/registrati" i get l'exception avec le message "Impossible de trouver un traducteur".

Comment puis-je résoudre ce problème? Antonio (Italie)

+1

que dire de changer lorsque votre plugin se déclenche. Donc, au lieu de routeShutdown, vous faites routeStartup. – Ballsacian1

Répondre

1

Créez un plugin routeStartup(), dans lequel vous analysez l'URI de la requête pour les paramètres régionaux/langue, par exemple avec un simple Regex. Ensuite, créez et définissez le traducteur par défaut dans le routeur.

+0

_sa solution pour moi_ –