Я создал специальный валидатор, расширив Zend_Validate_Abstract
для проверки ввода CAPTCHA относительно Zend_Captcha
:
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
? - person Jake N   schedule 25.03.2011