我有一个包含两个字段的表,name和name_spa
要检索正确的语言,我必须在视图中执行以下操作:
if($locale=='eng'){
echo $var['Model']['name'];
}else{
echo $var['Model']['name_spa'];
}
但是,我喜欢这样做:
echo $var['Model']['lname'][$locale];
我尝试使用虚拟字段,但这不起作用。我没有使用i18n,因为它太复杂了我所需要的。
public $virtualFields = array($lname => array(
'enh' => $this->name,
'spa' => $this->name_spa,
));
答案 0 :(得分:0)
您的virtualFields数组似乎对我无效。正如其他人所提到的,你不应该在视图中执行这些操作。一个选项可能是在find()之前构造virtualFields数组,如:
在你的模特里面:
Public function findLocalized($id, $locale) {
if ('spa' === $locale) {
$this->virtualFields['name_localized'] = 'name_spa';
} else {
$this->virtualFields['name_localized'] = 'name';
}
return $this->find('first', array(
'conditions' => array('id' => $id)
));
}
在您的控制器中,使用:
$this->set('var', $this->MyModel->findLocalized($id, $locale));
并在视图中使用:
echo $var['Model']['name_localized'];
将在请求的$ locale中输出名称。
不过,您最好重新考虑本地化策略