2010-07-02 61 views
0

我的本地化文件(的.po),如果我更改默认的语言工作,但我不能让路由的工作,这里就是我有个大气压:CakePHP的本土化路线

Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display')); 
Router::connect('/login/*', array('controller' => 'users', 'action' => 'login')); 
Router::connect('/logout/*', array('controller' => 'users', 'action' => 'logout')); 
Router::connect('/register/*', array('controller' => 'users', 'action' => 'register')); 
Router::connect('/:lang/:controller/:action/*', array('lang' => 'en'), array('lang' => 'en|fr')); 

但是当我尝试:domain.com/fr/login,蛋糕正在寻找“fr”控制器。

我使用的AppController的beforeFilter此功能,语言之间进行切换:

function setLanguage() { 
     if(!isset($this->params['lang'])) 
     { 
      $this->params['lang'] = 'en'; 
     } 
     $lang = $this->params['lang']; 
     App::import('Core', 'i18n'); 
     $I18n =& I18n::getInstance(); 
     $I18n->l10n->get($lang); 
     foreach (Configure::read('Config.languages') as $lang => $locale) 
     { 
      if($lang == $this->params['lang']) 
      { 
       $this->params['locale'] = $locale['locale']; 
      } 
     } 
    } 

干杯,
尼古拉斯。

回答

3

您没有登录控制器。所以你的底线不匹配,Cake然后通过寻找fr控制器来尝试默认值。将匹配你的第二个路线

/FR /用户/登录 - - 将匹配您的最后路线

/登录:如你期望他们

路由没有互动。

/fr/login - 不会智能地“合并”这两条路线。你需要明确地做出这样的路线。

+0

感谢您的解释。这是我添加的工作规则:'Router :: connect('/:lang/login/*',array(),array('lang'=>'en | fr','controller'=>'users' 'action'=>'login'));' – Nicolas 2010-07-02 09:09:56