我正在开发一个多语言网站,我想创建多语种路线。
示例:
monsite.com/en/the-house , monsite.com/fr/la-maison 和 monsite.com/it/la-casa < / strong>链接到“页面”控制器的“ house ”操作
monsite.com/en/leisures , monsite.com/fr/loisirs 和 monsite.com/it/tempo-libero “页面”控制器的操作“休闲”......
这是我的路线:
Router::connect('/:lang/'.__("the-house"),
array('controller' => 'pages', 'action' => 'house'),
array('lang' => '[a-z-]{2}')
);
我找到了“ manuel ”解决方案,但我想这样做“自动”
Router::connect('/:lang/:slug',
array('controller' => 'pages', 'action' => 'house'),
array('lang' => '[a-z-]{2}', 'slug' => 'la-maison|the-house|la-casa')
);
谢谢;)
答案 0 :(得分:1)
您还可以在路由器配置中传递lang
变量,并在beforeFilter()
事件中检查控制器中的此变量。
例如:
Router::connect('/:lang/:slug', array('controller' => 'pages', 'action' => 'view'), array('slug' => '[a-z0-9-]+', 'lang' => 'en|fr|it', 'pass' => array('slug', 'lang')));
在你的控制器中:
public function beforeFilter() {
parent::beforeFilter();
if (isset($this->request->params['lang'])) {
// do what you want with your language variable.
// Like setting Config.language or set your models locale property, etc.
}
}
或超级手动方式:
public function view($slug = null, $lang = null) {
switch ($lang) {
case 'en': /* locale is english */ break;
case 'fr': /* locale is french */ break;
}
}
对于反向路由(即,在视图中使用$this->Html->link()
时),您需要将lang
参数传递给路由数组,以便为您的语言环境建立链接。
而且,最好使用Translate
行为和i18n
表来轻松处理模型的多语言记录。
小警告:CakePHP在内部使用3个字母的ISO代码进行语言环境,如'eng','ger','fra'。