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()
一次,以便在修改之前存储默认语言环境正在应用语言环境选择器。
我正在使用 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()
一次,以便在修改之前存储默认语言环境正在应用语言环境选择器。