Я недавно интернационализировал свою платформу на основе 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]
И список комбинаций хост + путь с ожидаемым и фактическим результатом: