You are viewing revision #1 of this wiki article.
This is the latest version of this article.
common\components\LanguageSelector.php
<?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
<?php
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/
Thanks for sharing
Thanks for sharing this, will try in my new projects.
If you have any questions, please ask in the forum instead.
Signup or Login in order to comment.