2016-07-02 96 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

它不適合我,它始終保持在同一地點 –