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 有 title
和 content
字段,并且只有一个在 fr_FR
语言环境中翻译 content
字段,然后 title
将在查询 fr_FR
语言环境的记录时包含未翻译(默认语言环境)的内容。
另见
我添加了翻译行为并且一切正常,我可以切换到任何语言等。 唯一不起作用的是当我切换到与 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 有 title
和 content
字段,并且只有一个在 fr_FR
语言环境中翻译 content
字段,然后 title
将在查询 fr_FR
语言环境的记录时包含未翻译(默认语言环境)的内容。
另见