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'
翻訳配列内にが存在する場合、空のメッセージが表示されます。存在しない場合は、バリデータークラスで定義された英語のメッセージを受け取ります。
カスタムバリデーターからのメッセージも同じメカニズムを使用して翻訳されるようにするにはどうすればよいですか?