2011-08-01 6 views
4

言語ごとに異なるルーティングテーブルを使用しています。言語を変更して同じページにリダイレクトするアクションをターゲット言語)。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 

ので、私は、アレイ全体で「パス」の値をマージし、キー

+0

あなたは、正確な「流れ」は、あなたが望むことは何かについて、もう少し情報を提供してもらえますか?あなたが理解している限り、ページにリンクを設定することができます。あなたのヘルプページ)は、 'このページを$言語で見る'と言うのでしょうか?だからあなたは実際にこの 'lang()'アクションと呼んでいますか? – vindia

+0

すべてのページの「言語を選択」ボックスにあります –

答えて

0

を除去することによって、それを修正する必要があり、私が持っています私のroutes.phpはこのように

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

ですので、私は__()を使ってURLを翻訳しています。これは翻訳をpoファイルに保存します。そして、あなたのlang()機能では、現在のLANGにセッションを変更した後、すべてを行う必要がある:

$this->redirect(__('/help')); 

希望これは、私はそれに答えるには遅すぎですけど、人のため

+0

解決策ではありません。 私はすべての翻訳beetween/help <>/pomocなどを保存しなければなりません。 私の行動には次のような状況があります: 私たちは1つの言語でランダムな有効なURLを持っていました。私たちはそれを別の言語のURLに変換しなければなりませんでした。 –

0

を支援します

routes.php p1では、スタティックページ(すべての言語で同じ)を識別し、ページを一意に識別する任意の文字列を指定できます。

Router::connect('/:language/p1/:translation', array(
    'controller' => 'pages', 
    'action' => 'display', 
    'help', 
    'options' => array('language' => '[a-zA-Z]{2}') 
)); 
あなたのビューで

$this->Html->link('Click me', array(
    'language' => Configure::read('Config.language'), 
    'controller' => 'pages', 
    'action'  => 'display', 
    'help', 
    'translation' => __('help') // could be any string in fact 
)); 

/xx/p1/pomocに他の英語で/en/p1/helpへのリンクを生成します。

すべてのリンクへのlanguageパラメータの注入は、すべてのリンク時にそれを提供する代わりにAppHelper::url()で行うことができます。

あなたは、コントローラにリダイレクトしたい場合:

$this->redirect(array(
    'language' => Configure::read('Config.language'), 
    'controller' => 'pages', 
    'action'  => 'display', 
    'help', 
    'translation' => __('help') 
)); 
関連する問題