【问题标题】:Cakephp localization routesCakephp 本地化路线
【发布时间】:2011-03-11 00:14:15
【问题描述】:

如果我更改默认语言,我的本地化文件 (.po) 可以工作,但我无法使路由正常工作,这就是我的 atm:

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

干杯,
尼古拉斯。

【问题讨论】:

    标签: cakephp localization routes multilingual


    【解决方案1】:

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

    路由不会像您期望的那样交互:

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

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

    /fr/login - 不会智能地“合并”两条路由。您需要明确地制定这样的路线。

    【讨论】:

    • 感谢您的解释。这是我当时添加的工作规则:Router::connect('/:lang/login/*', array(), array('lang' => 'en|fr', 'controller' => 'users', 'action' => 'login'));
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 2012-05-11
    相关资源
    最近更新 更多