gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:58:39 27 4
gpt4 key购买 nike

我为每种语言使用不同的路由表,并且我编写了更改语言并重定向到同一页面但使用目标语言(和目标 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') );
}

Action 改变语言:
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);
}

关于 url 表中的“pass”键:
/pages/display/help

在 Router::parse() 之后,提取参数:
pass => array(
0 => 'help'
)

然后 Router::url() 的返回值如下所示:
/pages/display/pass:Array

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

最佳答案

我有这样的 routes.php

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

所以我使用 __()翻译网址。它在 po 文件中搜索翻译。而在您的 lang()函数,将 Session 改为当前的 lang 后,您需要做的就是:
$this->redirect(__('/help'));

希望这可以帮助

关于CakePHP - 如何在更改语言和重新加载路由表后翻译当前 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6899161/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com