Php Zend框架菜单翻译

Php Zend框架菜单翻译,php,zend-framework,navigation,Php,Zend Framework,Navigation,我正在开发一个多语言web应用程序。我有来自xml文件的菜单元素,但我不知道如何翻译菜单。另一方面,我可以在视图中翻译网站的正常内容,如下所示: <?=$this->translate->_('Members Login') echo $this->navigation()->menu()->setUlClass('nav_header'); 然后在视图中按如下方式编写菜单: <?=$this->translate->_('Members

我正在开发一个多语言web应用程序。我有来自xml文件的菜单元素,但我不知道如何翻译菜单。另一方面,我可以在视图中翻译网站的正常内容,如下所示:

<?=$this->translate->_('Members Login')
echo $this->navigation()->menu()->setUlClass('nav_header');
然后在视图中按如下方式编写菜单:

<?=$this->translate->_('Members Login')
echo $this->navigation()->menu()->setUlClass('nav_header');
我不知道如何翻译菜单 有什么评论吗


提前感谢

Zend_Translate应该会有所帮助。看看这里:

当您使用
Zend_导航时,标题和标签可以自动翻译。退房只需选择您的助手并设置
Zend\u Translate

编辑:首先,在注释中的代码中,您做错了两件事:
1.使用
setUseTranslator
并将translator对象传递给它。但是
setUseTranslator
采用描述是否使用转换器的布尔值。您可以使用
setTranslator
方法设置转换器:

$view->navigation($navContainer) 
     //RB setUseTranslator is unnecessary, because it's true by deafult
     ->setTranslator(Zend_Registry::get('TranslationObject')); 
二,。在使用链接之前,请确保该方法返回所需的对象:

$view->navigation($navContainer)
     ->setAcl($this->_acl)
     ->setRole(($this->_auth->getStorage()->read())?$this->_auth->getStorage()->read()->role:'guest')
     ->findAllBy('class', 'nav_header'); //that returns an array, not Zend_Navigation object! 
所以你不能这样做:

$navigation->findAllBy('class', 'nav_header') 
           ->setUseTranslator(Zend_Registry::get('TranslationObject')); //wrong methid here, should be setTranslator, as mentioned above

$navigation
对象上调用
setTranslator
,它应该可以工作

正如我在我的引导文件中所写的,我一直在使用zend_translate。问题在于菜单转换。因为菜单内容不是常量值,它动态地来自XML。这并不重要,菜单项来自XML。您将解析后的文件传递到构造函数
Zend_Navigation
,因此它应该能够获取菜单标签并对其进行翻译。Hi@singles,我在引导文件中使用过setUseTranslator,如下所示:
code
$view->Navigation($navContainer)->setAcl($this->acl)->setRole($this->auth->getStorage()->read())?$this->_auth->getStorage()->read()->role:'guest')->findAllBy('class','nav_header')->setUseTranslator(Zend_Registry::get('TranslationObject');TranslationObject用于我的XML语言内容文件。我将它保存在注册表中,以便使用它。请重新格式化代码或更好地编辑问题。你没有写,这有用吗;)谢谢@single,我已经按照你的指示做了,现在可以用了:)