CakePHP 3.6.10 翻译行为不显示 'defaultLocale' 值

CakePHP 3.6.10 Translate behaviour not showing 'defaultLocale' values

我添加了翻译行为并且一切正常,我可以切换到任何语言等。 唯一不起作用的是当我切换到与 app.php 中设置为 defaultLocale:

的语言相同的语言时
'App' => [
    ...
    'defaultLocale' => env('APP_DEFAULT_LOCALE', 'en_US'),
    ...
],

我没有得到翻译的字段。

当我删除 'defaultLocale' 设置时,它适用于所有语言。

谁能告诉我这里出了什么问题?

@ndm 谢谢,很有帮助。但是现在我 运行 陷入了另一个问题。那如何制作多语言输入表单呢?所以我有 4 种语言(语言环境):en_US、nl_BE、fr_BE、de_BE 和 ru_RU。默认区域设置为 en_US。所以为了添加一条新记录,我做了:

// for the defaultLocale
echo $this->Form->control('title');
// for all other languages I iterate over every language except of the defaultLocale
foreach ($supported_locales as $key => $val):
    if ($key !== $default_locale):
        echo $this->Form->control('_translations.' . $key . '.title');
    endif;
endforeach;

这很好用。虽然我不确定这样做是否合适 Cake-way?

但在 VIEW 中(使用禁用的表单)并编辑 defaultLocale 字段

echo $this->Form->control('title');

显示所选语言环境当时的翻译值,而不是保存在源 table 中的 defaultLocale。 F.e。当您当时将语言切换为俄语时,您会看到:

英语: Русский титул 荷兰语:Nederlandse 标题 法语:Titre français 德语:Deutscher Titel 俄语:Русский титул

所以您缺少默认语言环境的值。

我是不是忽略了什么,有没有更简单的方法来完成这项工作'out of the box'?

这是设计使然,翻译行为期望默认语言环境的内容出现在源 table 中,而不是翻译 table 中。这类似于使用翻译功能和语言文件,function calls (the source table) contain the default locale messages, and the language files(翻译table)包含本地化消息。

引自文档:

The philosophy behind the TranslateBehavior is that you have an entity representing the default language, and multiple translations that can override certain fields in such entity. [...]

所以这种行为是为了能够保留未覆盖的字段,假设您的来源 table 有 titlecontent 字段,并且只有一个在 fr_FR 语言环境中翻译 content 字段,然后 title 将在查询 fr_FR 语言环境的记录时包含未翻译(默认语言环境)的内容。

另见