Zend框架:Zend_translate和路由相关问题 [英] Zend Framework: Zend_translate and routing related issue

查看:96
本文介绍了Zend框架:Zend_translate和路由相关问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经在我的应用程序中实现了Zend_Navigation和Zend_Translate. 路由是在Bootstrap.php中设置的,如下所示.

I have implemented Zend_Navigation, Zend_Translate in my application. The routing is setup in Bootstrap.php like below.

$fc = Zend_Controller_Front::getInstance();
        $zl=new Zend_Locale();
        Zend_Registry::set('Zend_Locale',$zl);
        $lang=$zl->getLanguage().'_'.$zl->getRegion();
        $router = $fc->getRouter();
        $route = new Zend_Controller_Router_Route(':lang/:module/:controller/:action/*', 
        array(
    'lang'=>$lang, 'module'=>'default', 'controller'=>'index', 'action'=>'index'
));
$router->addRoute('default', $route);
$fc->setRouter($router);
$fc->registerPlugin( new Plugin_LanguageSetup());   

在LaunguageSetup插件中,我已经定义了dispatchLoopStartup方法来检查语言参数

in LaunguageSetup Plugin i have defined the dispatchLoopStartup method to do the checking of the language param

    public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) {
        $this->createLangUrl($request);
        $this->_language = $request->getParam('lang');
        if ((!isset($this->_language)) || !in_array($this->_language, $this->_languagesArray)) {
            $this->_language = 'en_US';
            $request->setParam('lang', 'en_US');
        }
        $file = APPLICATION_PATH.$this->_directory.$this->_language.'.csv';
        $translate = new Zend_Translate('csv', $file, $this->_language);
        Zend_Registry::set('Zend_Translate', $translate);
        $zl = Zend_Registry::get('Zend_Locale');
        $zl->setLocale($this->_language);
        Zend_Registry::set('Zend_Locale', $zl);


//        $fc = Zend_Controller_Front::getInstance();
//        $router = $fc->getRouter();
//        $route = new Zend_Controller_Router_Route(':lang/:module/:controller/:action/*', array(
//            'lang'=>$this->_language, 'module'=>'default', 'controller'=>'index', 'action'=>'index'
//        ));
//        $router->addRoute('default', $route);
//        $fc->setRouter($router);

    }

发生的事情是该语言始终具有默认值,即使在地址栏中手动键入"lang"参数,路由中也永远不会具有默认lang值,即/en_US/module/controller/action/它总是会还原回到默认的Zend_locale();

What happen is the language always have the default value, the 'lang' param never default lang value in route, even if i type it in the address bar manually i.e /en_US/module/controller/action/ It always get revert back to the default Zend_locale();

我只能解决的方法是在插件中再次设置路由,并将默认的语言值注入.知道为什么吗?

Only way i can fix it is to setup the route again in the plugin and inject a correct language value as default. Any Idea why?

推荐答案

部分解决方案的排序.

在dispatchLoopStartup

in dispatchLoopStartup

添加

$fc = Zend_Controller_Front::getInstance();
$router = $fc->getRouter();
$router->setGlobalParam('lang',$this->_language);

比重新定义和覆盖路由更好,并通过更改默认的"lang"值来伪造"语言参数.

better than redefine and overwrite the route again and 'fake' the language param by changing the default 'lang' value.

这还不完美. Zend_router假设拾取"lang"参数并将其放置在Zend_navigation-> menu();

it's just less than perfect. Zend_router suppose to pick up the 'lang' param and have them placed in Zend_navigation->menu();

这篇关于Zend框架:Zend_translate和路由相关问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆