I want to change the language by user choice but nothing change
This is my action:
/**
* To change the language by user
* @param string $lang selected language by user, default is persian language
* @return \yii\web\Response
*/
public function actionChangeLanguage($lang = 'fa-IR'){
$allowed_languages = ['fa-IR', 'en-US'];
$selected_language = in_array($lang, $allowed_languages) ? $lang : 'fa-IR';
\Yii::$app->language = $selected_language;
return isset($_SERVER['HTTP_REFERER']) ? $this->redirect($_SERVER['HTTP_REFERER']) : $this->redirect(Yii::$app->homeUrl);
}
But when I try to check the selected language, it is the default lang yet:
1- Created a new controller named frontend\controllers\BaseController:
<?php
namespace frontend\controllers;
use yii\web\Controller;
use Yii;
class BaseController extends Controller
{
public function beforeAction($action)
{
if(!parent::beforeAction($action))
return false;
$session = Yii::$app->session;
!$session->isActive ? $session->open() : $session->close();
Yii::$app->language = $session->get('language');
$session->close();
return true ;
}
}
2- Extended my controllers from BaseController except yii\web\Controller
3- Use this action to change the language:
/**
* To change the language by user
* @param string $lang selected language by user, default is persian language
* @return \yii\web\Response
*/
public function actionChangeLanguage($lang = 'fa-IR'){
$allowed_languages = ['fa-IR', 'en-US'];
$selected_language = in_array($lang, $allowed_languages) ? $lang : 'fa-IR';
$session = Yii::$app->session;
!$session->isActive ? $session->open() : $session->close();
$session->set('language', $selected_language);
$session->close();
return isset($_SERVER['HTTP_REFERER']) ? $this->redirect($_SERVER['HTTP_REFERER']) : $this->redirect(Yii::$app->homeUrl);
}