我终于让我的多语言 CakePHP 2.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');
}
}
如果我Configure::write('Config.language', 'fre');
在 AppController.php 中取消注释,整个网站都是法语的(除了数据库驱动的内容,我计划使用 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));?>
我在 AppHelper 中有这个来处理 URL 切换,但它不起作用。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);
}
}
如果您单击标志,则不会发生任何事情。我错过了什么?