我已经添加了翻译行为,一切都很好,我可以切换到任何语言等等。唯一不起作用的是当我切换到与在app.php中设置为defaultLocale的语言相同的语言时:
'App' => [
...
'defaultLocale' => env('APP_DEFAULT_LOCALE', 'en_US'),
...
],
我不明白翻译后的字段。
当我删除'defaultLocale‘设置时,它适用于所有语言。
有人能告诉我这里出了什么问题吗?
@ndm谢谢,这对我很有帮助。然而,现在我遇到了另一个问题。这就是如何制作多语言输入表单?所以我有4种语言(地区):en_US,nl_BE,fr_BE,de_BE和ru_RU。defaultLocale为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;
这可以很好地工作。尽管我不确定这是不是合适的蛋糕方式?
但是在视图中(使用禁用的表单)并编辑defaultLocale字段
echo $this->Form->control('title');
显示此时选定区域设置的翻译值,而不是保存在源表中的defaultLocale。F.e.当你将语言切换到俄语时,你会看到:
英语:Русскийтитул荷兰语:荷兰文标题法语:德语:德语标题俄语:Русскийтитул
因此,您缺少缺省语言环境的值。
我是不是忽略了什么,有没有更简单的方法让它“开箱即用”?
发布于 2018-08-24 17:08:05
根据设计,翻译行为期望默认区域设置的内容出现在源表中,而不是翻译表中。这类似于使用翻译函数和语言文件,function calls (源表)包含默认区域设置消息,而language files (转换表)包含本地化消息。
引用自文档:
TranslateBehavior背后的理念是,您有一个表示默认语言的实体,以及可以覆盖此类实体中某些字段的多个翻译。..。
因此,这种行为的工作方式是为了能够保留未覆盖的字段,例如,如果您的源表包含title
和content
字段,并且content
字段在fr_FR
区域设置中只有一个转换,那么在查询fr_FR
区域设置的记录时,title
将包含未转换的(默认区域设置)内容。
另请参阅
https://stackoverflow.com/questions/52000517
复制相似问题