私は多言語CakePHP 2.1アプリを最終的にはにして、を動作させました。CakePHP 2.1 URL言語パラメータ
まず、私はcore.php
の最後にデフォルトの言語を定義します。ここでは
/* Define default language */
Configure::write('Config.language', 'eng');
はAppControler.php
で私のコードです:
public function beforeFilter() {
parent::beforeFilter();
$this->_setLanguage();
//Configure::write('Config.language', 'fre'); //Manually change the language to test .po file
$this->Auth->allow('index','view','home','display','logout');
}
function _setLanguage() {
if ($this->Cookie->read('lang') && !$this->Session->check('Config.language')) {
$this->Session->write('Config.language', $this->Cookie->read('lang'));
}
else if (isset($this->params['language']) && ($this->params['language']
!= $this->Session->read('Config.language'))) {
$this->Session->write('Config.language', $this->params['language']);
$this->Cookie->write('lang', $this->params['language'], false, '20 days');
}
}
私はAppController.php、サイト全体でConfigure::write('Config.language', 'fre');
のコメントを解除した場合フランス語です(データベース駆動型のコンテンツは除きますが、私はTranslateBehaviorを使用する予定です)。しかし、私は、ボタンクリックでURLベースの言語切り替えを使用したいと思っています。ここに私のルートは、このnuts-and-bolts tutorialに基づき、次のとおりです。
Router::connect('/:language/:controller/:action/*', array(), array('language' => '[a-z]{2}'));
ここに私のボタンのコードは次のとおりです。
<?php echo $this->Html->link($this->Html->image('../img/PUZ013-US-Flag.png', array('border' => '0')),array('language'=>'eng'),array('target' => '_parent', 'escape' => false));;?>  <?php echo $this->Html->link($this->Html->image('../img/PUZ013-FR-Flag.png', array('border' => '0')),array('language'=>'fre'),array('target' => '_parent', 'escape' => false));?>
私はURLの切り替えを処理するためにAppHelperでこれを持っているが、それは働いていません。 URLはexample.com/fre/controller/actionにする必要がありますが、代わりにexample.com/controller/action/language:freであり、Cookieは変更されていません。
class AppHelper extends Helper {
public function url($url = null, $full = false) {
if(!isset($url['language']) && isset($this->params['language'])) {
$url['language'] = $this->params['language'];
}
return parent::url($url, $full);
}
}
フラグをクリックしても何も起こりません。私は何が欠けていますか?
を使用する場合
前に書き込む必要がありが助けたこと、ありがとうございます! 'fre'は現在どこにロードされていますが、freを言語パラメータとして見る代わりにFreControllerをチェックしています。 – deewilcox