言語ごとに異なるルーティングテーブルを使用しています。言語を変更して同じページにリダイレクトするアクションをターゲット言語)。CakePHP - 言語を変更してリロードした後の現在のURLを翻訳する方法ルーティングテーブル
主な問題は、私の行動が複雑すぎることです。どうすれば簡単にできますか? 言語を変更し、新しいURL(ターゲット言語)にリダイレクトする必要があります。
簡単に言えば、私たちはランダムな有効なケーキのURLを1つの言語で持っており、別の言語の適切な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'));
}
アクション変える言語:URLテーブルの 'パス' キーについて
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);
}
:
/pages/display/help
ルータ::解析後の()、パラメータが抽出されます:
pass => array(
0 => 'help'
)
とRouter :: URLから、後の戻り値()は次のようになります。
/pages/display/pass:Array
ので、私は、アレイ全体で「パス」の値をマージし、キー
あなたは、正確な「流れ」は、あなたが望むことは何かについて、もう少し情報を提供してもらえますか?あなたが理解している限り、ページにリンクを設定することができます。あなたのヘルプページ)は、 'このページを$言語で見る'と言うのでしょうか?だからあなたは実際にこの 'lang()'アクションと呼んでいますか? – vindia
すべてのページの「言語を選択」ボックスにあります –