[英]How to translate messages of a custom validator in Zend Framework?
我通過擴展Zend_Validate_Abstract
來驗證關於Zend_Captcha
的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'
我會收到一條空信息。 如果它不存在,我會在驗證器類中定義英語消息。
如何實現自定義驗證器的消息也使用相同的機制進行轉換?
由於谷歌搜索添加了這個,但我使用了不同的翻譯適配器(Poedit)。 處理自定義驗證器轉換的另一種方法是在構造函數中設置響應消息。 這樣, Zend_Translate
的translate函數可以被Poedit調用和捕獲。
class Form_Validator_Promocode extends Zend_Validate_Db_Abstract
{
const ERROR_CODE_EXPIRED = 'codeExpired';
const ERROR_CODE_INVALID = 'codeInvalid';
protected $_messageTemplates = array(
self::ERROR_CODE_EXPIRED => "",
self::ERROR_CODE_INVALID => "",
);
public function __construct($options)
{
parent::__construct($options);
$tr = Zend_Registry::get('Zend_Translate');
$this->setMessage(
$tr->translate("This code has expired"),
Form_Validator_Promocode::ERROR_CODE_EXPIRED
);
$this->setMessage(
$tr->translate("No code matching '%value%' was found"),
Form_Validator_Promocode::ERROR_CODE_INVALID
);
}
}
我不確定我理解你的問題,但我有這個代碼
class Gestionale_Validator_UniqueCustomMsg extends Zend_Validate_Abstract
{
const PIVA_NON_UNICA = 'partita iva già assegnata';
protected $_messageTemplates = array(
self::PIVA_NON_UNICA => 'piva occupata'//verra tradotta in modo automatico
);
然后在我的翻譯中我有
piva occupata="Questa partita iva è già assengata a \"%value%\""
然后我只是添加這樣的錯誤
$this->_error(self::PIVA_NON_UNICA, $data['ragsoc']);
它的工作原理,也在我的引導程序中
...
Zend_Form :: setDefaultTranslator ( $translate );
...
我的問題是包含翻譯數組的文件的編碼。 德語變音符號編碼不正確。 我現在正在使用UTF-8,一切正常。
感謝您的所有努力。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.