Définir la locale de Symfony depuis une application tierce

publié le 15/12/2019

Symgfony

Imaginez que vous ayez une application codée en Javascript par exemple, communiquant avec votre API sur Symfony. Votre application accepte le français, l'anglais et vous souhaitez que votre API renvoie également des données traduites (les messages de validation par exemple). Cet article vous propose une manière simple d'implémenter ça.


Créons un LocaleSubscriber dans notre projet Symfony

<?php

namespace App\EventSubscriber;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;

class LocaleSubscriber implements EventSubscriberInterface
{

    public static function getSubscribedEvents()
    {
        return array(
            KernelEvents::REQUEST => array(array('onKernelRequest', 200)),
        );
    }
    public function onKernelRequest(GetResponseEvent $event)
    {
        $request = $event->getRequest();
        if ($request->headers->has("Accept-Language")) {
            $locale = $request->headers->get('Accept-Language');
            $request->setLocale($locale);
        }
    }
}

Depuis votre application front, il vous suffit maintenant de définir l'en-tête Accept-Language pour que la locale soit correctement définie quand vous commmuniquez avec votre API.