public function getLangUrl() { if ($this->_lang_url === null) { $this->_lang_url = $this->getUrl(); $url_list = explode('/', $this->_lang_url); $lang_url = isset($url_list[1]) ? $url_list[1] : null; if (isset(Yii::$app->request->cookies['lang']) && empty($lang_url) && Yii::$app->request->cookies->getValue('lang') != Lang::getDefaultLang()->url) { $lang_url = Yii::$app->request->cookies->getValue('lang'); } Lang::setCurrent($lang_url); if ($lang_url !== null && $lang_url === Lang::getCurrent()->url && strpos($this->_lang_url, Lang::getCurrent()->url) === 1) { $this->_lang_url = substr($this->_lang_url, strlen(Lang::getCurrent()->url) + 1); } } return $this->_lang_url; }
public function createUrl($params) { //Если не указан параметр языка, то работаем с текущим языком $lang = Lang::getCurrent(); //Получаем сформированный URL(без префикса идентификатора языка) $url = parent::createUrl($params); //Добавляем к URL префикс - буквенный идентификатор языка if ($lang->url != Lang::getDefaultLang()->url) { if ($url == '/') { return '/' . $lang->url; } else { return '/' . $lang->url . $url; } } else { if ($url == '/') { return '/'; } else { return $url; } } }
public function beforeAction($action) { if (isset(Yii::$app->request->cookies['lang']) && Yii::$app->request->cookies->getValue('lang') != Lang::getDefaultLang()->url) { if (Yii::$app->request->Url == '/') { $this->redirect('/' . Yii::$app->request->cookies->getValue('lang') . '/'); } elseif (strpos(Yii::$app->request->Url, '/' . Lang::getDefaultLang()->url . '/') !== false) { $this->redirect(str_replace(Lang::getDefaultLang()->url . '/', '', Yii::$app->request->Url)); } } if (empty(Yii::$app->redis->get('translate_' . Yii::$app->language . '_text'))) { Yii::$app->redis->setex('translate_' . Yii::$app->language . '_text', 1800, file_get_contents(Yii::getAlias('@appFolder') . '/lang/' . Yii::$app->language . '/text/words.json')); } if (empty(Yii::$app->redis->get('translate_' . Yii::$app->language . '_messages'))) { Yii::$app->redis->setex('translate_' . Yii::$app->language . '_messages', 1800, file_get_contents(Yii::getAlias('@appFolder') . '/lang/' . Yii::$app->language . '/messages/words.json')); } if (empty($this->text)) { $this->text = json_decode(Yii::$app->redis->get('translate_' . Yii::$app->language . '_text'), true); } if (empty($this->messages)) { $this->messages = json_decode(Yii::$app->redis->get('translate_' . Yii::$app->language . '_messages'), true); } return parent::beforeAction($action); }