/** * Resolve * Resolves the current request into a route and the associated parameters. * Sets default application language * @return array the first element is the route, and the second is the associated parameters. * @throws \yii\web\NotFoundHttpException if the request cannot be resolved. */ public function resolve() { $resolve = parent::resolve(); $languages = Language::getDb()->cache(function ($db) { return Language::find()->where(['is_active' => true])->asArray()->all(); }); Yii::$app->params['languages'] = ArrayHelper::map($languages, 'code', 'code'); Yii::$app->language = $this->getCurrentLang(); return $resolve; }
/** * Render block content * @return string */ public function run() { $languages = Language::getDb()->cache(function ($db) { $query = Language::find(); if (!$this->showDisabled) { $query->where(['is_active' => true]); } return $query->asArray()->all(); }); $list = []; foreach ($languages as $lang) { if ($lang['code'] == Yii::$app->language) { $current = $lang; } else { $list[] = ['code' => $lang['code'], 'name' => $lang['name'], 'flag' => $lang['flag'], 'url' => Url::toRoute(['/multilang/change/set', 'lang' => $lang['code']])]; } } return $this->render($this->layout, ['languages' => $list, 'current' => $current]); }