* @link http://skeeks.com/ * @copyright 2010 SkeekS (СкикС) * @date 25.04.2016 */ namespace common\widgets\detectLanguage; use common\widgets\detectLanguage\assets\DetectLanguageAsset; use yii\base\Widget; use yii\helpers\Json; use yii\web\Cookie; /** * @property string $preferredLanguage * @property bool $isSavedLanguage * @property bool $isDifferent * * Class DetectLanguageWidget * @package common\widgets */ class DetectLanguageWidget extends Widget { public $cookieName = 'language'; public $showDelay = 5000; public $expire = 60*60*24; // 1 day public $viewFile = 'detect-language'; public function init() {} public function getPreferredLanguage() { return \Yii::$app->request->getPreferredLanguage(array_keys(\Yii::$app->cms->languages)); } /** * @return bool */ public function getIsSavedLanguage() { return isset(\Yii::$app->request->cookies[$this->cookieName]); } /** * @return bool */ public function getIsDifferent() { return (bool) ($this->preferredLanguage != \Yii::$app->language); } public function run() { parent::run(); $options = []; $options['preferredLanguage'] = $this->preferredLanguage; $options['isSavedLanguage'] = $this->isSavedLanguage; $options['isDifferent'] = $this->isDifferent; $options['showDelay'] = $this->showDelay; $options['appLanguage'] = \Yii::$app->language; $options['id'] = $this->id; $jsOptions = Json::encode($options); DetectLanguageAsset::register($this->view); $this->view->registerJs(<<isSavedLanguage) { $languageCookie = new Cookie([ 'name' => $this->cookieName, 'value' => \Yii::$app->language, 'domain' => '.' . \Yii::$app->project->main_domain, //'expire' => time() + 60 * 60 * 24 * 30, // 30 days 'expire' => (int) \Yii::$app->formatter->asTimestamp(time()) + $this->expire, // 30 days ]); \Yii::$app->response->cookies->add($languageCookie); } return $this->render($this->viewFile); } }