2016-07-02 65 views
3

我想创建一个链接,它将改变下面代码中的localeSymfony3改变语言环境的链接

/** 
* 
* @Route("/changelanguage", defaults={"_locale" = "eu"}, name="changelanguage") 
* @Method("GET") 
*/ 
public function changelanguageAction(Request $request) { 


    $locale = $request->getLocale(); 
    if ($locale == "eu") { 
     $request->setLocale('es'); 
     $request->getSession()->set('_locale', 'es'); 
    } else { 
     $request->setLocale('eu'); 
     $request->getSession()->set('_locale', 'eu'); 
    } 

    return $this->redirect($request->headers->get('referer')); 

} 

然后,在我的树枝基本视图我使用的是这样的:

<ul class="nav navbar-nav navbar-right">   
    <li><a href="#">{{ app.request.locale }}</a></li> 
    {% if app.request.locale == "eu"%} 
     <li><a href="{{ path('changelanguage', {'_locale':'es'}) }}"><img src="{{ asset('bundles/app/img/espanol.png') }}" alt="Castellano"> Castellano</a></li> 
    {% else %} 
     <li><a href="{{ path('changelanguage', {'_locale':'eu'}) }}"><img src="{{ asset('bundles/app/img/euskara.png') }}" alt="Euskaraz"> Euskara</a></li> 
    {% endif %} 
    <li>&nbspp;</li> 
</ul> 

的问题是,它不断地说我,app.request.locale总是'eu'。我错过了什么吗?

+0

我很困惑你的代码。你试图强制“ES”? –

+0

我想在es和eu语言环境之间进行更改。例如,显示带有'es'语言环境的索引页面,并且链接将显示相同的页面,但更改用户语言环境并保留。 –

回答

1

添加默认语言设置为用户的实体,然后创建请求侦听检查默认语言为用户和改变它...

这对我

工作创建一个监听

<?php 

namespace UserBundle\EventListener; 

use Symfony\Component\DependencyInjection\ContainerInterface; 
use Symfony\Component\HttpKernel\Event\GetResponseEvent; 
use Symfony\Component\HttpKernel\HttpKernelInterface; 

class LanguageListener 
{ 
    private $token_storage; 

    private $securityContext; 

    private $container; 

    public function __construct(ContainerInterface $containerInterface) 
    { 
     $this->container = $containerInterface; 
     $this->securityContext = $this->container->get('security.authorization_checker'); 
     $this->token_storage = $this->container->get('security.token_storage');; 

    } 

    public function setLocale(GetResponseEvent $event) 
    { 

     if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) { 
      return; 
     } 


     if ($this->securityContext->isGranted('IS_AUTHENTICATED_REMEMBERED')) { 
      $userLocale = $this->token_storage->getToken()->getUser() 
       ->getCustomer()->getDefaultCodeLanguage(); 

      if ($userLocale) { 
       $request = $event->getRequest(); 
       $request->setLocale($userLocale); 
       $translator = $this->container->get('translator'); 
       $translator->setLocale($userLocale); 
      } 
     } 


    } 
} 

services.yml

services: 
    language.kernel_request_listener: 
     class: UserBundle\EventListener\LanguageListener 
     arguments: 
      - "@service_container" 
     tags: 
      - { name: kernel.event_listener, event: kernel.request, method: setLocale } 
+0

它不适合我,它始终保持在同一地点 –