Маршруты локализации Cakephp

Мои файлы локализации (.po) работают, если я меняю язык по умолчанию, но я не могу заставить работать маршруты, вот что у меня есть:

Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
Router::connect('/login/*', array('controller' => 'users', 'action' => 'login'));
Router::connect('/logout/*', array('controller' => 'users', 'action' => 'logout'));
Router::connect('/register/*', array('controller' => 'users', 'action' => 'register'));
Router::connect('/:lang/:controller/:action/*', array('lang' => 'en'), array('lang' => 'en|fr'));

Но когда я пытаюсь: domain.com/fr/login, торт ищет контроллер "fr".

Я использую эту функцию в AppController перед фильтром для переключения между языками:

    function setLanguage() {
        if(!isset($this->params['lang']))
        {
            $this->params['lang'] = 'en';
        }
        $lang = $this->params['lang'];
        App::import('Core', 'i18n');
        $I18n =& I18n::getInstance();
        $I18n->l10n->get($lang);
        foreach (Configure::read('Config.languages') as $lang => $locale)
        {
            if($lang == $this->params['lang'])
            {
                $this->params['locale'] = $locale['locale'];
            }
        }
    }

С уважением,
Николай.


person Nicolas    schedule 02.07.2010    source источник


Ответы (1)


У вас нет контроллера входа. Таким образом, ваш нижний маршрут не совпадает, и Cake пытается использовать его по умолчанию, ища контроллер fr.

Маршруты взаимодействуют не так, как вы ожидаете:

/login - будет соответствовать вашему второму маршруту

/fr/users/login — будет соответствовать вашему последнему маршруту.

/fr/login - НЕ "объединяет" два маршрута. Вам нужно явно сделать такой маршрут.

person Martin Westin    schedule 02.07.2010
comment
Спасибо за ваши объяснения. Вот рабочее правило, которое я тогда добавил: Router::connect('/:lang/login/*', array(), array('lang' => 'en|fr', 'controller' => 'users', 'action' => 'login')); - person Nicolas; 02.07.2010