每个验证器都基于Zend_Valicate提供了一个或多个信息来以防各种失败的验证,你可以把这个信息设置成你自己的信息,或者翻译已经存在的信息来使验证器返回一些不同的信息。
这些验证消息的内容可以在验证器类的开头部分找到,让我们一块看一下Zend_Validate_GreaterThan,以它作为我们的例子:
protected $_messageTemplates = array(
self::NOT_GREATER => "'%value%' is not greater than '%min%'",
);
我们可以看到这里使用常量self::NOT_GREATER作为键指向一个失败信息。它只是许多信息里的一个。
你可以通过getMessageTemplates()方法检索到所有的信息,它将返回验证器在验证期间所有可能返回的信息。
$validator = new Zend_Validate_GreaterThan(); $messages = $validator->getMessageTemplates();
你可以使用setMessage()方法设置一条在特定的错误时返回的信息。
$validator = new Zend_Validate_GreaterThan(); $validator->setMessage( 'Please enter a lower value', Zend_Validate_GreaterThan::NOT_GREATER );
第二个参数定义的失败信息将被覆盖,当你省去参数的时候,这个验证器所有的可能返回的失败信息将都会被设置成这个信息。
zend framework自带了多达45个不同的验证器,200条失败信息,翻译这些信息是个乏味的工作,为了方便,Zend Framework已经自带了提前翻译验证信息,你可以在Zend Framework安装文件的/resources/languages这个路径下找到。
注意:使用路径 资源文件在引入库的路径之外,所有的你的翻译应该也在路径之外。
这里以把所有的验证信息翻译到德语为例,你要做的事只有粘贴下面的翻译器到Zend_Validate来使用这些资源文件。
$translator = new Zend_Translate( array( 'adapter' => 'array', 'content' => '/resources/languages', 'locale' => $language, 'scan' => Zend_Translate::LOCALE_DIRECTORY ) ); Zend_Validate_Abstract::setDefaultTranslator($translator);
注意:使用翻译适配器 翻译适配器Zend Framework选择了数组适配器,使它可以快速的创建并且编辑也非常简单
注意:支持的语言 这个功能还是刚刚起步,所以被支持的语言可能还不太完善,随着版本的更新,新的语言将被添加进去,可以灵活的使用已经存在的资源文件来做属于你自己的翻译。
你也可以使用这些资源文件来覆盖已经存在的翻译,以至于你不需要手动创建自己的文件。
有时限制一个验证信息的最大长度是必要的,例如当你的视图只允许一个最大长度为100个字符显示在一行的时候,Zend_Validate是可以自动限制返回验证信息的最大长度的。
可以用Zend_Validate::getMessageLength()来获得实际的长度,加入是-1,返回的信息将不会呗截断,这个是默认行为。
使用Zend_Validate::setMessageLength()来限制返回的信息长度,可以将它设置成你需要的任何数值,当返回的信息超出了这个长度,信息将被截断并且在后面添上‘...’代替后面的信息。
Zend_Validate::setMessageLength(100);
注意:在什么地方使用这个参数? 设置信息长度的的参数适用于所有的验证器,甚至自己定义的,只要它继承了Zend_Validate_Abstract
本文翻译自:http://framework.zend.com/manual/1.11/en/zend.validate.messages.html
$languageFile=ROOT_PATH.'/library/Fwcms/language/simpleChinese.php'//自定义文件名和路径 $translate = new Zend_Translate('array',require $languageFile, 'zh_CN'); Zend_Registry::set('Zend_Translate', $translate); // Zend_Validate_Abstract::setDefaultTranslator($translate); // Zend_Form::setDefaultTranslator($translate);
以上三种都可以使用。
zend Framework 还没有提供中文的翻译,下面是来自于网络的翻译,但翻译不全,也贴在下面:
return array( "Value is required and can't be empty" => '输入值不可以为空', "'%value%' has not only alphabetic and digit characters" => "'%value%'不是字母或数字", "'%value%' is an empty string" => "输入值不可以为空", "'%value%' has not only alphabetic characters" => "'%value%'包含非英文字母的字符", "isValid" => "错误", "'%value%' must contain between 13 and 19 digits" => "'%value%'必须是一个13到19位之间的数字", "Luhn algorithm (mod-10 checksum) failed on '%value%'" => "Luhn algorithm (mod-10 checksum) failed on '%value%'", "'%value%' is not between '%min%' and '%max%', inclusively" => "'%value%' 不在 '%min%' 和 '%max%'之间", "'%value%' is not strictly between '%min%' and '%max%'" => "'%value%' 必须大于 '%min%' ,小于 '%max%'", "'%value%' is not of the format YYYY-MM-DD" => "'%value%' 必须是类似 YYYY-MM-DD 这样的日期格式", "'%value%' does not appear to be a valid date" => "'%value%' 是一个错误的日期", "'%value%' does not fit given date format" => "'%value%' 日期格式错误", "'%value%' contains not only digit characters" => "'%value%' 不是数字", "'%value%' is not a valid email address in the basic format [email=local-part@hostname]local-part@hostname[/email]" => "这不是一个电子邮件地址", "'%hostname%' is not a valid hostname for email address '%value%'" => "这不是一个电子邮件地址", "'%hostname%' does not appear to have a valid MX record for the email address '%value%'" => "这不是一个电子邮件地址", "'%localPart%' not matched against dot-atom format" => "这不是一个电子邮件地址", "'%localPart%' not matched against quoted-string format" => "这不是一个电子邮件地址", "'%localPart%' is not a valid local part for email address '%value%'" => "这不是一个电子邮件地址", "'%value%' exceeds the allowed length" => "'%value%'不是一个电子邮件地址", "'%value%' does not appear to be a float" => "'%value%'不是一个浮点数", "'%value%' is not greater than '%min%'" => "输入值必须大于 '%min%'", "'%value%' has not only hexadecimal digit characters" => "输入值不是一个十六进制字符串", 'Tokens do not match'=>'Tokens do not match', 'No token was provided to match against'=>'No token was provided to match against', "'%value%' was not found in the haystack"=>"'%value%'不在可选范围之内", "'%value%' does not appear to be an integer"=>"'%value%' 不是一个整数", "'%value%' does not appear to be a valid IP address"=>"'%value%' 不是一个合法的IP地址", "'%value%' is not less than '%max%'"=>"输入值必须小于 '%max%'", "'%value%' does not match against pattern '%pattern%'"=>"'%value%' 不符合输入规则 '%pattern%'", "'%value%' is less than %min% characters long"=>"'%value%' 字符长度小于 %min% 位", "'%value%' is greater than %max% characters long"=>"'%value%' 字符长度超过 %max% 位" );