【发布时间】:2014-10-07 03:36:39
【问题描述】:
我已经阅读了所有关于 CakePHP 国际化的 SO 帖子,但似乎没有什么对我有用。我正在使用 CakePHP 2.5.1。
在 config/bootstrap.php 中:
//Default language
Configure::write('Config.language', 'spa');
在控制器/AppController.php 中:
public $components = array('Session', 'DebugKit.Toolbar');
public function beforeFilter()
{
//Set the UI lang preference
if($this->Session->check('Config.language'))
{
Configure::write('Config.language', $this->Session->read('Config.language'));
}
}
我的文件结构是这样的:
/Locale/
- default.mo
- default.po
- default.pot
- eng/LC_MESSAGES/
- default.mo
- default.po
我在视图上有这样的链接:
echo '<p class="">' . $this->Html->link('EN', array('controller' => 'users', 'action' => 'lang', 'en')) . '</p>';
echo '<p class="">' . $this->Html->link('ES', array('controller' => 'users', 'action' => 'lang', 'es')) . '</p>';
我的用户控制器对此执行以下操作:
public function lang($which)
{
if($which == "en")
{
$this->Session->write('Config.language', 'eng');
} elseif($which == "es")
{
$this->Session->write('Config.language', 'spa');
} else
{
$this->Session->setFlash(_('Unknown language.'), 'flash_red');
}
$this->redirect('/');
}
当我点击任何链接(EN 或 ES)时,页面会重新加载但显示正常文本。
关于我可能遗漏什么的任何线索?或者关于在 Cake 核心代码中从哪里开始调试的任何提示?
PD。错误日志不显示任何内容。
谢谢!
【问题讨论】:
-
第一步,删除缓存(
/app/tmp/cache/)。 -
1) 更改 config/bootstrap.php 以使默认语言没有名为“Config.language”的配置变量:Configure::write('Config.defaultLanguage', 'spa') ; 2) 更改控制器/AppController.php if($this->Session->check('Config.language')) {Configure::write('Config.language', $this->Session->read('Config .language'));} else {Configure::write('Config.language', Configure::read('Config.defaultLanguage'));} 3) 从 /app/tmp/cache/persistent/* 中删除所有文件.* 4) 验证您的 po 文件或使用 poedit 5) 使用调试工具包并遵循会话值
-
@ndm 我试过删除缓存,但这并不能解决问题。
-
@CristianFlorea 我在哪里/如何验证我的 po 文件?
-
@CristianFlorea 使用调试工具包会话变量似乎没问题。我看到
>Config,当我点击它时,我可以看到language的值在我点击不同的链接时在eng和spa之间变化。我还删除了 bootstrap.php 中的设置,并从缓存文件夹中删除了文件。仍然没有运气:(
标签: cakephp cakephp-2.5