Я создал многоязычный веб-сайт после этого блога и с некоторыми другими исправлениями
На самом деле я хочу перейти на одноязычный веб-сайт на многоязычный веб-сайт. Я хочу перенаправить старые URL-адреса, чтобы исправить обновленные URL-адресакак
Допустим, английский является языком по умолчанию
domain.com
должен перейти domain.com/en
domain.com/controller
=> domain.com/en/controller
domain.com/controller/action
=> domain.com/en/controller/action
domain.com/controller/action/param1
=> domain.com/en/controller/action/param1
Короче говоря, я хочу проверить, не установлен ли правильный язык для перенаправления на тот же URL после добавления языка по умолчанию.
Я попытался перенаправить в методе appController BeforeFilter()
, но этоне работают для параметров после действия.он перенаправляет
domain.com/posts/edit/1
=> domain.com/posts/edit
, пропуская 1
, пока работает нормально для индекса, и добавляет, поскольку у них нет переданных параметров
class AppController extends Controller {
public $components = array('Cookie','Session');
public $helpers = array('Html' => array('className' => 'MyHtml'));
public function beforeFilter() {
$this->_setLanguage();
/**************************** This if sttmt is added to redirect to default lang ******/
if (empty($this->params['language'])) {
$this->redirect(array('language' => 'en'));
}
}
private function _setLanguage() {
if ($this->Cookie->read('lang') && !$this->Session->check('Config.language')) {
$this->Session->write('Config.language', $this->Cookie->read('lang'));
}
else if ( isset($this->params['language']) &&
($this->params['language'] != $this->Session->read('Config.language'))
) {
switch( $this->params['language'] ) {
case 'fr':
$lang = 'fra';
break;
case 'en':
default:
$lang = 'eng';
break;
}
$this->Session->write('Config.language', $lang);
$this->Cookie->write('lang', $lang, false, '20 days');
}else{
$this->Session->write('Config.language', Configure::read('Config.language'));
$this->Cookie->write('lang',Configure::read('Config.language'), false, '20 days');
}
}
//override redirect
public function redirect( $url, $status = NULL, $exit = true ) {
if (!isset($url['language']) && $this->Session->check('Config.language')) {
$url['language'] = $this->Session->read('Config.language');
}
parent::redirect($url,$status,$exit);
}
}
// Routes.php
Router::connect('/', array('controller' => 'posts', 'action' => 'index', 'home'));
Router::connect('/:language/:controller/:action/*', array(), array('language' => 'en|fra'));
Router::connect('/:language/:controller', array('action' => 'index'), array('language' => 'en|fra'));
Router::connect('/:language', array('controller' => 'posts', 'action' => 'index'), array('language' => 'en|fra')) ;
или, если есть другой альтернативный и оптимизированный метод, может быть в Routes.php