Проблема: не меняется язык при изменении его в контроллере, а если менять его прямо во вьюхе, то язык меняется.
Вообщем пытаюсь прикрутить многоязычность к yii2. В yii2 текущий язык меняется через:
\Yii::$app->language = "ru-RU";
В данный момент у меня в главном лейауте(/view/layouts/main) есть 2 изображения со ссылками, которые присутствуют на всех страницах:
<a id="enLang" href="/site/lang?lang=en"><img src="/images/england.png" class="image-responsive" /></a>
<a id="ruLang" href="/site/lang?lang=ru"><img src="/images/russia.png" class="image-responsive" /></a>
При нажатии на ссылку нас перебрасывает на action lang контроллера site. Здесь мы меняем язык в зависимости от параметра $_GET['lang'] и делаем редирект пользователя на страницу где он был.
public function actionLang(){
switch ($_GET['lang']){
case 'ru':
\Yii::$app->language = "ru-RU";
break;
case 'en':
\Yii::$app->language = "en-EN";
break;
}
return $this->redirect(Url::previous());
}
Но язык НЕ меняется. Также если менять его в layout(view/layouts/main), то тоже не меняется. Однако если менять его прямо во вьюхе, то все работает.
Вопрос: Почему язык не меняется в контроллере? Как сделать правильно/красиво?
Thanks in advance
P.S. В данный момент сделано так: при нажатии на ссылку с языком, в сессию записывается какой язык выбрал пользователь и делается редирект обратно на страницу. А во вьюхе код, который проверяет, если переменная сессии lang не пустая, то меняем язык . Но в каждой вьюхе добавлять такой код глупо.
if(!empty(\Yii::$app->session["lang"])){
\Yii::$app->language = \Yii::$app->session["lang"];
}