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

时间:2017-09-24 16:10:14

标签: php cakephp internationalization cakephp-3.0 translate

我正在使用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

1 个答案:

答案 0 :(得分:2)

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

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

在修复此问题之前,您可以在本地自己应用补丁,也可以在引导程序中手动调用\Cake\I18n\I18n::getDefaultLocale()一次,以便在应用语言环境选择器的修改之前存储默认语言环境。