cakephp的简单本地化问题

时间:2012-01-31 15:33:23

标签: php cakephp localization

我有一个包含两个字段的表,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,
                ));

1 个答案:

答案 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中输出名称。

不过,您最好重新考虑本地化策略