Preserve user's chosen locale in Editor

This commit is contained in:
Ivo Valchev
2020-10-23 09:09:37 +02:00
committed by Bob den Otter
parent cc12a0fb8a
commit 360bcf5c9f
+19
View File
@@ -4,15 +4,25 @@ declare(strict_types=1);
namespace Bolt\Event\Subscriber;
use Bolt\Entity\User;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class LocaleSubscriber implements EventSubscriberInterface
{
/** @var string s */
private $defaultLocale;
public function __construct(string $defaultLocale)
{
$this->defaultLocale = $defaultLocale;
}
public function onKernelRequest(RequestEvent $event): void
{
$request = $event->getRequest();
if (! $request->hasPreviousSession()) {
return;
}
@@ -25,6 +35,15 @@ class LocaleSubscriber implements EventSubscriberInterface
$locale = $request->query->get('_locale');
$request->getSession()->set('_locale', $locale);
$request->setLocale($locale);
} elseif ($request->attributes->get('zone', false) === 'backend') {
/** @var User|null $user */
$user = $request->getUser();
if ($user && $user->getLocale()) {
$locale = $user->getLocale();
} else {
$locale = $this->defaultLocale;
}
$request->setLocale($locale);
} elseif ($request->getSession()->has('_locale')) {
// if no explicit locale has been set on this request, use one from the session
$request->setLocale($request->getSession()->get('_locale'));