cakephp的简单本地化问题

cakephp的简单本地化问题,php,cakephp,localization,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 $vi

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

我觉得你的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中显示名称


不过,你最好重新考虑一下你的本地化策略

如果你想把你的逻辑放在视图中,那你就大错特错了。那根本不是MVC。逻辑进入控制器,而此区域设置检查也不例外。在控制器中设置一个变量,并从视图中调用该变量。此外,如何指定$locale变量?在AppController中,在preRender
$this->set('locale',Configure::read('Config.language'))之前