<?phpnamespace App\EventSubscriber;use Symfony\Component\EventDispatcher\EventSubscriberInterface;use Symfony\Component\HttpKernel\Event\RequestEvent;use Symfony\Component\HttpKernel\KernelEvents;use Gedmo\Translatable\TranslatableListener;use App\Entity\User;use App\Service\LocaleService;use App\Modules\User\Service\UserService;use App\Modules\Locale\Service\BackendLocaleService;class LocaleSubscriber implements EventSubscriberInterface{ private $_translatableListener; private $_localeService; private $_backendLocaleService; private $_userService; public function __construct( TranslatableListener $translatableListener, LocaleService $frontendLocaleService, BackendLocaleService $backendLocaleService, UserService $userService) { $this->_translatableListener = $translatableListener; $this->_localeService = $frontendLocaleService; $this->_backendLocaleService = $backendLocaleService; $this->_userService = $userService; } public static function getSubscribedEvents() { return [ KernelEvents::REQUEST => [['onKernelRequest', 20]] ]; } public function onKernelRequest(RequestEvent $event) { $request = $event->getRequest(); if (/*!$request->hasPreviousSession() || */$request->get('_route') == '') return; $loggedUserType = $request->getSession()->get('_logged_user_type'); if ($loggedUserType == User::TYPE_ADMIN) { // panel admina // FIX generowania pdf projektu if ($request->get('_route') == 'app_project_step7_generate_pdf') { if ($lang = $request->query->get('lang')) $this->_translatableListener->setTranslatableLocale($lang); } else { $locale = $request->getSession()->get('_backend_locale'); if ($locale == '') { $clientLocale = $this->_getClientLocale(); if ($clientLocale != '') { if (in_array($clientLocale, $this->_backendLocaleService->getAvailableBackendLocales())) $locale = $clientLocale; } } if ($locale == '') $locale = $this->_backendLocaleService->getDefaultLocale(); $this->_backendLocaleService->setLocale($locale); // $this->_backendLocaleService->setContentLocale($this->_backendLocaleService->getContentLocale()); $this->_backendLocaleService->setContentLocale($locale); } } else { $locale = $request->attributes->get('_locale'); if ($locale == '') $locale = $request->getSession()->get('_locale'); if ($locale == '') { $clientLocale = $this->_getClientLocale(); if ($clientLocale != '') { if (in_array($clientLocale, $this->_localeService->getAvailableLocales())) $locale = $clientLocale; } } if ($locale == '') $this->_localeService->getDefaultLocale(); $this->_localeService->setLocale($locale); } } private function _getClientLocale() { if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) return strtolower(str_split($_SERVER['HTTP_ACCEPT_LANGUAGE'], 2)[0]); }}