Как дать более высокий приоритет языку, установленному в определяемом пользователем приемнике запросов, по сравнению с локализованным маршрутом? - PullRequest
0 голосов
/ 01 апреля 2019

Я недавно интернационализировал свою платформу на основе Symfony.Я использую разные хосты для каждой локали и Прослушиватель запросов для определения локали запроса ( документация здесь ).Я также хотел, чтобы мои пути были переведены, поэтому я реализовал функцию локализованных маршрутов ( документация здесь ).Я хотел бы, чтобы языковой стандарт, установленный в моем приемнике запросов, преобладал над языковым стандартом, установленным локализованным маршрутом, и, к сожалению, это не так.

Я попытался изменить приоритет моих прослушивателей запросов ядра безуспешно,Это, согласно документам, перед LocaleListener и Translator Listener и после всего остального.

Вот список приоритетов моих слушателей запросов ядра:

  Order   Callable                                                                                          Priority  
 ------- ------------------------------------------------------------------------------------------------- ---------- 
  #1      Symfony\Component\HttpKernel\EventListener\DebugHandlersListener::configure()                     2048      
  #2      Symfony\Component\HttpKernel\EventListener\ValidateRequestListener::onKernelRequest()             256       
  #3      Symfony\Component\HttpKernel\EventListener\SessionListener::onKernelRequest()                     128       
  #4      Symfony\Component\HttpKernel\EventListener\RouterListener::onKernelRequest()                      32        
  #5      Symfony\Bundle\FrameworkBundle\EventListener\ResolveControllerNameSubscriber::onKernelRequest()   24        
  #6      App\EventListener\RequestListener::onKernelRequest()                                              18        
  #7      Symfony\Component\HttpKernel\EventListener\LocaleListener::onKernelRequest()                      16        
  #8      Symfony\Component\HttpKernel\EventListener\TranslatorListener::onKernelRequest()                  10   

My Request Listener:

// App\EventListener\RequestListener
public function onKernelRequest(GetResponseEvent $event)
{
    $request = $event->getRequest();
    $request_host = $request->getHost();

    foreach ($this->domains as $locale_domain) {
        list($locale, $domain) = explode(':', $locale_domain);

        if ($domain === $request_host) {
            $request->setLocale($locale);
        }
    }

    $request->setDefaultLocale($this->default_locale);
}

Пример одного из моих локализованных маршрутов:

search:
    path:
        en: /search/
        fr: /rechercher/
    controller: App\Controller\SearchController::searchStart
    methods: [GET]

И список комбинаций хост + путь с ожидаемым и фактическим результатом:

  • www.english-domain /

    • ожидается: английский
    • актуальный: английский
  • www.french-домен / французский путь

    • ожидается: французский
    • фактический: французский
  • www.english-domain / french-path

    • ожидается: английский
    • актуальный: французский
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...