cakephp выбор языка по URL - часть 2 - PullRequest
0 голосов
/ 29 декабря 2010

Хорошо, теперь у меня есть рабочая локализация на основе URL (/3200205/cakephp-vybor-yazyka-po-url), но как создать ссылку, которая изменит язык? Я пробовал

<?php echo $html->link('English', array('language'=>'eng')); ?>

но все, что он делает, это добавляет language:eng в конце URL (www.example.com/blah/blah/language:eng вместо www.example.com/eng/blah/blah) и не переключает язык вообще.

Теперь маршруты выглядят так:

Router::connect('/registered/:language/:controller',  
                array('prefix' => 'registered', 'registered' => true, 'layout'=> 'registered'),
                array('language' => '[a-z]{3}'));
Router::connect('/registered/:language/:controller/:action/*', 
                array('prefix' => 'registered', 'registered' => true, 'layout'=> 'registered'),
                array('language' => '[a-z]{3}'));

Я также переопределил метод url в app_helper:

    function url($url = null, $full = false) {
        if(!isset($url['language']) && isset($this->params['language'])) {
          $url['language'] = $this->params['language'];
        }
        return parent::url($url, $full);
   }

Как заставить ссылку работать так, как она должна быть? Спасибо

1 Ответ

0 голосов
/ 31 декабря 2010

Попробуйте удалить: язык из URL вашего роутера.

Не проверено, но оно должно работать, так как ваши URL уже получают имя param: language

Router::connect('/registered/:controller',  
                array('prefix' => 'registered', 'registered' => true, 'layout'=> 'registered'),
                array('language' => '[a-z]{3}'));
Router::connect('/registered/:controller/:action/*', 
                array('prefix' => 'registered', 'registered' => true, 'layout'=> 'registered'),
                array('language' => '[a-z]{3}'));

Сохраните метод переопределения URL, чтобы убедиться, что вы принимаете оба типа переменных GET.

...