2013-02-17 75 views
0

我忙於用ZF1構建一個多語言網站。對於1件事,一切都很好,多語言部分結合zend導航。當我打開開發頁面的URL時,標準語言是英語(http://website.nl/en)。導航欄(基於zend導航)顯示如下所示:/ en/blog,/ en/events等。但是,當我將德語從英語更改爲荷蘭語時(http://website.nl/nl),導航欄stil shows/en/home,/ en /博客等Zend Navigation和Zend Locale

有人知道問題是什麼嗎?

Routingcode:

// Routing 
$front = Zend_Controller_Front::getInstance(); 

// Remove default router 
$router = $front->getRouter(); 
$router->removeDefaultRoutes(); 

// Add routers from config 
$config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/routes.xml'); 
    $router->addConfig($config, 'routes'); 

導航代碼:路由XML的

$this->bootstrap('layout'); 
    $this->bootstrap('view'); 
    $layout = $this->getResource('layout'); 
    $view = $layout->getView(); 

    // Set path to navigation.xmls 
    $config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml'); 

    // ACL 
    $acl = new Application_Model_Acl(); 

    // Get the identity of the user 
    $auth = Zend_Auth::getInstance()->getIdentity(); 

    $navigation = new Zend_Navigation($config); 
    $view->navigation($navigation) 
     ->setAcl($acl) 
     ->setRole($auth->role); 

部分

<cameloth type="Zend_Controller_Router_Route_Hostname"> 
     <route>websiteurl</route> 
     <defaults _layout="sitecameloth/layout" module="siteCameloth" /> 
     <chains> 
      <locale> 
       <route>:locale</route> 
       <defaults controller="index" locale="en" /> 
       <reqs locale="[a-z]{2,3}" /> 
       <chains> 
        <index> 
         <route></route> 
         <defaults _layout="sitecameloth/front" action="index" /> 
        </index> 

        <news> 
         <route>blog</route> 
         <defaults controller="news" /> 
         <chains> 
          <list> 
           <route>:page</route> 
           <defaults action="list" page="1" /> 
          </list> 
          <read> 
           <route>:id/:title</route> 
           <defaults action="read" /> 
          </read> 
         </chains> 
        </news> 

區域設置插件

public function preDispatch(Zend_Controller_Request_Abstract $request) 
    { 
    $lang = $request->getParam('locale', ''); 

    if ($lang !== 'en' && $lang !== 'nl') 
     $request->setParam('locale', 'en'); 

    $lang = $request->getParam('locale'); 

    if ($lang == 'en') 
     $locale = 'en_US'; 
    else 
     $locale = 'nl_NL'; 

    $zl = new Zend_Locale(); 
    $zl->setLocale($locale); 
    Zend_Registry::set('Zend_Locale', $zl); 

    $translate = new Zend_Translate('gettext', APPLICATION_PATH . '/languages/' . $locale . '.mo'); 
    Zend_Registry::set('Zend_Translate', $translate); 
    } 
+0

你知道你在*錯* Zend框架;) – markus 2013-02-18 15:09:45

回答

0

你應該告訴哪個區域通過翻譯使用路由器,我這樣做是在引導:

protected function _initRewrite() 
    { 
     $translator = new Zend_Translate('array', APPLICATION_PATH . '/language/url-fr.php', 'fr'); 
     $translator->addTranslation(APPLICATION_PATH . '/language/url-en.php', 'en'); 

     // Set the current locale for the translator 
     $locale = Zend_Registry::get('Zend_Locale'); 
     $translator->setLocale($locale); 

     // Set it as default translator for routes 
     Zend_Controller_Router_Route::setDefaultTranslator($translator); 

     $front_controller = Zend_Controller_Front::getInstance(); 
     $router = $front_controller->getRouter(); 

     $config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini', APPLICATION_ENV); 
     $router->addConfig($config, 'routes'); 

     $router->addDefaultRoutes(); 
    } 

更多信息在我的答案在這裏:Zend Navigation setting language parameter for route doesnt reflect in app