我有一个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 然后我将语言切换为英语 - &GT;我的导航的href属性仍然是旧值(www.example.de/de/controller/action),但它们应该有www.example.de/en/controller/action
我的问题在哪里?我忘记重新渲染菜单了吗?
答案 0 :(得分: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之前检查你的菜单是否正在执行。