2010-06-02 44 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(意大利)

+1

当你的插件触发时怎么样。因此,而不是routeShutdown你做routeStartup。 – Ballsacian1 2010-06-02 23:20:51

回答

1

创建一个routeStartup()插件,在其中扫描语言环境/语言的请求URI,例如使用简单的Regex。然后在路由器中创建并设置默认翻译器。

+0

适用于我的解决方案 – 2012-02-13 08:18:44