我創建了一個自定義的驗證通過擴展Zend_Validate_Abstract
驗證關於Zend_Captcha
一個CAPTCHA輸入:如何在Zend Framework中翻譯自定義驗證器的消息?
class My_Validate_Captcha extends Zend_Validate_Abstract {
const CAPTCHA = 'captcha';
protected $_messageTemplates = array(
self::CAPTCHA => "'%value%' isn't the right solution"
);
protected $_id;
public function __construct($captchaId) {
$this->setId($captchaId);
}
public function setId($id) {
$this->_id = $id;
return $this;
}
public function getId() {
return $this->_id;
}
public function isValid($value) {
$this->_setValue($value);
$captcha = new Zend_Captcha_Image();
if(!$captcha->isValid(array('input' => $value, 'id' => $this->getId()))) {
$this->_error(self::CAPTCHA);
return false;
}
return true;
}
}
它正常工作與Zend_Filter_Input
。如您所見,我爲輸入值無效的情況定義了一條錯誤消息。
現在我試着將這個消息翻譯成德語,就像我翻譯來自Zend_Validate_*
類的其他消息一樣。我通過Zend_Translate
提供了一個陣列適配器。
return array(
// Zend_Validate_Alnum
'notAlnum' => "'%value%' darf nur Buchstaben und Zahlen enthalten",
'stringEmpty' => "'%value%' Dieser Wert darf nicht leer sein",
// ...
// My_Validate_Captcha
'captcha' => "'%value%' ist nicht die richtige Lösung"
)
我的問題是,這裏定義的從Zend_Validate_*
消息被翻譯,而是從My_Validate_Captcha
消息未翻譯。如果'captcha'
存在於翻譯數組中,我會收到一條空的消息。如果它不存在,我會收到驗證器類中定義的英文消息。
我怎樣才能實現自定義驗證器的消息也使用相同的機制翻譯?
的 '陣列適配器' 你指的是 - 這是傳遞給'Zend_Form'對象? – 2011-03-25 20:14:23