3

I have validator error translator connected with my Form

  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);    
   }
}

Here is validator error translator code:

<?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 => "Не верный формат адреса электронной почты. Введите почту в формате local-part@hostname",
   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' => 'Регистрируясь вы должны согласится с правилами',    
);

How to change validation error message for custom element?

I'm trying to do it next way:

$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),
       ));

And this way too:

$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),
       ));

Anyway I get message from translator file, not my custom written message text.

1
  • +1 for showing that you can use the static fields for error message translations. Hadn't thought of that Commented Jun 10, 2013 at 5:45

3 Answers 3

2

try

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

it will overwrite all messages, but in IS_EMPTY case it actually is one message

you could try the other approach, translate by value

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

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

then

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

now your translation get the text and translates it, else the translator uses 'notEmpty' (Zend_Validate_NotEmpty::IS_EMPTY is a string) for translation key and ignores the text 'agreeRules'

Sign up to request clarification or add additional context in comments.

Comments

2

you can write this after adding form element

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

it will disable translate for your element

Comments

1

Please try below method to add element.

$this->addElement(

          'checkbox',

          'userAgreement',

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.