【问题标题】:CakePHP internationalization not workingCakePHP 国际化不起作用
【发布时间】: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 使用调试工具包会话变量似乎没问题。我看到&gt;Config,当我点击它时,我可以看到language 的值在我点击不同的链接时在engspa 之间变化。我还删除了 bootstrap.php 中的设置,并从缓存文件夹中删除了文件。仍然没有运气:(

标签: cakephp cakephp-2.5


【解决方案1】:

上面的错误是使用了一个下划线,而不是两个:

$this->Session->setFlash(_('Unknown language.'), 'flash_red');

应该是

$this->Session->setFlash(__('Unknown language.'), 'flash_red');

在代码的所有其他部分中,我只使用一个下划线,而国际化应该是两个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 2014-02-15
    • 1970-01-01
    相关资源
    最近更新 更多