【问题标题】:Localization issue on CakePHP applicationCakePHP 应用程序的本地化问题
【发布时间】:2013-11-07 11:37:43
【问题描述】:

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

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

我的意图是在 Session 中写入一个值。用户单击一个标志图标,因此他指定了他的会话的语言。

那我就跑

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

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

【问题讨论】:

    标签: cakephp localization internationalization cakephp-2.4


    【解决方案1】:

    假设您点击了eng语言链接,即http://mycakeapp.com/?lang=eng

    现在您可以在应用控制器中使用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...
        }
    }
    

    【讨论】:

    • 我有你在我的 beforeFilter 操作中所说的内容,但什么也没有。事实上,我的插件没有显示我的 bootstrap.php 默认语言。我能做什么?
    • 您遇到了什么错误?尝试在beforeFilter 中回显会话值,确保您使用的是会话组件,可能是您正在覆盖控制器的$components 数组
    • 会话变量工作正常。我的 Configure.language 为“eng”,因此它应该采用正确的 .po,它位于我的插件路径中的 Locale/eng/LC_MESSAGES/default.po 中。不是吗?
    • 是的。它将需要,仅供参考,您不需要指定任何翻译。你在这里遇到什么问题......而且它是Configure::write('Config.language')而不是你说的Configure.language
    • 我已经在 App 部分实现了正确的工作,所以我将您的解决方案视为有效。我不知道为什么我的插件不起作用,但我会继续尝试。谢谢!
    【解决方案2】:

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

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

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

    【讨论】:

    • 听起来好像,但它不起作用...我忘了说它是一个插件。我将您的代码放在 AppController 中,因此当我单击标志时,它会重定向到我的新操作,但显示的语言是相同的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    相关资源
    最近更新 更多