@@ -117,6 +117,85 @@ public function testRequestLocaleIsNotOverridden()
117
117
$ this ->assertEquals ('de ' , $ request ->getLocale ());
118
118
}
119
119
120
+ public function testRequestPreferredLocaleFromAcceptLanguageHeader ()
121
+ {
122
+ $ request = Request::create ('/ ' );
123
+ $ request ->headers ->set ('Accept-Language ' , ['Accept-Language: fr-FR,fr;q=0.9,en-GB;q=0.8,en;q=0.7,en-US;q=0.6,es;q=0.5 ' ]);
124
+
125
+ $ listener = new LocaleListener ($ this ->requestStack , 'de ' , null , true , ['de ' , 'fr ' ]);
126
+ $ event = $ this ->getEvent ($ request );
127
+
128
+ $ listener ->setDefaultLocale ($ event );
129
+ $ listener ->onKernelRequest ($ event );
130
+ $ this ->assertEquals ('fr ' , $ request ->getLocale ());
131
+ }
132
+
133
+ public function testRequestSecondPreferredLocaleFromAcceptLanguageHeader ()
134
+ {
135
+ $ request = Request::create ('/ ' );
136
+ $ request ->headers ->set ('Accept-Language ' , ['Accept-Language: fr-FR,fr;q=0.9,en-GB;q=0.8,en;q=0.7,en-US;q=0.6,es;q=0.5 ' ]);
137
+
138
+ $ listener = new LocaleListener ($ this ->requestStack , 'de ' , null , true , ['de ' , 'en ' ]);
139
+ $ event = $ this ->getEvent ($ request );
140
+
141
+ $ listener ->setDefaultLocale ($ event );
142
+ $ listener ->onKernelRequest ($ event );
143
+ $ this ->assertEquals ('en ' , $ request ->getLocale ());
144
+ }
145
+
146
+ public function testDontUseAcceptLanguageHeaderIfNotEnabled ()
147
+ {
148
+ $ request = Request::create ('/ ' );
149
+ $ request ->headers ->set ('Accept-Language ' , ['Accept-Language: fr-FR,fr;q=0.9,en-GB;q=0.8,en;q=0.7,en-US;q=0.6,es;q=0.5 ' ]);
150
+
151
+ $ listener = new LocaleListener ($ this ->requestStack , 'de ' , null , false , ['de ' , 'en ' ]);
152
+ $ event = $ this ->getEvent ($ request );
153
+
154
+ $ listener ->setDefaultLocale ($ event );
155
+ $ listener ->onKernelRequest ($ event );
156
+ $ this ->assertEquals ('de ' , $ request ->getLocale ());
157
+ }
158
+
159
+ public function testRequestUnavailablePreferredLocaleFromAcceptLanguageHeader ()
160
+ {
161
+ $ request = Request::create ('/ ' );
162
+ $ request ->headers ->set ('Accept-Language ' , ['Accept-Language: fr-FR,fr;q=0.9,en-GB;q=0.8,en;q=0.7,en-US;q=0.6,es;q=0.5 ' ]);
163
+
164
+ $ listener = new LocaleListener ($ this ->requestStack , 'de ' , null , true , ['de ' , 'it ' ]);
165
+ $ event = $ this ->getEvent ($ request );
166
+
167
+ $ listener ->setDefaultLocale ($ event );
168
+ $ listener ->onKernelRequest ($ event );
169
+ $ this ->assertEquals ('de ' , $ request ->getLocale ());
170
+ }
171
+
172
+ public function testRequestNoLocaleFromAcceptLanguageHeader ()
173
+ {
174
+ $ request = Request::create ('/ ' );
175
+ $ request ->headers ->set ('Accept-Language ' , ['Accept-Language: fr-FR,fr;q=0.9,en-GB;q=0.8,en;q=0.7,en-US;q=0.6,es;q=0.5 ' ]);
176
+
177
+ $ listener = new LocaleListener ($ this ->requestStack , 'de ' , null , true );
178
+ $ event = $ this ->getEvent ($ request );
179
+
180
+ $ listener ->setDefaultLocale ($ event );
181
+ $ listener ->onKernelRequest ($ event );
182
+ $ this ->assertEquals ('de ' , $ request ->getLocale ());
183
+ }
184
+
185
+ public function testRequestAttributeLocaleNotOverridenFromAcceptLanguageHeader ()
186
+ {
187
+ $ request = Request::create ('/ ' );
188
+ $ request ->attributes ->set ('_locale ' , 'it ' );
189
+ $ request ->headers ->set ('Accept-Language ' , ['Accept-Language: fr-FR,fr;q=0.9,en-GB;q=0.8,en;q=0.7,en-US;q=0.6,es;q=0.5 ' ]);
190
+
191
+ $ listener = new LocaleListener ($ this ->requestStack , 'de ' , null , true , ['fr ' , 'en ' ]);
192
+ $ event = $ this ->getEvent ($ request );
193
+
194
+ $ listener ->setDefaultLocale ($ event );
195
+ $ listener ->onKernelRequest ($ event );
196
+ $ this ->assertEquals ('it ' , $ request ->getLocale ());
197
+ }
198
+
120
199
private function getEvent (Request $ request ): RequestEvent
121
200
{
122
201
return new RequestEvent ($ this ->createMock (HttpKernelInterface::class), $ request , HttpKernelInterface::MAIN_REQUEST );
0 commit comments