CakePHP应用程序的本地化问题

CakePHP应用程序的本地化问题,cakephp,localization,internationalization,cakephp-2.4,Cakephp,Localization,Internationalization,Cakephp 2.4,我正在开发一个CakePHP 2应用程序 我的问题是,我不知道用户点击链接后如何执行指令 我的意图是在会话中写入一个值。用户单击一个标志图标,以便指定会话的语言 然后我就跑 $this->Session->write('Config.language', 'eng'); 我如何解决这个问题??谢谢我认为,您应该创建一个接受lang属性的控制器操作,如 <?php // in settings controller funciton select_lang($

我正在开发一个CakePHP 2应用程序

我的问题是,我不知道用户点击链接后如何执行指令

我的意图是在会话中写入一个值。用户单击一个标志图标,以便指定会话的语言

然后我就跑

$this->Session->write('Config.language', 'eng');

我如何解决这个问题??谢谢

我认为,您应该创建一个接受lang属性的控制器操作,如

<?php

    // in settings controller
    funciton select_lang($lang = 'eng'){
      $this->autoRender = false;
      $this->Session->write('Config.language', $lang);
      return $this->redirect($this->refrer());
    }
?>


在视图中,您可以简单地传递变量lang的值。

假设您单击了
eng
语言链接,即

现在,您可以在appcontroller中使用
beforefilter
回调来设置英语 像这样

public function beforeFilter() {
    if (!empty($this->request->query['lang'])) {
        $this->Session->write('Config.language', $this->request->query['lang']);
    }

    if ($this->Session->check('Config.language')) {
        Configure::write('Config.language', $this->Session->read('Config.language'));// setting language here...
    }
}

听起来像,但它不起作用。。。我忘了说这是一个插件。我将您的代码放在AppController中,因此当我单击over标志时,它将重定向到我的新操作,但显示的语言是sameI,我拥有您在beforeFilter操作中所说的内容,但什么都没有。事实上,我的插件并没有显示我的bootstrap.php默认语言。我能做什么?你犯了什么错误?尝试在筛选前回显
中的会话值,确保您使用的是会话组件,可能是您正在覆盖控制器的
$components
数组会话变量工作正常。我的Configure.language为'eng',因此它应该采用正确的.po,它位于我的插件路径中的Locale/eng/LC_MESSAGES/default.po中。是吗?是的。这将需要,仅供参考,对于英语,您不需要指定任何翻译。您在这里遇到了什么问题…,而且是
Configure::write('Config.language')
而不是
Configure.language
,正如您所说,我已经实现了在应用程序部分正常工作,因此我将为您提供有效的解决方案。我不知道为什么我的插件不工作,但我会继续尝试。谢谢