2013-07-12 115 views
1

我正在致力於多語言網站,我想創建多語種路線cakephp多語言路線

例如:

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

我找到了「曼努埃爾 「解決方案,但我想這樣做」 自動

Router::connect('/:lang/:slug', 
    array('controller' => 'pages', 'action' => 'house'), 
    array('lang' => '[a-z-]{2}', 'slug' => 'la-maison|the-house|la-casa') 
); 

塔NKS)

回答

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參數傳遞給路由數組,以便爲​​您的鏈接創建l OCALE。

而且,最好使用Translate行爲表和i18n表來輕鬆處理模型的多語言記錄。小警告:CakePHP在內部使用3個字母的ISO代碼作爲區域設置,如'eng','ger','fra'。