我正在使用CakePHP 3.5。当我的浏览器是英文时,一切都很好。默认语言环境是en_US,正如我设置的那样,如果我将语言环境设置为fr_CA(I18n :: setLocale(' fr_CA')),我可以用法语显示内容。
但是当我将浏览器的语言更改为fr_CA时,它会以某种方式将默认语言环境更改为fr_CA。因此,该网站以法语显示,但内容仍以英语显示,因为它现在是默认语言环境
在config \ app.php中设置默认语言环境
$middlewareQueue->add(new LocaleSelectorMiddleware(['en_US', 'fr_CA']));
在src \ Application.php中添加有效的语言环境
$this->addBehavior('Translate', [
'fields' => ['name', 'slug'],
'allowEmptyTranslations' => false,
]);
在ArticlesTable.php中添加翻译行为
$query = $this->Articles->find('all')
->where(['Articles.name !=' => ''])
->contain(['Media' => function ($q) {
return $q->find('medium');
}]);
获取ArticlesController.php中的内容
'en_US'
当我的浏览器是英文(en_US)并且我回显I18n :: getDefaultLocale()
'fr_CA'
当它用法语(fr_CA),我回应I18n :: getDefaultLocale();
(() => {
fetch('/category.json',{
method: 'GET',
headers:{
'Access-Control-Allow-Origin':'*',
"Content-Type": "text/plain"
}
})
.then(response => response.json())
.then(data => changeItems(data.data))
.then(data => sortItems(data))
.then(data => displayData(data, 'ranking'))
})();
请注意,我最近更新了CakePHP 3.5并按照指南添加了中间件: Adding the new HTTP Stack to an Existing Application
答案 0 :(得分:2)
这是一个将在下一个版本中修复的错误(3.5.3
)。
参见 https://github.com/cakephp/cakephp/pull/11200
在修复此问题之前,您可以在本地自己应用补丁,也可以在引导程序中手动调用\Cake\I18n\I18n::getDefaultLocale()
一次,以便在应用语言环境选择器的修改之前存储默认语言环境。