douyue1926 2014-10-20 20:57
浏览 55
已采纳

zf2动态更改语言

I have one question, about ZF2 Translator, in the specific case in the costruction the link for change langauge dunamically when user click on flag or menu link.

In My Application/config/module.config.php i have this code:

   'service_manager' => array(
        'factories' => array(
            'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory',
            'navigation' => 'Zend\Navigation\Service\DefaultNavigationFactory',
        ),

    ),

and my route is:

return array(
    'router' => array(
        'routes' => array(

            'home' => array(
                'type' => 'Segment',
                'options' => array(
                    'route'    => '/[:lang[/:action]]',
                    'constraints' => array(
                        'lang'   => '[a-zA-Z]*',
                        'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                    ),
                    'defaults' => array(
                        'controller' => 'Application\Controller\Index',
                        'action'     => 'index',
                    ),
                ),
            ),

And in my Application/Module.php i set this code on bootstrap:

public function onBootstrap(MvcEvent $e)
    {
        $sm = $e->getApplication()->getServiceManager();

        $router = $sm->get('router');
        $request = $sm->get('request');
        $matchedRoute = $router->match($request);
        $params = $matchedRoute->getParams();

        if(isset($params['lang']) && $params['lang'] !== '') {
            $translator = $e->getApplication()->getServiceManager()->get('translator');
            //or
            //$translator = $e->getApplication()->getServiceManager()->get('MvcTranslator');

            if($params['lang'] == 'en') {
                $translator->setLocale('en_US');
            }
        }

        $eventManager        = $e->getApplication()->getEventManager();
        $moduleRouteListener = new ModuleRouteListener();
        $moduleRouteListener->attach($eventManager);
    }

now my route http://www.xxxx.com/it/index or http://www.xxxx.com/it/company but i can't create a link in my view for change language in my application...

How do i proceed ?

Thanks

  • 写回答

2条回答 默认 最新

  • dsgsdg206050 2014-10-21 08:24
    关注

    You can create a link to the same page you are in by changing only the lang parameter like the following:

    $this->url(null, array('lang' => $anotherLang), array(), true)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大