Многоязычность и пути

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Многоязычность и пути

Сообщение Ekstazi »

Здраствуйте, разрабатываю многоязычный сайт. Хочу все ссылки на сайте сделать вида site.ru/index.php/rus/site/index , site.ru/index.php/en/site/index.
Для этого я в конфиге задал:

Код: Выделить всё

                'urlManager'=>array(
                    'urlFormat'=>'path',
                    'rules'=>array(
                      'rus/<_c>/<_a>'=>'<_c>/<_a>/lang/rus/',
                      'en/<_c>/<_a>'=>'<_c>/<_a>/lang/en/',
                    ), 
Потом я определил BaseController:

Код: Выделить всё

class BaseController extends CController{
    //put your code here
    public function init(){
        parent::init();
        //print_r();
        Yii::app()->urlManager->urlSuffix='/lang/'.Yii::app()->language;

    }
} 
И все контролеры своего сайта наследую от BaseController .
Но возникла проблема, ссылку не преобразуются в формат:
site.ru/index.php/rus/site/index , site.ru/index.php/en/site/index
А выглядят так:
site.ru/index.php/site/index/lang/rus , site.ru/index.php/site/index/lang/en

Есть ли какие-то варианты решения проблемы помимо переопределения urlManager ?
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: Многоязычность и пути

Сообщение Ekstazi »

Решил проблему сам. В конфиге прописал:

Код: Выделить всё

                'urlManager'=>array(
                    'class'=>'application.extensions.urlManager.CLangUrlManager',
                    'urlFormat'=>'path',
                    'rules'=>array(
                      '<lang:(en|rus|ro)>/<_c:(category|site)>/<_a>'=>'<_c>/<_a>',
                    ), 
BaseController:

Код: Выделить всё

class BaseController extends CController
{
    //put your code here
    public function init()
    {
        $langs=array('rus','eng','ro');
        if(isset($_GET['lang'])&&(in_array($_GET['lang'],$langs))){
            Yii::app()->language=$_GET['lang'];
        }
        parent::init();
    }
}
 
application.extensions.urlManager.CLangUrlManager:

Код: Выделить всё

class CLangUrlManager extends CUrlManager
{
    //put your code here
    public function createUrl($route, $params=array(), $ampersand='&'){
        $params['lang']=Yii::app()->language;
        return parent::createUrl($route,$params,$ampersand);
    }
}
 
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: Многоязычность и пути

Сообщение Ekstazi »

Добавил еще одно правило для пути в rules:

Код: Выделить всё

                      '<lang:(en|ru|ro)>'=>'site/index',
 
теперь ссылки вида http://site.local/index.php/ru/ будут перенаправлены на index
Пишу интернет-каталог продукции. Скоро выложу туториал.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Многоязычность и пути

Сообщение samdark »

Туториал, думаю, будет очень кстати.
magicoff
Сообщения: 3
Зарегистрирован: 2012.10.11, 13:36

Re: Многоязычность и пути

Сообщение magicoff »

Здраствуйте! Так а где искать туториал, если он есть?
Аватара пользователя
mat.twg
Сообщения: 222
Зарегистрирован: 2012.02.22, 20:44
Откуда: Санкт-Петербург

Re: Многоязычность и пути

Сообщение mat.twg »

вот например: http://habrahabr.ru/post/139689/
Ответить