Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
if(isset($_GET['language'])) {
Yii::app()->language = $_GET['language'];
echo 'Your locale: '.Yii::app()->language
eng.example.com и заменить его на rus.example.com, которого в системе может и не быть.class LanguageBehavior extends CBehavior
{
public function attach($owner)
{
$owner->attachEventHandler('onBeginRequest', array($this, 'handleLanguageBehavior'));
}
public function handleLanguageBehavior($event)
{
$app = Yii::app();
$user = $app->user;
if (isset($_GET['_lang']))
{
$app->language = $_GET['_lang'];
$user->setState('_lang', $_GET['_lang']);
$cookie = new CHttpCookie('_lang', $_GET['_lang']);
$cookie->expire = time() + (60 * 60 * 24 * 365); // (1 year)
$app->request->cookies['_lang'] = $cookie;
/*
* другой код, например обновление кеша некоторых компонентов, которые изменяются при смене языка
*/
}
else if ($user->hasState('_lang'))
$app->language = $user->getState('_lang');
else if (isset($app->request->cookies['_lang']))
$app->language = $app->request->cookies['_lang']->value;
}
}
'behaviors' => array(
...
'onBeginRequest' => array(
'class' => 'application.components.behaviors.LanguageBehavior'
),
),
5. Редактируем Конфигационный файл приложения
mysupersite.ru/ru/contacts для русского языка
mysupersite.ru/en/contacts для английского языка
class AdminModule extends CWebModule {
public function init() {
Yii::app()->getUrlManager()->addRules(
array(
'<language:(ru|ua|en)>/admin' => 'admin',
'<language:(ru|ua|en)>/admin/<controller:\w+>' => 'admin/<controller>',
'<language:(ru|ua|en)>/admin/<controller:\w+>/<action:\w+>' => 'admin/<controller>/<action>',
));
...
'urlManager'=>array(
...
'rules'=>array(
...
'<language:(ru|ua|en)>/<module:\w+>/<controller:\w+>/<action:\w+>/<id:\d+>' => '<module>/<controller>/<action>/<id>',
'<language:(ru|ua|en)>/<module:\w+>/<controller:\w+>/<action:\w+>' => '<module>/<controller>/<action>',
...
),
),
Yii и мультиязычный сайт. Правильные URL и гибкость в работе