src/Controller/HomeController.php line 30

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\Cookie;
  7. use Symfony\Component\Routing\Annotation\Route;
  8. class HomeController extends AbstractController
  9. {
  10.     /**
  11.      * @Route("/{_locale}/", name="app_home", requirements={"_locale" : "en|fr|zh|pt"})
  12.      */
  13.     public function index(string $_locale): Response
  14.     {
  15.         $response $this->render('home/index.html.twig');
  16.         // On enregistre ou met à jour le cookie de langue pour 1 an
  17.         // Cela permet au navigateur de s'en souvenir lors de la prochaine visite
  18.         $response->headers->setCookie(new Cookie('_locale'$_localestrtotime('+1 year')));
  19.         return $response;
  20.     }
  21.     /**
  22.      * @Route("/", name="app_home_redirect")
  23.      */
  24.     public function redirectNoLocale(Request $request): Response
  25.     {
  26.         // 1. On cherche d'abord dans les cookies de l'utilisateur
  27.         $lastLocale $request->cookies->get('_locale');
  28.         // 2. Si pas de cookie, on peut tenter de deviner la langue du navigateur
  29.         if (!$lastLocale) {
  30.             $lastLocale $request->getPreferredLanguage(['en''fr''zh''pt']);
  31.         }
  32.         // 3. Si toujours rien (ou langue non supportée), on met 'en' par défaut
  33.         $targetLocale in_array($lastLocale, ['en''fr''zh''pt']) ? $lastLocale 'en';
  34.         return $this->redirectToRoute('app_home', ['_locale' => $targetLocale]);
  35.     }
  36. }