gpt4 book ai didi

php - 如何在 Zend Framework 中翻译自定义验证器的消息?

转载 作者:搜寻专家 更新时间:2023-10-31 21:17:34 25 4
gpt4 key购买 nike

我通过扩展 Zend_Validate_Abstract 创建了一个自定义验证器来验证关于 Zend_Captcha 的 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 的翻译函数就可以被 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
);
}

关于php - 如何在 Zend Framework 中翻译自定义验证器的消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5364901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com