/** * Этот метод должен вызываться при инициализации контроллера, он * делает редирект (если нужно) на выбранную языковую версию */ public static function init() { // Определяем текущий язык self::detectClientLangId(); $languageInurl = Yii::$app->request->languageInurl; $inurl = $languageInurl !== null ? Languages::all()->getConfigByParam('url', $languageInurl) : null; $current = Languages::all()->getConfigCurrent(); $default = Languages::all()->getConfigDefault(); $inurl_real_id = $inurl ? $inurl['id'] : $default['id']; if ($current !== null) { if ($inurl_real_id !== $current['id']) { // Префикс в ссылке и текущий язык не совпадают if (Yii::$app->urlManager->multilanguageHideDefaultPrefix && YII_ENV !== 'test' && Yii::$app->getRequest()->getMethod() === 'GET' && !Yii::$app->getRequest()->isAjax) { $url = \yii\helpers\Url::current(['x-language-url' => $current['url']]); Yii::$app->getResponse()->redirect($url)->send(); Yii::$app->end(); } } else { if (Yii::$app->urlManager->multilanguageHideDefaultPrefix && $inurl && $inurl['id'] === $default['id']) { $url = \yii\helpers\Url::current(['x-language-url' => false]); Yii::$app->getResponse()->redirect($url)->send(); Yii::$app->end(); } } } else { Yii::error('Unexpected null in $current language.', 'multilanguage'); } if ($current) { Yii::$app->language = $current['locale']; } }
public function getDataCellValue($model, $key, $index) { $list = Languages::all()->getConfig(); $items = []; foreach ($list as $id => $lang) { $items[] = Html::a($lang['name'], ['update', 'id' => $model->id, 'lang_id' => $lang['id']], ['class' => $this->issetContent($model, $lang['id']) ? 'btn btn-primary' : 'btn btn-default']); } return implode(' ', $items); }
public function getPathInfo() { // Добавить кэш $pathInfo (не забыть про setPathInfo) $pathInfo = parent::getPathInfo(); $pattern = Languages::all()->pattern(); if (preg_match("/^({$pattern})\\/(.*)/", $pathInfo, $arr)) { $this->lang_url = $arr[1]; $pathInfo = $arr[count($arr) - 1]; } return $pathInfo; }
public function createUrl($params) { $default = Languages::all()->getConfigDefault(); $current = Languages::all()->getConfigCurrent(); $url_prefix = null; if (isset($params['x-language-url']) && !$params['x-language-url']) { $params['x-language-url'] = $default['url']; } if (isset($params['x-language-url']) && Languages::all()->getConfigByParam('url', $params['x-language-url'])) { $url_prefix = $params['x-language-url'] === $default['url'] && $this->multilanguageHideDefaultPrefix ? '' : $params['x-language-url']; unset($params['x-language-url']); } // echo "url_prefix: "; // var_export($url_prefix); // echo "\n"; // // print_r($params); // exit; if ($url_prefix === null) { // Иначе подставляем текущий язык $url_prefix = Yii::$app->request->getLanguageInurl(); } $url = parent::createUrl($params); if ($url_prefix) { $url = '/' . $url_prefix . $url; } return $url; }