Change language [SOLVED]

Hi there

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:




\yii\helpers\VarDumper::dump(\Yii::$app->language, 10, true);



You seem to forget the fact that PHP has a very short life cycle. ::)

Check this tutorial:

Thanks

Solved and this is the code:

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);

    }