I've seen a number of requests for translatable error messages with
Zend_Validate and Zend_Filter_Input, and it was a major goal for
Zend_Form. While the latter's support is mostly complete, one major
issue was allowing injecting validator values into the messages.
I discussed this with Darby and Thomas, and I've now got a solution
committed to subversion.
Zend_Validate_Abstract now has the following methods:
* setTranslator(Zend_Translate $translator = null)
* getTranslator()
* static setDefaultTranslator(Zend_Translate $translator = null)
* static getDefaultTranslator()
Additionally, internally _createMessage() now checks to see if a
translator is registered (either globally or locally); if so, and the
translator has a translation for the given error code, it will translate
the message *and* do variable substitution.
How does it work?
Let's say you use the 'StringLength' validator. You could then define
custom translations for the two error conditions:
stringLengthTooShort = "The string %value% must be longer than %min%
characters"
stringLengthTooLong = "The string %value% must be shorter than %max%
characters"
Create your translation object:
$translator = new Zend_Translate(...);
Then, in the easiest method, set your validator globally:
Zend_Validate_Abstract::setDefaultTranslator($translator);
And, when you validate:
// in this case, using Zend_Filter_Input:
if (!$input->isValid()) {
// messages are translated!
$messages = $input->getMessages();
}
You can also attach a translator to a single validation class instance:
$stringLength->setTranslator($translator);
though that usage is less useful.
Only messages that have message keys in your translations will be
translated; otherwise, the original message string (or any that you've
set) from the validation object will be used.
I will be retro-fitting Zend_Form to utilize this functionality shortly.
In the meantime, if you use Zend_Validate or Zend_Filter_Input, this
works out-of-the-box for those of you tracking current svn.
Please test!
--
Matthew Weier O'Phinney
PHP Developer | [EMAIL PROTECTED]
Zend - The PHP Company | http://www.zend.com/