CakePHP - 如何在更改语言和重新加载路由表后转换当前URL

Jac*_*iuk 5 routing cakephp cakephp-1.3

我正在为每种语言使用不同的路由表,并且我已经编写了更改语言并重定向到同一页面但使用目标语言(和目标URL)的操作.

主要问题是我的行为过于复杂 - 我怎样才能让它变得简单?它应该更改语言并重定向到新的URL(目标语言).

简而言之:我们使用一种语言随机有效的蛋糕网址,我们不得不将其翻译成另一种语言的足够网址.

我的路由表:

if( 'en' == Configure::read('Config.language') ) {
    Router::connect('/help',   array('controller' => 'pages', 'action' => 'display', 'help') );
} else {
    Router::connect('/pomoc',   array('controller' => 'pages', 'action' => 'display', 'help') );
}
Run Code Online (Sandbox Code Playgroud)

改变语言的行动:

function lang($lang) {

    // getting previous url table
    $url = $this->referer();
    $url = Router::parse($url);

    // changing language
    if( in_array($lang, Configure::read('Languages.valid') ) ) {
        $this->Session->write('Language', $lang);
        Configure::write('Config.language', $lang);
    }

    // saving base params
    $requestInfo = array(Router::getParams(), Router::getPaths());
    // reload routing table
    Router::reload();
    include(CONFIGS.'routes.php');
    // restore base params
    Router::setRequestInfo($requestInfo);

    // fix for 'pass' params
    if(!empty($url['pass']) && is_array($url['pass'])) {
        $url = array_merge($url, $url['pass']);
        unset($url['pass']);
    }
    $this->redirect($url);
}
Run Code Online (Sandbox Code Playgroud)

关于url表中的'pass'键:

/pages/display/help
Run Code Online (Sandbox Code Playgroud)

在Router :: parse()之后,提取参数:

pass => array(
    0 => 'help'
)
Run Code Online (Sandbox Code Playgroud)

然后从Router :: url()返回值看起来像这样:

/pages/display/pass:Array
Run Code Online (Sandbox Code Playgroud)

所以我必须通过将'pass'值与整个数组合并并删除键来修复它

ple*_*ong 0

我有这样的routes.php

Configure::write('Config.language', $_SESSION['lang']);
Router::connect(__('/help',true),   array('controller' => 'pages', 'action' => 'display', 'help') );
Run Code Online (Sandbox Code Playgroud)

所以我使用__()来翻译网址。它在 po 文件中搜索翻译。在你的lang()函数中,将 Session 更改为当前语言后,你需要做的就是:

$this->redirect(__('/help'));
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助