public static function setLanguage($cookieDays = 180) { if (Yii::app()->request->getPost('languageSelector') !== null && in_array($_POST['languageSelector'], self::getLanguagesList(), true)) { Yii::app()->setLanguage($_POST['languageSelector']); $cookie = new CHttpCookie('language', $_POST['languageSelector']); $cookie->expire = time() + 60 * 60 * 24 * $cookieDays; Yii::app()->request->cookies['language'] = $cookie; } else { if (isset(Yii::app()->request->cookies['language']) && in_array(Yii::app()->request->cookies['language']->value, self::getLanguagesList(), true)) { Yii::app()->setLanguage(Yii::app()->request->cookies['language']->value); } else { if (isset(Yii::app()->request->cookies['language'])) { // Invalid language unset(Yii::app()->request->cookies['language']); } else { Yii::import('ext.EGeoIP'); try { $geoIp = new EGeoIP(); $geoIp->locate(); $countryCode = strtolower($geoIp->getCountryCode()); if (!in_array($countryCode, self::getLanguagesList(), true)) { return; } Yii::app()->setLanguage($countryCode); $cookie = new CHttpCookie('language', $countryCode); $cookie->expire = time() + 60 * 60 * 24 * $cookieDays; Yii::app()->request->cookies['language'] = $cookie; } catch (Exception $exception) { Yii::log($exception->__toString(), 'error', 'app.widgets.languageSelector'); } } } } }