2016-01-20 141 views
0

我的CakePHP應用程序已通過.po文件國際化。CakePHP動態更改區域設置

文件結構是如下所示:

- src 
    - Locale 
     - en_EN 
     - en_ES 

該應用程序被正確地通過翻譯在啓動時:

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

但是,我需要該應用被動態地轉換,在動作偵聽器按鈕例如。

我嘗試以下,但它不工作:

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

看到http://stackoverflow.com/questions/28847597/cakephp-3-0-0-rc2-i18nlocale-doesnt-works –

+0

「_doesn't WORK_」 是不是一個適當的問題描述。請具體說明究竟發生了什麼情況,並添加適當的代碼上下文。 – ndm

+0

問題是,當我在控制器上使用'I18n :: locale('en_EN');'時,只會翻譯此控制器中的區域設置,而不是在所有應用程序中。我的想法是在導航欄上放置一個按鈕或鏈接,讓您在推送時翻譯區域設置。 – Wildchild

回答

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()); 
    }  

} 
+0

當我將該代碼放在我的AppController上時出現此錯誤:_Call到非對象的成員函數check()__ – Wildchild

+0

修復了一個錯字。請現在試試。 –

+0

它的工作原理,但解決方案給我錯誤的模板,我使用Ajax調用控制器操作.. :( – Wildchild