Предыстория: есть сайт
vaigmania.ru
У него меняется язык сайта, замещая переменную. То есть, когда выбирается другой язык, происходит POST запрос, который подставляет переменной иное значение, которое хранится в печеньках ;) [куки] на сутки, потом язык слетает.
По тому же принципу я хочу менять язык на Yii2 advanced
в
$cache = \Yii::app()->cache;
я буду хранить кеш языка, но хотелось бы чтобы держалось не меньше года.
Как хранить кеш на чистом php - я умею и знаю, с конструкциями Yii cache у нас пока вражда и недопонимание.
Как я вижу этот способ:
'language' => [
'class' => 'app\modul\languages\Lang',
'languages' => [ //Языки используемые в приложении
'English' => 'en',
'Русский' => 'ru',
], // или Lang::getArrayLang()
'default_language' => 'ru', //основной язык (по-умолчанию)
],
--------------------------
Альтернатива для расширяемости функционала:
public function getArrayLang()
{
return [ //Языки используемые в приложении
'English' => 'en',
'Русский' => 'ru',
]; // если понадобится можно впихнуть массив из БД, но пока такой нужды нет
}
-------------------------------------------------------------------------------------
То есть создать класс, который будет отслеживать и обрабатывать событие, по клику:
$items = Yii::$app->language->languages;
<?=Html::dropDownList('lang', 'null', $items);?>
Как-то так будет выглядеть сам класс:
<?php
...
namespace \tram\pam\pam;
...
use Yii;
class Lang extends \yii\web\UrlManager
{
static $lang; //строка вида ru|en|
public $default_language
public $languages
public function langManager()
{
$params = Yii::$app->request->post();
$cache = \Yii::app()->cache;
if (empty($params['lang'])) {
//текущий язык приложения
$curentLang = Yii::$app->language->default_language;
} else {
$cache->set('lang');
$curentLang = $cache->get('lang')
}
return $curentLang;
}
}
То есть мне нужно получать
<?=Lang::langManager();?>
Для
<?=Yii::$app->language;?>
, но только для frontend
Вопрос: В верном ли направлении я иду? Как получать язык отдельно для backend и отдельно от frontend?
Что дописать, чтобы кеш на язык длился год, или около года? Хранил ли кто-то язык через кеш, не прибегая к смене урлов?
В основном я вижу про мультиязычность сайта, что они подставляют в ссылку нужный адрес, создавая отдельные страницы.
Мне не нужны отдельные страницы, так как через render и я сам могу получить любую страницу или кусок страницы в зависимости от значения текущего языка.
Смысл в том чтобы через POST запрос отправлять в кеш "ru" или "en"
Я вообще хотел сделать через:
<?=Html::a('EN', '/siteen', ['data-method' => 'post']);?>
<?=Html::a('RU', '/siteru', ['data-method' => 'post']);?>
Но это может означать привязку к каждому контроллеру, в поведении - что не совсем адекватно.
В общем, какие мысли, советы, соображения на этот счёт?