<?php
namespace App\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Security\Core\Security;
class LocaleSubscriber implements EventSubscriberInterface
{
private Security $security;
public function __construct(Security $security)
{
$this->security = $security;
}
public function onKernelRequest(RequestEvent $event): void
{
$request = $event->getRequest();
$locale = 'fr'; // langue par défaut
// 1️⃣ utilisateur connecté
$user = $this->security->getUser();
if ($user && method_exists($user, 'getLocale') && $user->getLocale()) {
$locale = $user->getLocale();
}
// 2️⃣ session
elseif ($request->hasSession() && $request->getSession()->has('_locale')) {
$locale = $request->getSession()->get('_locale');
}
// 3️⃣ cookie
elseif ($request->cookies->has('_locale')) {
$locale = $request->cookies->get('_locale');
}
$request->setLocale($locale);
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::REQUEST => ['onKernelRequest', 100],
];
}
}