Skip to content

Commit 386e238

Browse files
bug symfony#53195 [HttpKernel] Fix default locale is ignored when set_locale_from_accept_language is used (jkobus)
This PR was submitted for the 6.4 branch but it was merged into the 5.4 branch instead. Discussion ---------- [HttpKernel] Fix default locale is ignored when `set_locale_from_accept_language` is used | Q | A | ------------- | --- | Branch? | 5.4 | Bug fix? | yes | New feature? | no | Deprecations? | no | Issues | Fix symfony#53086 | License | MIT Fix as discussed in symfony#53086 Commits ------- c626b3a [HttpFoundation][FrameworkBundle] Fix default locale is ignored when set_locale_from_accept_language is used
2 parents 461c437 + c626b3a commit 386e238

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

src/Symfony/Component/HttpKernel/EventListener/LocaleListener.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,10 @@ private function setLocale(Request $request)
6868
{
6969
if ($locale = $request->attributes->get('_locale')) {
7070
$request->setLocale($locale);
71-
} elseif ($this->useAcceptLanguageHeader && $this->enabledLocales && ($preferredLanguage = $request->getPreferredLanguage($this->enabledLocales))) {
72-
$request->setLocale($preferredLanguage);
71+
} elseif ($this->useAcceptLanguageHeader && $this->enabledLocales) {
72+
if ($request->getLanguages() && $preferredLanguage = $request->getPreferredLanguage($this->enabledLocales)) {
73+
$request->setLocale($preferredLanguage);
74+
}
7375
$request->attributes->set('_vary_by_language', true);
7476
}
7577
}

src/Symfony/Component/HttpKernel/Tests/EventListener/LocaleListenerTest.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,28 @@ public function testRequestPreferredLocaleFromAcceptLanguageHeader()
130130
$this->assertEquals('fr', $request->getLocale());
131131
}
132132

133+
public function testRequestDefaultLocaleIfNoAcceptLanguageHeaderIsPresent()
134+
{
135+
$request = new Request();
136+
$listener = new LocaleListener($this->requestStack, 'de', null, true, ['lt', 'de']);
137+
$event = $this->getEvent($request);
138+
139+
$listener->setDefaultLocale($event);
140+
$listener->onKernelRequest($event);
141+
$this->assertEquals('de', $request->getLocale());
142+
}
143+
144+
public function testRequestVaryByLanguageAttributeIsSetIfUsingAcceptLanguageHeader()
145+
{
146+
$request = new Request();
147+
$listener = new LocaleListener($this->requestStack, 'de', null, true, ['lt', 'de']);
148+
$event = $this->getEvent($request);
149+
150+
$listener->setDefaultLocale($event);
151+
$listener->onKernelRequest($event);
152+
$this->assertTrue($request->attributes->get('_vary_by_language'));
153+
}
154+
133155
public function testRequestSecondPreferredLocaleFromAcceptLanguageHeader()
134156
{
135157
$request = Request::create('/');

0 commit comments

Comments
 (0)