cakephp多语言路线

时间:2013-07-12 10:40:14

标签: cakephp internationalization routes multilingual

我正在开发一个多语言网站,我想创建多语种路线

示例:

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')
);

谢谢;)

1 个答案:

答案 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'。