CakePHP 3.5 翻译行为 I18n::getDefaultLocale() 自行更改

CakePHP 3.5 Translate behavior I18n::getDefaultLocale() changes by itself

我正在使用 CakePHP 3.5。当我的浏览器是英文时,一切都很好。默认语言环境是 en_US,正如我设置的那样,如果我将语言环境设置为 fr_CA (I18n::setLocale('fr_CA'))[=18=,我可以显示法语内容]

但是当我将浏览器的语言更改为 fr_CA 时,它以某种方式将默认区域设置也更改为 fr_CA。所以网站以法语显示,但内容仍然以英语显示,因为它现在是默认语言环境

正在 config\app 中设置默认区域设置。php

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

在 src\Application 中添加有效的区域设置。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'

请注意,我最近更新到 CakePHP 3.5 并按照指南添加了中间件: Adding the new HTTP Stack to an Existing Application

这是一个将在下一个版本中修复的错误 (3.5.3)。

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

在解决此问题之前,您可以自己在本地应用补丁,或者在 bootstrap 中手动调用 \Cake\I18n\I18n::getDefaultLocale() 一次,以便在修改之前存储默认语言环境正在应用语言环境选择器。