common\components\LanguageSelector.php
namespace common\components; use yii\base\BootstrapInterface; use yii\web\Cookie; use yii\base\Exception; class LanguageSelector implements BootstrapInterface { public $supportedLanguages = []; public function bootstrap($app) { $cookies = $app->response->cookies; $languageNew = $app->request->get('language'); if($languageNew !== null) { if (!in_array($languageNew, $this->supportedLanguages)) { throw new Exception('Invalid your selected language.'); } $cookies->add(new Cookie([ 'name' => 'language', 'value' => $languageNew, 'expire' => time() + 60 * 60 * 24 * 30, // 30 days ])); $app->language = $languageNew; //echo 'test1'; } else { $preferedLanguage = isset($app->request->cookies['language']) ? (string) $app->request->cookies['language'] : null; if(empty($preferedLanguage)) { $preferedLanguage = $app->request->getPreferedLanguage($this->supportedLanguages); } $app->language = $preferedLanguage; } } }
frontend/config/main.php in component section update bootstrp
'bootstrap' => ['log', [ 'class' => 'common\components\LanguageSelector', 'supportedLanguages' => ['en-US', 'th-TH'], ] ],
in main layout of theme insert selector code
echo Html::a('Th', Url::current(['language' => 'th-TH'])); echo Html::a('En', Url::current(['language' => 'en-US']));
reference: https://yii2-cookbook.readthedocs.org/i18n-selecting-application-language/