/**
  * Этот метод должен вызываться при инициализации контроллера, он 
  * делает редирект (если нужно) на выбранную языковую версию
  */
 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;
 }