私はついに多言語のCakePHP2.1アプリをほぼ機能させました。
まず、次の最後にデフォルトの言語を定義します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ベースの言語切り替えを使用したいので、アプリが機能しなくなります。これが、この基本的なチュートリアルに基づいた私のルートです。
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);
}
}
フラグをクリックしても何も起こりません。私は何が欠けていますか?