Добрый день.
Еще один глупый вопрос от новичка, но не знаю как быть, использую https://klisl.com/multilingual_Yii2.html, урлы формируются из слагов, которые мы задаем в админке, есть два языка, в одно урл будет : https://domen/ua/ris/kurka/ в другой версии сайта https://domen/ris/kuritsa/, как сделать так , чтобы при переключении весрий оставаться на той же странице, где было осуществленно переключение. Если бы урлы были абсолютно одинаковы , вопросов бы не возникло...
Оставаться на том урле при смене языка, в случае если урлы абсолютно разные
Re: Оставаться на том урле при смене языка, в случае если урлы абсолютно разные
пиши в сессию/печенье версию и т.д.
потом проверять в common\components\UrlManager.php
по сути, будет срабатывать сессия поверх адресной строки
но, мне кажется это приведет к проблемам
потом проверять в common\components\UrlManager.php
по сути, будет срабатывать сессия поверх адресной строки
но, мне кажется это приведет к проблемам
Re: Оставаться на том урле при смене языка, в случае если урлы абсолютно разные
Код: Выделить всё
<?php
namespace frontend\controllers;
use common\components\Languages;
use Yii;
use yii\web\Controller;
use yii\web\Cookie;
class BaseController extends Controller
{
public function __construct($id, $module = null)
{
// Устанавливаем language если он есть либо в GET, либо в SESSION, либо в COOKIE
if ($short_lang = Yii::$app->request->get('app_language')) {
$full_lang = Languages::getLanguage($short_lang);
Yii::$app->language = $full_lang;
Yii::$app->session->set('app_language', $full_lang);
Yii::$app->response->cookies->add(new Cookie([
'name' => 'app_language',
'value' => $full_lang,
'expire' => time() + (60 * 60 * 24 * 365), // (1 year)
]));
} elseif ($full_lang = Yii::$app->request->cookies->getValue('app_language')) {
Yii::$app->language = $full_lang;
} elseif ($full_lang = Yii::$app->session->get('app_language')) {
Yii::$app->language = $full_lang;
}
// Иначе остается то что в конфиге
parent::__construct($id, $module);
}
Код: Выделить всё
class Languages
{
public static function getLanguage($short_code)
{
$langs = [
'ru' => 'ru-RU',
'en' => 'en-GB',
'zh' => 'zh-CN',
// 'de' => 'de-DE',
// 'fr' => 'fr-FR',
// 'es' => 'es-ES',
// 'it' => 'it-IT',
];
if (!isset($langs[$short_code])) {
throw new InvalidParamException('Не определен язык в справочнике ' . get_called_class());
}
return $langs[$short_code];
}
Код: Выделить всё
class UrlManager extends \yii\web\UrlManager
{
public function createUrl($params)
{
if (empty($params['app_language'])) {
if ($full_lang = Yii::$app->session->get('app_language')) {
} elseif ($full_lang = Yii::$app->request->cookies->getValue('app_language')) {
} else {
$full_lang = substr(Yii::$app->language, 0, 2);
}
$params['app_language'] = $full_lang;
}
return parent::createUrl($params);
}