2013-02-17 8 views
0

Я занят созданием многоязычного сайта с ZF1. Все хорошо работает для 1 вещи, многоязыковой части в сочетании с навигацией zend. Когда я открываю URL-адрес страницы разработки, стандартным языком является английский (http://website.nl/en). Навигационная панель (основанная на zend-навигации) показывает такие URL:/en/blog,/en/events и т. Д. Но когда я меняю язык с английского на голландский (http://website.nl/nl), панель навигации показывает/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'); 

Navigation Код:

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

Часть XML маршрутизации

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

Locale плагин

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 Framework;) – markus

ответ

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