2011-06-15 141 views
3

我已經驗證錯誤翻譯與我的形式Zend Framework的驗證信息的錯誤

class My_Lib_Forms_Form extends Zend_Form { 

    public function init() 

    { 
     parent::init(); 

     $translator = new Zend_Translate('array', APPLICATION_PATH . '/languages/errors.php'); 

     // Задаем объект переводчика для формы 
     $this->setTranslator($translator);  
    } 
} 

連接。這裏是驗證錯誤翻譯器代碼:

<?php 
return $errors = array(
    Zend_Validate_Alnum::STRING_EMPTY => "Поле не может быть пустым", 
    Zend_Validate_Date::INVALID_DATE => 'Значение не соответствует формату год-месяц-день', 
    Zend_Validate_Date::INVALID => 'Неверная дата', 
    Zend_Validate_Date::FALSEFORMAT => 'Значение не соответствует указанному формату', 
    Zend_Validate_EmailAddress::INVALID_FORMAT => "asdasd", 
    Zend_Validate_EmailAddress::INVALID_FORMAT => "Не верный формат адреса электронной почты. Введите почту в формате [email protected]", 
    Zend_Validate_EmailAddress::INVALID_HOSTNAME => "'%hostname%' не верный домен для адреса электронной почты '%value%'", 
    Zend_Validate_EmailAddress::INVALID_MX_RECORD => "'%hostname%' не имеет MX-записи об адресе электронной почты '%value%'", 
    Zend_Validate_EmailAddress::DOT_ATOM => "'%localPart%' не соответствует формату dot-atom", 
    Zend_Validate_EmailAddress::QUOTED_STRING => "'%localPart%' не соответствует формату quoted-string", 
    Zend_Validate_EmailAddress::INVALID_LOCAL_PART => "'%localPart%' не верное имя для адреса электронной почты '%value%'", 
    Zend_Validate_Int::NOT_INT => 'Значение не является целочисленным значением', 
    Zend_Validate_NotEmpty::IS_EMPTY => 'Поле не может быть пустым', 
    Zend_Validate_StringLength::TOO_SHORT => 'Длина введённого значения меньше чем %min% символов', 
    Zend_Validate_StringLength::TOO_LONG => 'Длина введённого значения больше чем %max% символов', 
    My_Lib_Validate_EqualInputs::NOT_EQUAL => 'Пароли не совпадают', 
    My_Lib_Validate_Password::INVALID => 'Не верный формат пароля', 
    My_Lib_Validate_Password::INVALID_LENGTH => 'Длина пароля должна быть от 7 до 30ти символов', 
    Zend_Captcha_Word::BAD_CAPTCHA => 'Вы указали не верные символы', 
    Zend_Captcha_Word::MISSING_VALUE => 'Поле не может быть пустым', 
    'userAgreement' => 'Регистрируясь вы должны согласится с правилами',  
); 

如何更改驗證錯誤消息自定義元素?

我試圖做到這一點下一方式:

$validatorNotEmpty = new Zend_Validate_NotEmpty(); 
$validatorNotEmpty->setMessages(array(
      Zend_Validate_NotEmpty::IS_EMPTY => 'agreeRules')); 
$userAgreement = new Zend_Form_Element_Checkbox('userAgreement', array(
      'required' => true, 
      'label'  => 'Регистрируясь, вы должны согласиться с правилами:',    
      'validators' => array($validatorNotEmpty), 
     )); 

而且這樣太:

$validatorNotEmpty = new Zend_Validate_NotEmpty(); 
$validatorNotEmpty->setMessage( 'Регистрируясь вы должны согласится с правилами', 
      Zend_Validate_NotEmpty::IS_EMPTY); 
$userAgreement = new Zend_Form_Element_Checkbox('userAgreement', array(
      'required' => true, 
      'label'  => 'Регистрируясь, вы должны согласиться с правилами:',    
      'validators' => array($validatorNotEmpty), 
     )); 

反正我得到消息,從翻譯文件,而不是我的定製編寫的消息文本。

+0

+1表示您可以使用靜態字段進行錯誤消息轉換。沒想到那 – 2013-06-10 05:45:02

回答

2

嘗試

$validatorNotEmpty->setMessages(array('agreeRules')); 

它將覆蓋所有的消息,但在IS_EMPTY情況下,它實際上是一個消息

你可以嘗試另一種方法,按價值換算

刪除Zend_Validate_NotEmpty::IS_EMPTY => 'Поле не может быть пустым',

$errors=array(
//values 
'Value is required and cannot be empty' = > 'My translate', 
'agreeRules' => 'My rules' 
); 

然後

$validatorNotEmpty->setMessages(array(
     Zend_Validate_NotEmpty::IS_EMPTY => 'agreeRules')); 

現在您的翻譯得到文本並將其轉換, 其他譯者使用一個「NotEmpty」(Zend_Validate_NotEmpty::IS_EMPTY是一個字符串)翻譯鍵,忽略文本「agreeRules 「

1

請嘗試下面的方法來添加元素。 它會幫助你。

$這個 - >的addElement(

   'checkbox', 

       'userAgreement', 

       array(
     'label'  => 'Регистрируясь, вы должны согласиться с правилами:', 
     'required' => true, 
     'validators' => array(
      array('NotEmpty', true, array('messages' => array(Zend_Validate_NotEmpty::IS_EMPTY => 'agreeRules'))), 
     ) 
    )); 
+0

我不幫忙。同樣的結果 – Ahmed 2011-06-15 14:21:48

2

你可以添加表單元素

$form->formElementName->setDisableTranslator(true); 
後寫

它將禁用您的元素的翻譯