zf2动态更改语言

时间:2014-10-20 20:57:18

标签: php zend-framework2

我有一个关于ZF2译者的问题,在用户点击标志或菜单链接时,在结构中的特定情况下,用于改变语言的链接。

在我的应用程序/ config / module.config.php中,我有以下代码:

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

    ),

我的路线是:

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',
                    ),
                ),
            ),

在我的Application / Module.php中,我将此代码设置为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);
    }

现在我的路线为http://www.xxxx.com/it/indexhttp://www.xxxx.com/it/company,但我无法在我的应用中为更改语言创建链接...

我如何进行?

谢谢

2 个答案:

答案 0 :(得分:2)

您可以通过仅更改lang参数来创建指向同一页面的链接,如下所示:

$this->url(null, array('lang' => $anotherLang), array(), true)

答案 1 :(得分:1)

只需在你的观点中执行此操作:

<a href="<?= $this->url($this->route, array('lang' => 'en'));?>"> English </a>

这将提供与当前URL相同的{{1}}但使用不同语言(此处为英语)。

希望这有帮助。