CakePHP动态更改语言环境

时间:2016-01-20 19:55:50

标签: cakephp internationalization locale cakephp-3.x

我的CakePHP应用程序通过.po文件进行国际化。

文件结构如下:

- src
   - Locale
      - en_EN
      - en_ES

应用程序在启动时正确翻译:

ini_set('intl.default_locale', 'en_ES');

但是,我需要动态翻译应用程序,例如在动作侦听器按钮中。

我尝试了以下操作,但它不起作用:

use Cake\I18n\I18n;
I18n::locale('en_EN');

1 个答案:

答案 0 :(得分:1)

您需要在会话中保存区域设置,以便它在页面请求之间保持不变。

可能的方法:

class AppController extends Controller {    

    public function initialize() {

        if ($this->request->session()->check('Config.locale')) {    
            I18n::locale($this->request->session()->read('Config.locale'));
        }

        //rest of your init code
    }


    public function change_locale($locale){

        $this->request->session()->write('Config.locale', $locale);
        return $this->redirect($this->referer());
    }    

}