2014-10-20 213 views
0

我有一個關於ZF2翻譯器的問題,在特定情況下,在用戶點擊標誌或菜單鏈接時,可以更改語言鏈接。zf2動態更改語言

在我的應用程序/配置/ 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', 
        ), 
       ), 
      ), 

在我的應用程序/ Module.php我設置上引導代碼:

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,但我不能創建林k在我看來,在我的應用程序中更改語言...

我該如何繼續?

感謝

+0

感謝你的回答......我用這種方法甲階酚醛樹脂是: [如何傳遞變量在ZF2全球layout.phtml] [1] [1]:HTTP:/ /stackoverflow.com/questions/18439364/how-to-pass-variables-to-layout-phtml-globally-in-zf2/18549487#18549487 – 2014-11-08 17:57:09

回答

2

您可以創建一個鏈接到同一頁面,你是隻改變lang參數如下所示:

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

嗨,感謝您的幫助和答覆,但我無法設置操作在我的網址。在我的主要佈局中,我有兩個鏈接用英文或意大利文更改頁面,但運行腳本時,我只能獲得www.xxxx.com/it,而我將訪問www.xxx.com/it/company和www.xxx.com/ EN /公司。我的控制器中有東西嗎? - – 2014-10-21 12:30:14

1

只是這樣做在你的瀏覽次數:

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

這將給出與當前的URL相同但使用不同的語言(這裏是英文)。

希望這會有所幫助。

+0

嗨感謝您的回答,我嘗試這是解決方案,但我無法攔截行動並在鏈接中設置。我應該設置控制器? – 2014-10-21 12:21:15

+0

嗨,感謝您的幫助和答覆,但我無法對我的網址設置操作。在我的主要佈局中,我有兩個鏈接用英文或意大利文更改頁面,但運行腳本時,我只能獲得www.xxxx.com/it,而我將訪問www.xxx.com/it/company和www.xxx.com/ EN /公司。我的控制器中有東西嗎? – 2014-10-21 12:29:34

+0

只需在url中添加''action'=>'company''。 – blackbishop 2014-10-21 12:39:12