Помогите с локализацией !!

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
AlexV
Сообщения: 9
Зарегистрирован: 2011.08.23, 16:54

Помогите с локализацией !!

Сообщение AlexV »

ПРивет всем!
Сразу просьба не пинать тк с Yii около недели только. Вопрос, вероятно, уже с бородой, но все же...
ПРИНЦИПИАЛЬНЫМ условием явлеется ВОЗВРАТ НА ТУ ЖЕ на страницу после переключения языка на другой
Проблема (точнее непонимание) с переключениями языков в контроллере

URLs сайта:

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

http://site.com/en/controller/action/...
http://site.com/ru/controller/action/...
http://site.com/uk/controller/action/...
 
-- config.php

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

        'urlManager'=>array(
            'class'=>'application.extensions.CLangUrlManager',
            'urlFormat'=>'path',
            'showScriptName'=>false,
            'rules'=>array(
                'locale/<lang:\w+>'=>'locale/change',

                '<lang:(en|ru|uk)>/<_c:\w+>/<id:\d+>'=>'<_c>/view',
                '<lang:(en|ru|uk)>/<_c:\w+>/<_a:\w+>/<id:\d+>'=>'<_c>/<_a>',
                '<lang:(en|ru|uk)>/<_c:\w+>/<_a:\w+>'=>'<_c>/<_a>',
                '<lang:(en|ru|uk)>'=>'site/index',
            ),
        ),
-- app.components

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

class Controller extends CController
{
    public $layout='//layouts/column1';
    public $menu=array();
    public $breadcrumbs=array();

    public function  __construct($id, $module = null) 
    {
        parent::__construct($id, $module);

        if (isset($_GET['lang']))
            Yii::app()->language = $_GET['lang'];
    }

    public function redirect($url,$terminate=true,$statusCode=302)
    {
        if (is_array($url))
        {
            if(isset ($_GET['lang']))
                $url['lang'] = $_GET['lang'];

            $route = isset($url[0]) ?: '';
            $url = $this->createUrl($route, array_splice($url,1));
        }

        Yii::app()->getRequest()->redirect($url,$terminate,$statusCode);
    }
}
-- app.components

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

class Html extends CHtml
{
    public static function link($text, $url = '#', $htmlOptions = array())
    {
        if(is_array($url))
        {
            if(isset ($_GET['lang']))
            {
                $url['lang'] = $_GET['lang'];
            }
        }

        if($url !== '')
            $htmlOptions['href'] = self::normalizeUrl($url);

        self::clientChange('click',$htmlOptions);

        return self::tag('a',$htmlOptions,$text);
    }
}
-- app.extensions.CLangUrlManager

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

class CLangUrlManager extends CUrlManager
{
    public function createUrl($route, $params=array(), $ampersand='&')
    {
        $params['lang'] = Yii::app()->language;
        return parent::createUrl($route,$params,$ampersand);
    }
}
-- app.controllers

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

class LocaleController extends Controller
{
    public function actionChange($lang)
    {
        $lang = (isset($lang)) ?: 'en';
        Yii::app()->language = $lang;
        $referrer = Yii::app()->getRequest()->urlReferrer;

        $urlManager = Yii::app()->getUrlManager();

        // ВОТ КОНКРЕТНЫЕ ГРАБЛИ тк urlManager ТРЕБУЕТ Object Request, а не строку
        Yii::app()->request->redirect(Yii::app()->createUrl($urlManager->parseUrl($referrer)));

        Yii::app()->request->redirect($referrer);

    }
}
-- views/layouts/main.php

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

...
<div class='langs-bar'>
    <ul>
        <li><?php echo Html::link('Eng', '/locale/en') ?></li>
        <li><?php echo Html::link('Rus', '/locale/ru') ?></li>
        <li><?php echo Html::link('Ukr', '/locale/uk') ?></li>
    </ul>
</div>
...
Подскажите плиз КАК это правильно сделать ??
Заранее спс.
Аватара пользователя
BuCeFaL
Сообщения: 447
Зарегистрирован: 2010.03.17, 21:22
Откуда: Kiev
Контактная информация:

Re: Помогите с локализацией !!

Сообщение BuCeFaL »

Посмотрите расширение от Ekstazi viewtopic.php?f=9&t=419 , работает.
Аватара пользователя
alexk984
Сообщения: 433
Зарегистрирован: 2010.10.21, 15:03
Контактная информация:

Re: Помогите с локализацией !!

Сообщение alexk984 »

Я ему месяц назад уже давал это расширение, "это не то что ему нужно". Всем оно подходит а ему нет.
esche
Сообщения: 1054
Зарегистрирован: 2010.11.24, 03:39

Re: Помогите с локализацией !!

Сообщение esche »

AlexV писал(а):Сразу просьба не пинать тк с Yii около недели только. Вопрос, вероятно, уже с бородой, но все же...
ПРИНЦИПИАЛЬНЫМ условием явлеется ВОЗВРАТ НА ТУ ЖЕ на страницу после переключения языка на другой
...
alexk984 писал(а):Я ему месяц назад уже давал это расширение, "это не то что ему нужно". Всем оно подходит а ему нет.
Он вроде неделю только? =) (на дату регистрации внимания не обращаем)

По сути.. если надо редиректить "НА ТУ ЖЕ СТРАНИЦУ" (видимо, с другим языком в URL-е?), т.е. URL отличается от referer-а только двумя буквами после первого слэша в URI - можно ведь заменить их используя str_replace (или preg_replace) и не трогать urlManager...

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

// ВОТ КОНКРЕТНЫЕ ГРАБЛИ тк urlManager ТРЕБУЕТ Object Request, а не строку
        Yii::app()->request->redirect(Yii::app()->createUrl($urlManager->parseUrl($referrer))); 
Ну и redirect есть у Controller - т.е. можно примерно так:

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

$this->redirect(str_replace("/$old_lang/","/$new_lang/",$_SERVER['HTTP_REFERER']));
 
* замена URL-а приведена в качестве примера - адаптируйте к своим потребностям
** если правила маршрутизации будут часто меняться, вариант не очень подходящий =)
...
Ответить