1

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

例子:

monsite.com/en/the-housemonsite.com/fr/la-maisonmonsite.com/it/la-casa链接到“页面”控制器的“房屋”操作

monsite.com/en/leisuresmonsite.com/fr/loisirsmonsite.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')
);

谢谢 ;)

4

1 回答 1

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

于 2013-07-13T10:57:43.340 回答