Переводчик не загружает правильную локаль

Я пытаюсь использовать symfony липкая локаль для изменения веб-локали через URL-адрес. Для этого, как объясняется на странице, на которую я ссылался до того, как я создал подписчика событий, который реализует это в функции onKernelRequest.

Подписчик событий работает и выполняет блок de if ($loc) правильно, но транслятор, похоже, не обнаруживает его, поэтому это может быть проблема с приоритетом подписчика событий, но я попытался изменить его приоритет, но все еще получаю тот же локальный.

Подписчик событий

<?php
// src/EventSubscriber/LocaleSubscriber.php
namespace App\EventSubscriber;

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

class LocaleSubscriber implements EventSubscriberInterface
{
    private $defaultLocale;

    public function __construct($defaultLocale = 'en')
    {
        $this->defaultLocale = $defaultLocale;
    }

    public function onKernelRequest(GetResponseEvent $event)
    {
        $request = $event->getRequest();
        if (!$request->hasPreviousSession()) {
            return;
        }
        $loc = $request->attributes->get('_locale');

        // try to see if the locale has been set as a _locale routing parameter
        if ($loc) {
            $request->getSession()->set('_locale', $loc);
            $request->setLocale($loc);
        } else {
            // if no explicit locale has been set on this request, use one from the session
            $request->setLocale($request->getSession()->get('_locale', $this->defaultLocale));
        }
    }

    public static function getSubscribedEvents()
    {
        return [
            // must be registered before (i.e. with a higher priority than) the default Locale listener
            KernelEvents::REQUEST => [['onKernelRequest', 20]],
        ];
    }
}

Контроллер

/**
* @Route("/{_locale}/pro/live")
*/
public function index(Request $request)
{
    return $this->render('pro/live/index.html.twig');
}

Я ожидаю изменить языковой стандарт переводчика, на который написано в URL-адресе.

Если я изменю URL-адрес на /en/pro/live/$request->getLocale() в контроллере, он вернет правильную локаль, но локальный переводчик все еще будет в es

эй, я бы предположил, что ваша конфигурация не включает локаль en. проверьте config/packages/framework.yaml (вероятно, это место). попробуйте symfony.com/doc/current/translation.html#configuration и связанные страницы ("локаль и URL-адрес"). на самом деле это должно работать автоматически, и прослушиватель/подписчик не требуется. Действительно.

Jakumi 08.04.2019 20:00

У меня нет локали по умолчанию в config/packages/framework.yaml. Да, похоже, он работает так же и без подписчика событий. Но проблема в том, что когда я меняю локаль в URL-адресе, переводчик не меняет свою локаль

Pablo carrió 09.04.2019 13:14

в symfony.com/doc/current/translation/locale.html говорится, что локаль в запросе должна быть установлена ​​перед прослушивателем локали, который по умолчанию имеет приоритет 16 (что ниже 20). так что это уже должно работать. возможно, вам захочется проверить, когда и каким образом установлена ​​локаль в запросе и/или переводчике, путем ручного сброса трассировки стека в соответствующие объекты (Translator::setLocale и Request::setLocale) и дальнейшего изучения. Также: я надеюсь, что вы не работаете на проде и забыли обновить кеш...

Jakumi 09.04.2019 14:09
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
158
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я решил проблему, предыдущий разработчик создал подписчик событий, который меняет локаль переводчика. Без него работает отлично

Другие вопросы по теме