2016-05-23 4 views
0

次私はこのようなフランス語にロケールを変更する私のコントローラでsymfonyの3.0 - 私のconfig.ymlでsetlocale()のに応じて翻訳していない

parameters: 
     locale: en 
framework: 
     translator:  { fallbacks: ["%locale%"] } 

を設定している場合:

$request->setLocale('fr') 

とき私はこのような小枝で何かを翻訳したい{{ 'Something' | trans }}私の見解では、{{ dump(app.request.locale) }}が私にfrを与えても、フランス語のテキストは表示されません。 何か問題があります。私はこのようfrとする私のconfig.ymlでロケールを変更する場合

のみ:

parameters: 
     locale: fr 

その後、私はフランス語のテキストを参照してください。

提案がありますか?

答えて

0

このようなコントローラでロケールを設定するときに、セッション内のロケールを設定するlocaleListenerを作成しました。$request->setLocale('fr')。これで、私のテキストは、対応するロケールで翻訳されますが、余分なページが更新された後にのみ翻訳されます。

namespace SiteBundle\EventListener; 
use Symfony\Component\HttpKernel\Event\GetResponseEvent; 
use Symfony\Component\HttpKernel\KernelEvents; 
use Symfony\Component\EventDispatcher\EventSubscriberInterface; 

class LocaleListener implements EventSubscriberInterface 
{ 
    private $defaultLocale; 

    public function __construct($defaultLocale = 'en') 
    { 
     $this->defaultLocale = $defaultLocale; 
    } 

    public function onKernelRequest(GetResponseEvent $event) 
    { 
     $request = $event->getRequest(); 
     if (!$request->hasPreviousSession()) { 
      return; 
     } 

     // try to see if the locale has been set as a _locale routing parameter 
     if ($locale = $request->attributes->get('_locale')) { 
      $request->getSession()->set('_locale', $locale); 
     } else { 
      // if no explicit locale has been set on this request, use one from the session 
      $request->setLocale($request->getSession()->get('_locale', $this->defaultLocale)); 
     } 
    } 

    public static function getSubscribedEvents() 
    { 
     return array(
      // must be registered after the default Locale listener 
      KernelEvents::REQUEST => array(array('onKernelRequest', 15)), 
     ); 
    } 
} 
関連する問題