2017-09-24 51 views
2

我正在使用CakePHP 3.5。當我的瀏覽器是英文的,一切都很好。默認語言環境是en_US,因爲我設置了它,並且如果將語言環境設置爲fr_CA(I18n :: setLocale('fr_CA')),我可以顯示法語內容。但是,當我將瀏覽器的語言更改爲fr_CA時,它以某種方式將默認語言環境也更改爲fr_CA。因此,該網站以法語顯示,但內容仍顯示在英語,因爲它現在是默認的語言環境CakePHP 3.5轉換行爲I18n :: getDefaultLocale()自己改變

設置默認的語言環境中的配置\ app.php

'App' => [ 
    'namespace' => 'App', 
    'encoding' => env('APP_ENCODING', 'UTF-8'), 
    'defaultLocale' => env('APP_DEFAULT_LOCALE', 'en_US'), 
    ..... 
], 

添加在SRC \應用有效的語言環境.PHP

$middlewareQueue->add(new LocaleSelectorMiddleware(['en_US', 'fr_CA'])); 

添加翻譯行爲ArticlesTable.php

$this->addBehavior('Translate', [ 
    'fields' => ['name', 'slug'], 
    'allowEmptyTranslations' => false, 
]); 

抓取在ArticlesController.php

$query = $this->Articles->find('all') 
    ->where(['Articles.name !=' => '']) 
    ->contain(['Media' => function ($q) { 
     return $q->find('medium'); 
}]); 

的內容時,我的瀏覽器是英文(EN_US)和我呼應的I18n :: getDefaultLocale()

'en_US' 

當它在法語(fr_CA)和我贊同I18N :: getDefaultLocale();

'fr_CA' 

注意,我更新到3.5的CakePHP最近,跟着嚮導,以添加中間件: Adding the new HTTP Stack to an Existing Application

回答

2

這是將被固定在下一版本(3.5.3)的錯誤。

https://github.com/cakephp/cakephp/pull/11200

直到這個是固定的,你可以在本地的引導文件一旦應用補丁上擁有自己的,或手動調用\Cake\I18n\I18n::getDefaultLocale()這樣的區域設置被存儲的區域設置的修改之前,選擇器正在加入。