'beforeRequest' ]; } /** * Resolve application language by checking user cookies, preferred language and profile settings */ public function beforeRequest() { if (!Yii::$app instanceof Application) { return true; } $hasCookie = Yii::$app->getRequest()->getCookies()->has($this->cookieName); $forceUpdate = Yii::$app->session->hasFlash('forceUpdateLocale'); if ($hasCookie && !$forceUpdate) { $locale = Yii::$app->getRequest()->getCookies()->getValue($this->cookieName); } else { $locale = $this->resolveLocale(); } Yii::$app->language = $locale; } public function resolveLocale() { $locale = Yii::$app->language; if (!Yii::$app->user->isGuest && Yii::$app->user->identity->profile->locale) { $locale = Yii::$app->user->getIdentity()->profile->locale; } elseif ($this->enablePreferredLanguage) { $locale = Yii::$app->request->getPreferredLanguage($this->getAvailableLocales()); } return $locale; } /** * @return array */ protected function getAvailableLocales() { return array_keys(Plugin::$language); } }