@@ -353,21 +353,7 @@ protected function processLocaleUrl($normalized)
353353 Yii::$ app ->language = $ language ;
354354 Yii::trace ("Language code found in URL. Setting application language to ' $ language'. " , __METHOD__ );
355355 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 );
371357 }
372358
373359 // "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)
380366 } else {
381367 $ language = null ;
382368 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 ();
389370 }
390371 if ($ language ===null && $ this ->enableLanguageDetection ) {
391372 foreach ($ this ->_request ->getAcceptableLanguages () as $ acceptable ) {
@@ -420,6 +401,42 @@ protected function processLocaleUrl($normalized)
420401 }
421402 }
422403
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+
423440 /**
424441 * Tests whether the given code matches any of the configured languages.
425442 *
0 commit comments