@@ -353,21 +353,7 @@ protected function processLocaleUrl($normalized)
353
353
Yii::$ app ->language = $ language ;
354
354
Yii::trace ("Language code found in URL. Setting application language to ' $ language'. " , __METHOD__ );
355
355
if ($ this ->enableLanguagePersistence ) {
356
- Yii::$ app ->session [$ this ->languageSessionKey ] = $ language ;
357
- Yii::trace ("Persisting language ' $ language' in session. " , __METHOD__ );
358
- if ($ this ->languageCookieDuration ) {
359
- $ cookie = new Cookie (array_merge (
360
- ['httpOnly ' => true ],
361
- $ this ->languageCookieOptions ,
362
- [
363
- 'name ' => $ this ->languageCookieName ,
364
- 'value ' => $ language ,
365
- 'expire ' => time () + (int ) $ this ->languageCookieDuration ,
366
- ]
367
- ));
368
- Yii::$ app ->getResponse ()->getCookies ()->add ($ cookie );
369
- Yii::trace ("Persisting language ' $ language' in cookie. " , __METHOD__ );
370
- }
356
+ $ this ->persistLanguage ($ language );
371
357
}
372
358
373
359
// "Reset" case: We called e.g. /fr/demo/page so the persisted language was set back to "fr".
@@ -380,12 +366,7 @@ protected function processLocaleUrl($normalized)
380
366
} else {
381
367
$ language = null ;
382
368
if ($ this ->enableLanguagePersistence ) {
383
- $ language = Yii::$ app ->session ->get ($ this ->languageSessionKey );
384
- $ language !==null && Yii::trace ("Found persisted language ' $ language' in session. " , __METHOD__ );
385
- if ($ language ===null ) {
386
- $ language = $ this ->_request ->getCookies ()->getValue ($ this ->languageCookieName );
387
- $ language !==null && Yii::trace ("Found persisted language ' $ language' in cookie. " , __METHOD__ );
388
- }
369
+ $ language = $ this ->loadPersistedLanguage ();
389
370
}
390
371
if ($ language ===null && $ this ->enableLanguageDetection ) {
391
372
foreach ($ this ->_request ->getAcceptableLanguages () as $ acceptable ) {
@@ -420,6 +401,42 @@ protected function processLocaleUrl($normalized)
420
401
}
421
402
}
422
403
404
+ /**
405
+ * @param string $language the language code to persist in session and cookie
406
+ */
407
+ protected function persistLanguage ($ language )
408
+ {
409
+ Yii::$ app ->session [$ this ->languageSessionKey ] = $ language ;
410
+ Yii::trace ("Persisting language ' $ language' in session. " , __METHOD__ );
411
+ if ($ this ->languageCookieDuration ) {
412
+ $ cookie = new Cookie (array_merge (
413
+ ['httpOnly ' => true ],
414
+ $ this ->languageCookieOptions ,
415
+ [
416
+ 'name ' => $ this ->languageCookieName ,
417
+ 'value ' => $ language ,
418
+ 'expire ' => time () + (int ) $ this ->languageCookieDuration ,
419
+ ]
420
+ ));
421
+ Yii::$ app ->getResponse ()->getCookies ()->add ($ cookie );
422
+ Yii::trace ("Persisting language ' $ language' in cookie. " , __METHOD__ );
423
+ }
424
+ }
425
+
426
+ /**
427
+ * @return string|null the persisted language code or null if none found
428
+ */
429
+ protected function loadPersistedLanguage ()
430
+ {
431
+ $ language = Yii::$ app ->session ->get ($ this ->languageSessionKey );
432
+ $ language !==null && Yii::trace ("Found persisted language ' $ language' in session. " , __METHOD__ );
433
+ if ($ language ===null ) {
434
+ $ language = $ this ->_request ->getCookies ()->getValue ($ this ->languageCookieName );
435
+ $ language !==null && Yii::trace ("Found persisted language ' $ language' in cookie. " , __METHOD__ );
436
+ }
437
+ return $ language ;
438
+ }
439
+
423
440
/**
424
441
* Tests whether the given code matches any of the configured languages.
425
442
*
0 commit comments