2017-06-26 7 views
0

J'essaie de traduire site web avec la langue de l'utilisateur.Symfony traduction seulement afficher en anglais

dans mon config.yml:

parameters: 
    locale: en 

framework: 
    #esi: ~ 
    translator: { fallbacks: [en] } 

I ajouté messges.en.yml et messages.it.yml sous app/ressources/traductions.

Quand je visite la page avec le navigateur italien je vois des traductions anglaises.

Après le livre Symfony i ajouté cet abonné événement:

namespace AppBundle\Service; 

use AppBundle\Controller\TokenAuthenticatedController; 
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; 
use Symfony\Component\HttpKernel\Event\FilterControllerEvent; 
use Symfony\Component\EventDispatcher\EventSubscriberInterface; 
use Symfony\Component\HttpKernel\KernelEvents; 

class LanguageListener implements EventSubscriberInterface 
{ 

    public function onKernelController(FilterControllerEvent $event) 
    { 
     $request = $event->getRequest(); 
     $user_lang = $request->getPreferredLanguage(); 
     $request->setLocale($user_lang); 
    } 

    public static function getSubscribedEvents() 
    { 
     return array(
      KernelEvents::CONTROLLER => 'onKernelController', 
     ); 
    } 
} 

, mais je continue à ne voir que l'anglais ...

un pourboire?

+0

Nettoyé le cache? 'rm -rf app/cache/*' – ste

+0

Êtes-vous sûr que '$ user_lang' a la bonne valeur? Peut-être que 'getPrefferedLanguage' ne fonctionne pas comme prévu et que vous utilisez votre logique de 'repli'? –

Répondre

0

Vous devez créer des itinéraires avec défini _locale comme celui-ci

@Route("/{_locale}/post/list", name="post_index", defaults={"_locale": "en"}, requirements={"_locale": "en|fr|nl" }) 

Ne pas oublier d'importer l'itinéraire de classe pour les annotations et effacer le cache.