2010-06-02 5 views
2

Я разрабатываю многоязычное приложение. В загрузчике есть настройка маршрутов:Zend_Controller_Router_Route: Не удалось найти переводчика

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); 

    ..... 

}

Я не могу установить транслятор по умолчанию Zend_Controller_Router_Route (для переведенных сегментов), потому что я не знаю параметр языка в объекте запроса. я получаю параметр языка в многоязыковой плагин во время «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 
    //////////////////////// 
} 

Когда я введите адрес «http://servername/it/utenti/registrati» я получаю исключение с сообщением «Не удалось найти переводчика».

Как я могу это исправить? Antonio (Italy)

+1

Что касается изменения при плагине плагинов. Поэтому вместо routeShutdown вы выполняете routeStartup. – Ballsacian1

ответ

1

Создайте плагин routeStartup(), в котором вы просматриваете URI запроса для языка/языка, например, с помощью простого Regex. Затем создайте и установите переводчик по умолчанию в маршрутизаторе.

+0

_its решение для me_ –