2014-10-20 4 views
0

У меня есть один вопрос, касающийся ZF2 Translator, в конкретном случае в этой статье ссылка на изменение langauge дунамически, когда пользователь нажимает на флаг или ссылку меню.zf2 динамически меняет язык

In My Application/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', 
        ), 
       ), 
      ), 

И в моей заявке/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/index или http://www.xxxx.com/it/company, но я не могу создать лина k на мой взгляд, чтобы изменить язык в моей заявке ...

Как я могу продолжить?

Благодаря

+0

спасибо за ваш ответ ... Я подбивать его с помощью этого метода: [Как передать переменные layout.phtml глобально в ZF2] [1] [1]: HTTP://stackoverflow.com/questions/18439364/how-to-pass-variables-to-layout-phtml-globally-in-zf2/18549487#18549487 –

ответ

2

Вы можете создать ссылку на той же странице, вы в изменяя только параметр lang вроде следующего:

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

Привет, спасибо за вашу помощь и ответ, но я не могу установить действие по моему URL. В моем основном макете у меня есть две ссылки для самой страницы изменений на английском или итальянском языках, но при запуске скрипта я получаю только www.xxxx.com/it, пока я буду www.xxx.com/it/company и www.xxx.com/ ан/компании. У меня что-то в контроллере? - –

1

Просто сделай это в ваших Просмотры:

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

Это даст тот же URL как текущий, но на другом языке (здесь это английский).

Надеюсь, это поможет.

+0

Привет Спасибо за ваш ответ, я пробую это решение, но я не могу intercepet действие и установить в ссылке. Я должен установить контроллер? –

+0

Привет, спасибо за вашу помощь и ответ, но я не могу установить действие на свой url. В моем основном макете у меня есть две ссылки для самой страницы изменений на английском или итальянском языках, но при запуске скрипта я получаю только www.xxxx.com/it, пока я буду www.xxx.com/it/company и www.xxx.com/ ан/компании. У меня что-то в контроллере? –

+0

Просто добавьте '' action '=>' company'' в url. – blackbishop