Search code examples
phpzend-framework2

zf2 change language dynamically


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


Solution

  • 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)