protected function resolveRequestUri() { $requestUri = parent::resolveRequestUri(); $baseUrl = $this->getBaseUrl(); if ($baseUrl) { $requestUri = substr($requestUri, strlen($baseUrl)); } $requestUriToList = explode('/', $requestUri); $lang_url = isset($requestUriToList[1]) ? $requestUriToList[1] : null; Languages::setCurrent($lang_url); if ($lang_url !== null && $lang_url === Languages::getCurrent()->url && strpos($requestUri, Languages::getCurrent()->url) === 1) { $requestUri = ($baseUrl ? $baseUrl : '') . substr($requestUri, strlen(Languages::getCurrent()->url) + 1); } return $requestUri; }
public function actionSettings() { $languages = Languages::find()->select(['url', 'name'])->all(); $model = new SettingsForm(); $model->frontend_default_language = Languages::getDefaultLanguage()->url; $model->setAttributes(ArrayHelper::map(Settings::find()->all(), 'name', 'value')); if ($model->load(Yii::$app->request->post()) && $model->validate()) { foreach ($model->attributes as $key => $value) { Settings::updateAll(['value' => (string) $value], '`name` = :key', [':key' => $key]); } Languages::setDefaultLanguage($model->frontend_default_language); Yii::$app->getSession()->setFlash('success', Yii::t('main', 'Settings successfully saved')); } return $this->render('settings', ['model' => $model, 'languages' => $languages]); }
/** * Resolve application language by checking user cookies, preferred language and profile settings */ public function beforeRequest() { if (Yii::$app->getRequest()->getCookies()->has($this->cookieName) && !Yii::$app->session->hasFlash('forceUpdateLocale')) { $userLocale = Yii::$app->getRequest()->getCookies()->getValue($this->cookieName); } else { $userLocale = Yii::$app->language; if (!Yii::$app->user->isGuest && Yii::$app->user->identity->userProfile->locale && array_key_exists(Yii::$app->user->identity->userProfile->locale, Languages::getLanguages())) { $userLocale = Yii::$app->user->getIdentity()->userProfile->locale; } elseif ($this->enablePreferredLanguage) { $userLocale = Languages::getDefault(); } } if (Yii::$app->getRequest()->get('lang_locale')) { $userLocale = Yii::$app->getRequest()->get('lang_locale'); } Yii::$app->language = $userLocale; }
public function createUrl($params) { \Yii::info(\Yii::$app->language); $lang = Languages::getLanguageByUrl(\Yii::$app->language); // Get basic URL (without language prefix) $url = parent::createUrl($params); $baseUrl = $this->getBaseUrl(); if ($baseUrl) { $url = substr($url, strlen($baseUrl)); } // Add language prefix if not default if (!$lang) { return ($baseUrl ? $baseUrl : '') . '/' . $url; } else { return ($baseUrl ? $baseUrl : '') . "/{$lang->url}{$url}"; } }
/** * @inheritdoc */ public function actions() { return ['error' => ['class' => 'yii\\web\\ErrorAction'], 'captcha' => ['class' => 'yii\\captcha\\CaptchaAction', 'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null], 'set-locale' => ['class' => 'common\\actions\\SetLocaleAction', 'locales' => array_keys(\common\models\Languages::getLanguages())]]; }
<?php use yii\helpers\Html; use yii\bootstrap\ActiveForm; /* @var $this yii\web\View */ /* @var $model common\models\Skills */ /* @var $form yii\bootstrap\ActiveForm */ ?> <div class="skill-create-form"> <?php $form = ActiveForm::begin(); ?> <?php echo \common\models\Languages::showSelectButtons(); ?> <hr/> <?php echo $form->field($model, 'title')->textInput(['maxlength' => 50, 'class' => 'form-control mlang']); ?> <?php echo $form->field($model, 'description')->textarea(['maxlength' => 1500, 'class' => 'mlang', 'id' => 'ckeditor']); ?> <?php echo $form->field($model, 'type')->dropDownList(\common\models\Skills::$TYPES); ?> <?php echo $form->field($model, 'icon_name')->textInput(); ?> <?php echo $form->field($model, 'mark')->textInput();
<div class="languages-create-form"> <?php $form = ActiveForm::begin(['options' => ['class' => 'col-md-6']]); ?> <?php echo \common\models\Languages::showSelectButtons(); ?> <hr/> <?php echo $form->field($model, 'flag')->widget(\trntv\filekit\widget\Upload::className(), ['url' => ['/file-storage/upload'], 'multiple' => false]); ?> <?php echo $form->field($model, 'name')->textInput(['maxlength' => 50, 'class' => 'form-control mlang']); ?> <?php echo $form->field($model, 'locale')->dropDownList(\common\models\Languages::getLocales($model->locale)); ?> <?php echo $form->field($model, 'active')->checkbox(); ?> <?php echo $form->field($model, 'default')->checkbox(); ?> <?php echo $form->field($model, 'sort')->textInput(); ?> <div class="form-group"> <?php echo $form->errorSummary($model); ?>
protected function resolveRequestUri() { $selected = Settings::findOne('backend_language')->value; Languages::setCurrent($selected ? $selected : Languages::getDefaultLanguage()->url); return parent::resolveRequestUri(); }
<?php use yii\bootstrap\Nav; use yii\bootstrap\NavBar; /* @var $this \yii\web\View */ /* @var $content string */ $this->beginContent('@frontend/views/layouts/_clear.php'); ?> <div class="wrap"> <?php NavBar::begin(['brandLabel' => Yii::$app->name, 'brandUrl' => Yii::$app->homeUrl, 'options' => ['class' => 'navbar-inverse navbar-fixed-top']]); ?> <?php echo Nav::widget(['options' => ['class' => 'navbar-nav navbar-right'], 'items' => \common\models\WidgetMenu::getMenuLinks('main', [['label' => Yii::$app->user->isGuest ? '' : Yii::$app->user->identity->getPublicIdentity(), 'visible' => !Yii::$app->user->isGuest, 'items' => [['label' => Yii::t('frontend', 'Settings'), 'url' => ['/user/default/index']], ['label' => Yii::t('frontend', 'Backend'), 'url' => Yii::getAlias('@backendUrl'), 'visible' => Yii::$app->user->can('manager')], ['label' => Yii::t('frontend', 'Logout'), 'url' => ['/user/sign-in/logout'], 'linkOptions' => ['data-method' => 'post']]]], ['label' => Yii::t('frontend', 'Language'), 'items' => array_map(function ($code) { return ['label' => \common\models\Languages::getLanguages()[$code], 'url' => ['/site/set-locale', 'locale' => $code], 'active' => Yii::$app->language === $code]; }, array_keys(\common\models\Languages::getLanguages()))]])]); ?> <?php NavBar::end(); ?> <?php echo $content; ?> </div> <footer class="footer"> <div class="container"> <p class="pull-left">© My Company <?php echo date('Y');
/** * Load available languages. * @return array of language data * @TODO: Shouldn't get the current language */ public static function getLanguages() { $key = 'languages'; $data = Yii::$app->cache->get($key); if ($data === false) { $model = Languages::find()->indexBy('id')->orderBy('sort')->all(); foreach ($model as $lang) { if ($lang->active && !empty($lang->name)) { $data['languages'][$lang->locale] = $lang->name; $data['flags'][$lang->locale] = self::getFlagUrl($lang); } if ($lang->default) { $data['default'] = $lang->locale; } } Yii::$app->cache->set($key, $data, 0); } self::$languages = $data['languages'] ? $data['languages'] : array(); self::$languagesFlags = $data['flags']; self::$languagesDefault = $data['default']; return self::$languages; }
<?php use yii\helpers\Html; use yii\bootstrap\ActiveForm; use yii\bootstrap\Tabs; use common\models\Languages; /* @var $this yii\web\View */ /* @var $model fonclub\menu\models\MenuItem */ /* @var $form yii\bootstrap\ActiveForm */ $languages = Languages::find()->all(); $this->registerJs("\n \$('#select-menu').on('click', function(){\n \$('#modules-menu').toggle();\n \$('#selectParams').empty();\n });\n\n \$('.menu-module-type').on('click', function(e){\n e.preventDefault();\n var url = \$(this).data('url');\n var action = \$(this).data('action');\n\n if(action !== ''){\n \$('#selectParams').load(action, function() {\n \$('#selectParams select').on('change', function(){\n var query = \$(this).find(':selected').data('query');\n \$('#menuitem-url').val(url+'?'+query);\n });\n });\n }\n else\n \$('#menuitem-url').val(url);\n });\n "); ?> <div class="menu-item-form"> <?php $form = ActiveForm::begin(); ?> <?php $form->errorSummary($model); ?> <?php foreach ($languages as $language) { $items[$language->name] = ['label' => $language->name, 'active' => Yii::$app->language == $language->url, 'content' => $form->field($model, 'title_' . $language->url)->textInput(['maxlength' => 255]), 'options' => ['id' => 'tab_' . $language->url]]; } echo Tabs::widget(['items' => $items]); ?> <?php