<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\Routing\Annotation\Route;
class HomeController extends AbstractController
{
/**
* @Route("/{_locale}/", name="app_home", requirements={"_locale" : "en|fr|zh|pt"})
*/
public function index(string $_locale): Response
{
$response = $this->render('home/index.html.twig');
// On enregistre ou met à jour le cookie de langue pour 1 an
// Cela permet au navigateur de s'en souvenir lors de la prochaine visite
$response->headers->setCookie(new Cookie('_locale', $_locale, strtotime('+1 year')));
return $response;
}
/**
* @Route("/", name="app_home_redirect")
*/
public function redirectNoLocale(Request $request): Response
{
// 1. On cherche d'abord dans les cookies de l'utilisateur
$lastLocale = $request->cookies->get('_locale');
// 2. Si pas de cookie, on peut tenter de deviner la langue du navigateur
if (!$lastLocale) {
$lastLocale = $request->getPreferredLanguage(['en', 'fr', 'zh', 'pt']);
}
// 3. Si toujours rien (ou langue non supportée), on met 'en' par défaut
$targetLocale = in_array($lastLocale, ['en', 'fr', 'zh', 'pt']) ? $lastLocale : 'en';
return $this->redirectToRoute('app_home', ['_locale' => $targetLocale]);
}
}