2016-05-23 13 views
0

In meinem config.yml haben, wenn die folgende EinstellungSymfony 3.0 - nicht nach setLocale übersetzen()

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

In meinem Controller ich das Gebietsschema auf Französisch wie folgt zu ändern:

$request->setLocale('fr') 

Wenn Ich möchte etwas in Twig wie dieses übersetzen {{ 'Something' | trans }} Es zeigt nicht den Text in Französisch, auch wenn dies {{ dump(app.request.locale) }}fr aus meiner Sicht gibt. Da stimmt etwas nicht.

Nur wenn ich ändere das Gebietsschema in meinem config.yml wie dies fr:

parameters: 
     locale: fr 

dann sehe ich den Text auf Französisch.

Irgendwelche Vorschläge?

Antwort

0

Am Ende habe ich einen LocaleListener erstellt, der das Gebietsschema in der Sitzung setzt, wenn ich das Gebietsschema im Controller wie folgt setze $request->setLocale('fr'). Jetzt wird mein Text in das entsprechende Gebietsschema übersetzt, aber erst nach einer zusätzlichen Seitenaktualisierung.

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)), 
     ); 
    } 
} 
Verwandte Themen