【问题标题】:Zend Framework menu translationZend Framework 菜单翻译
【发布时间】:2011-02-12 22:35:52
【问题描述】:

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

<?=$this->translate->_('Members Login')

我的引导文件:

    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    private $_acl = null;
    private $_auth = null;

    protected function _initAutoLoad()
    {
        $modelLoader = new Zend_Application_Module_Autoloader(array(
        'namespace' => '',
        'basePath' => APPLICATION_PATH
        ));
        if (Zend_Auth::getInstance()->hasIdentity()) {
            Zend_Registry::set('role', Zend_Auth::getInstance()->getStorage()->read()->role);
        } else {
            Zend_Registry::set('role', 'guest');
        }
        $this->_acl = new Model_LibraryAcl();
        $this->_auth = Zend_Auth::getInstance();

        $fc = Zend_Controller_Front::getInstance();
        $fc->registerPlugin(new Plugin_AccessCheck($this->_acl, $this->_auth));
        return $modelLoader;
    }

    function _initViewHelpers()
    {
        $this->bootstrap('layout');
        $layout = $this->getResource('layout');
        $view = $layout->getView();

        $view->doctype('HTML4_STRICT');
        $view->headMeta()->appendHttpEquiv('Content-type','text/html;charset=UTF-8')
                         ->appendName('description','The Best Freelance Projects');

        $view->headTitle('Freelance Duty');

        $navContainerConfig = new Zend_Config_Xml(APPLICATION_PATH.'/configs/navigation.xml','nav');
        $navContainer = new Zend_Navigation($navContainerConfig);
        $view->navigation($navContainer)
              ->setAcl($this->_acl)
              ->setRole(($this->_auth->getStorage()->read())?$this->_auth->getStorage()->read()->role:'guest')
              ->findAllBy('class', 'nav_header');
    }

    function _initSetTranslations()
    {
        $this->bootstrap('layout');
        $layout = $this->getResource('layout');
        $view = $layout->getView();

        $translate = new Zend_Translate('gettext',APPLICATION_PATH.'/languages/tr.mo','tr');
        $translate->setLocale('tr');
        $view->translate = $translate;
        Zend_Registry::set('TranslationObject', $translate);
    }

}

并像这样在视图中编写菜单:

echo $this->navigation()->menu()->setUlClass('nav_header');

我不知道如何翻译菜单 有cmets吗?

提前致谢

【问题讨论】:

    标签: php zend-framework navigation


    【解决方案1】:

    当您使用Zend_Navigation 时,可以自动翻译标题和标签。查看reference guide。只需选择您的助手并将Zend_Translate 设置为它。

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

    $view->navigation($navContainer) 
         //RB setUseTranslator is unnecessary, because it's true by deafult
         ->setTranslator(Zend_Registry::get('TranslationObject')); 
    

    2。在使用链接之前,请确保该方法返回您想要的对象:

    $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,它应该可以工作。

    【讨论】:

    • 嗨@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,我已按照您的指示进行操作,现在可以使用了:)
    【解决方案2】:

    Zend_Translate 应该会有所帮助。看这里:http://framework.zend.com/manual/en/zend.translate.html

    【讨论】:

    • 正如我在引导文件中所写的那样,我已经使用了 zend_translate。问题在于菜单翻译。因为菜单内容不是恒定值,它是动态来自 xml
    • 菜单项来自 XML 并不重要。您将 PARSED 文件传递​​给构造函数 Zend_Navigation,因此它应该能够获取菜单标签并进行翻译。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多