/** * Tries to determine ID of the current user's language by using cookies or browser language * @return integer|null Null - could not determine the language */ public static function run() { // We are looking for language in the user's cookie if (isset($_COOKIE['x-language-id'])) { $isset = LangHelper::getLanguageByParam('id', $_COOKIE['x-language-id']); if ($isset !== null) { return $isset['id']; } } // Let's look at the language of the browser if (getenv('HTTP_ACCEPT_LANGUAGE')) { $arr = explode(';', getenv('HTTP_ACCEPT_LANGUAGE')); foreach ($arr as $val) { $val = preg_replace("/^q=[\\d\\.]+,?/", '', $val); $isset = LangHelper::getLanguageByParam('locale', substr($val, 0, 2)); if ($isset !== null) { return $isset['id']; } } } // Default language $lang_id = LangHelper::getLanguage('id'); if ($lang_id !== null) { return $lang_id; } }
/** * Returns current link language * @return array|null */ public static function detectLinkLang() { $languageInurl = Yii::$app->request->languageInurl; if ($languageInurl) { $current = LangHelper::getLanguageByParam('url', $languageInurl); } else { $current = LangHelper::getLanguageByParam('default', true); } return $current; }
public function createUrl($params) { // Url's language such as "en" $url_lang = Yii::$app->language; // If isset lang param if (isset($params['x-language-url'])) { // Do not change url if ($params['x-language-url'] === false) { unset($params['x-language-url']); return parent::createUrl($params); } // If exists language $xLang = LangHelper::getLanguageByParam('url', $params['x-language-url']); if ($xLang) { $url_lang = $xLang['url']; } } $current = LangHelper::getLanguageByParam('locale', $url_lang); $isDefault = isset($current['default']) && $current['default']; // Delete if is pretty url if ($this->enablePrettyUrl || $isDefault) { unset($params['x-language-url']); } $url = parent::createUrl($params); if ($current) { // Is curent language // Pretty url if ($this->enablePrettyUrl && !$this->showScriptName) { $pattern = "/^" . preg_quote($this->baseUrl, '/') . "/"; $replaceTo = $this->baseUrl; if (!$isDefault) { $replaceTo .= '/' . $url_lang; } $url = preg_replace($pattern, $replaceTo, $url); } else { if ($this->enablePrettyUrl && $this->showScriptName) { // Pretty url with showScriptName $pattern = "/^" . preg_quote($this->scriptUrl, '/') . "/"; $replaceTo = $this->baseUrl; if (!$isDefault) { $replaceTo .= '/' . $url_lang; } $url = preg_replace($pattern, $replaceTo, $url); } } } return $url; }
public function getPathInfo() { $pathInfo = parent::getPathInfo(); $pattern = LangHelper::pattern(); if (preg_match("/^({$pattern})\\/(.*)/", $pathInfo, $arr)) { $this->lang_url = $arr[1]; $pathInfo = $arr[count($arr) - 1]; } else { if (isset($this->queryParams['x-language-url']) && LangHelper::getLanguageByParam('url', $this->queryParams['x-language-url'])) { // If enablePrettyUrl===false $this->lang_url = $this->queryParams['x-language-url']; } else { $this->lang_url = null; } } return $pathInfo; }