我的应用程序在app / models / contact.php中有联系人模型。我使用_ 构造在数组中添加一些列表,其值应使用_ ('some text',true)进行翻译,如下所示:
class Contact extends AppModel{
var $sex;
function __construct($id = false, $table = null, $ds = null) {
parent::__construct($id, $table, $ds);
$this->sex =array(
'U' => __('Choose Sex', true),
'M' => __('Male', true),
'F' => __('Female', true)
);
}
}
上面提到的$ sex变量用于填充HTML select,如下所示:
// From contacts controller index function
function index(){
$this->set('sex', $this->Contact->sex);
.....
}
// From index view index.ctp
<?php echo $form->input('sex', array('type' => 'select', 'options' => $sex)); ?>
运行cake i18n后,使用Poedit版本1.5.5翻译字符串并删除app / tmp / cache中的文件,我发现列表中的字符串仍然没有翻译。
如何使用模型中的翻译字符串解决此问题?
一般说明:
答案 0 :(得分:4)
CakePHP 1.2不使用“延迟加载”,因此可以在设置语言/区域设置之前加载/构建模型(例如,在AppController::beforeFilter()
内)。
值得考虑;
特别是最后一点; IMO翻译字符串是“表示层”的一部分;即属于视图(或助手)。
这也允许您在没有模型已经翻译字符串的情况下切换语言;
在你的模特中:
class Contact extends AppModel
{
protected $_sexOptions = array(
'U' => 'Choose Sex',
'M' => 'Male',
'F' => 'Female',
);
public function getSexOptions()
{
$out = array();
foreach ($this->_sexOptions as $k => $v) {
$out[$k] = __($v, true);
}
return $out;
}
}
在你的控制器内;
$this->set('sex', $this->Contact->getSexOptions());
创建一个简单的帮助器以使其可重复使用;
应用程序/视图/助手/ options.php
class OptionsHelper extends AppHelper
{
/**
* translates options
*/
public function translate($options)
{
$out = array();
foreach (options as $k => $v) {
$out[$k] = __($v, true);
}
return $out;
}
}
将此助手添加到您的控制器;
public $helpers = array(
// ... other helpers
'options',
);
在您的观点中;
echo $this->Form->input('sex', array(
'type' => 'radio',
'options' => $this->Options->translate($sex)
));