Cakephp本地化路线

时间:2010-07-02 08:53:03

标签: cakephp localization routes multilingual

如果我更改默认语言,我的本地化文件(.po)会起作用,但是我无法使路线正常工作,这就是我所拥有的内容:

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

干杯,
尼古拉斯。

1 个答案:

答案 0 :(得分:3)

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

路线不会按照您的预期进行互动:

/ login - 将匹配您的第二条路线

/ fr / users / login - 将匹配您的上一条路线。

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