Symfony — перенаправить пользователя на страновой маршрут по IP

#symfony #translation

#symfony #перевод

Вопрос:

На сайте у меня много общедоступных страниц. Сайт поддерживает несколько языков. URL страницы, подобный этому: /about-us (английский) /de /about-us (Германия)….

Но когда пользователь заходит на сайт (например, из Германии) и вводит в браузере адрес домашней страницы или /about-us, если он впервые на моем сайте, мне нужно показать /de / about-us.

Как я могу это сделать.

У меня есть подписчик с

  public static function getSubscribedEvents(): array
    {
        return [
            KernelEvents::REQUEST => [
                ['setTranslationsLocale', self::TRANSLATIONS_PRIORITY],
            ],
            KernelEvents::CONTROLLER => 'setCountrySpecificLocale',
        ];
    }

public function setTranslationsLocale(RequestEvent $event): void
{
   ...
   $request->setLocale($routeLocale);
   $session->set('_locale', $routeLocale);
   // and locale set correctly
}
  

но поскольку язык address /about-us (не / de / about-us) является английским. Как я могу перенаправить на URL / de / about-us (URL-адреса могут быть разными)

Комментарии:

1. У вас может быть логика для поиска нужной пользовательской локали в ядре (перед вашими контроллерами). Смотрите здесь

Ответ №1:

Если ваша конфигурация верна, вы можете настроить все аннотации @Route на своих контроллерах следующим образом:

  * @Route(
 *  path={
 *      "fr_FR": "/locations",
 *      "en_US": "/rentals",
 *  },
 *  ......
 * )
  

В зависимости от того, какая локаль установлена для запроса, ответу присваивается соответствующий uri.

Дополнительная информация здесь: https://symfony.com/doc/current/routing.html#localized-routes-i18n