我正在使用CakePHP 3。
我有一个帐户表。每个帐户属于一个国家/地区。使用翻译行为将国家/地区表国际化,因此它可以存储每种语言的国家/地区名称。
class CountriesTable extends Table
{
public function initialize(array $config)
{
$this->table('countries');
$this->displayField('name');
$this->primaryKey('id');
$this->addBehavior('Translate', ['fields' => ['name']]);
}
请注意,“name”字段通过Translate行为进行国际化,因此它不存在于countries表中。
然后在AccountsController中,我想获取使用活动语言的国家/地区列表:
....
$countries = $this->Accounts->Countries->find('list', ['limit' => 200]);
.....
问题在于它没有按预期从 i18n 表中获取翻译。我已经为国际化国家/地区表编写了维护操作,一切正常,但是这个简单的find('list')
无效。
还有一个细节:在Mysql日志中我看到它启动了这个查询。请注意,countries表格只有两个字段: id 和代码,但 displayField 是名称。
SELECT Countries.id AS `Countries__id`, Countries.code AS `Countries__code` FROM countries Countries LIMIT 200
顺便说一句,从2.x切换到3.x变得非常困难。
答案 0 :(得分:1)
经过大量调查后我发现了这个问题。如果是我的情况,账户表不是国际化的,而是相关的表国家。
问题是我没有在Accounts控制器中设置区域设置。将这一行放在发现之前,一切正常:
I18n::locale('spa');
所以我想如果你不使用 I18n 来坚持语言环境,翻译行为根本不起作用。我应该在 AppController 中加载它以使其在应用程序范围内可用。
非常感谢你的帮助!!