-- bfoust <[EMAIL PROTECTED]> wrote
(on Thursday, 22 May 2008, 06:06 PM -0700):
> The default translator used by all forms may be set by calling:
>
> Zend_Form::setDefaultTranslator(new Zend_Translate(...));
>
> Then, when $form->isValid is called, each of the element validators have
> their translators set to that same default translator (if they don't have a
> translator explicitly defined).
>
> This works fine, if you want to use the same error message for every
> validator instance of the same name. For example, NotEmpty, the validator
> automatically created by $element->setRequired(true), uses the key 'isEmpty'
> for its error message. If 'isEmpty' is mapped to a string in the default
> translator, it will be picked up and used as the error message when a value
> is not supplied for that field (element) of the form.
>
> However, it is more-likely the case that in a large application, different
> fields will require different error messages when they are left blank. This
> is no problem if you're not relying on a translator. Each of those NotEmpty
> validator instances can be given customized messages by calling setMessage
> on them.
>
> But in that case, the translator stops working, seemingly because of an
> oversight in the implementation:
>
> (for this example, assume $messageKey has the value 'isEmpty')
> _createMessage in Abstract.php line 191:
>
> $message = $this->_messageTemplates[$messageKey];
>
> if (null !== ($translator = $this->getTranslator())) {
> if ($translator->isTranslated($messageKey)) {
> $message = $translator->translate($messageKey);
> }
> }
>
> But what if the developer has specified:
>
> $password->addValidator('NotEmpty', true);
>
> $password->getValidator('NotEmpty')->setMessage('form.login.password.errBlank');
>
> with the following line in en_US.php:
>
> 'form.login.password.errBlank' => "Please enter your password."
>
> The above code in Zend Framework's Abstract::_createMessage will output only
> the translation key as the error message ('form.login.password.errBlank').
>
> What is needed, is to translate the message (user-defined key), if it has
> been set, otherwise, the default key for that validator:
>
> if ($translator->isTranslated($message))
> $message = $translator->translate($message);
> else if ($translator->isTranslated($messageKey))
> $message = $translator->translate($messageKey);
>
> This fix will behave as expected in both cases -- whether the developer has
> defined a custom message key, or not.
Please place an issue in the tracker for this.
--
Matthew Weier O'Phinney
Software Architect | [EMAIL PROTECTED]
Zend - The PHP Company | http://www.zend.com/