0

我有一个 zend 版本 1.12 的 zend 框架项目。我正在使用带有 xml 文件的 zend_navigation 和带有 gettext 适配器的 zend_translation。

此代码创建主菜单:

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

我的问题在哪里?我忘记重新渲染菜单了吗?

4

1 回答 1

0

我相信您是说标签('Home'、'Contact Us')正在改变,但链接('/'、'/contact-us')没有改变。Zend_Menu 仅对菜单标签使用 Zend_Translate 的方式。

如果您的菜单是由 MVC 而不是 URI 创建的,您可以通过添加以下行使其采用您的语言值

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

这将出现在您的导航渲染中,位于“foreach ($page as $subpage) {”和“echo”之间。

如果您的菜单使用 URI,您可以同时在页面 HREF 上进行替换。

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

于 2013-01-07T15:25:27.060 回答