0

我有一个Zend框架项目与zend版本1.12。 我正在使用带有xml文件的zend_navigation和带有gettext适配器的zend_translation。Zend_navigation&Zend_translate href属性不切换语言变化

此代码创建主菜单:

echo '<ul class="nav1">'; 
foreach ($this->container as $page) { 
    // check if it is active (not recursive) 
    $isActive = $page->isActive(false); 
    $liClass = $isActive ? ' class="active"' : ''; 
    echo '<li ' . $liClass . '>' . $this->menu()->htmlify($page); 
    // subnavigation in second layer 
    if (sizeof($page) > 0) { 
     echo '<ul class="subNavHead">'; 
     foreach ($page as $subpage) { 
      $isActive = $subpage->isActive(false); 
      $liClass = $isActive ? ' class="active"' : ''; 
      echo '<li ' . $liClass . '>' . $this->menu()->htmlify($subpage) . '</li>'; 
     } 
     echo '</ul>'; 
    } 
    echo '</li>'; 
} 
echo '</ul>'; 

这里是我的语言选择器类:

class AW_Controller_Plugin_LangSelector extends Zend_Controller_Plugin_Abstract { 
    public function preDispatch(Zend_Controller_Request_Abstract $request) { 
     $lang = $request->getParam('lang', ''); 

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

     switch ($request->getParam('lang')) { 
      case 'de': 
       $locale = 'de'; 
       break; 
      case 'en': 
       $locale = 'en'; 
       break; 
      case 'pl': 
       $locale = 'pl'; 
       break; 
      default : 
       $locale = 'de'; 
       break; 
     } 

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

} 

当我改变了语言,一个选择框在我的网站的文本更改语言,但导航目标不会改变。导航标签也会改变。

当我在默认语言: www.example.de/de/controller/action 然后我切换语言为英语 - >我的导航的href属性仍对旧值(WWW。 example.de/de/controller/action),但他们应该有www.example.de/en/controller/action

我的问题在哪里?我忘了重新呈现菜单吗?

回答

0

我相信你是说标签('Home','联系我们')正在改变,但链接('/','/ contact-us')不是。 Zend_Menu只使用Zend_Translate作为菜单标签。

如果你的菜单由MVC代替的URI创建的,你可以把它拿你的语言值,通过将行

$page->setParam('lang', Zend_Registry::get('Zend_Locale')->getLocale()); 

这会去你的导航渲染,之间“的foreach($页为$子页面){“和”回声“。

如果您的菜单正在使用URIs,则可以在页面HREF上的同一点进行替换。

现在,如果我误解了你的问题,并且它没有翻译菜单中的链接或标签,那么检查你的菜单是否在插件的preDispatch之前执行。

+0

太棒了,谢谢:) – Tomben