1

この回答のバリデータ エラーのカスタマイズ例を使用しました: https://stackoverflow.com/a/4881030/822947ですが、翻訳されたエラーの一部を addValidator() または setMessage()/setMessages() でオーバーライドする必要があります。以下の例は機能しません (組み込みのトランスレーターが優先されるようです)... どうすればできますか?

$field->addValidator ('Alpha', false, array ('messages' => array (Zend_Validate_Alpha::NOT_ALPHA => 'My msg')));

$Alpha = new Zend_Validate_Alpha ();
$Alpha->setDisableTranslator (true);
$Alpha->setMessage ('My msg', Zend_Validate_Alpha::NOT_ALPHA);

$Alpha->setMessages (array (Zend_Validate_Alpha::NOT_ALPHA  => 'My msg'));
$field->addValidator ($Alpha);

更新 バリデーターを追加してメッセージを設定する方法に問題はありません。

私の目標は、すべてのエラー メッセージをローカライズすることです。しかし、一部のフォーム フィールドでは、より具体的なメッセージを追加する必要があります。

たとえば、私の lang/translate.php には common Zend_Validate_Alpha::NOT_ALPHA => 'Value contains non alphabetic characters'があり、

しかし、名前フィールドについては、より具体的にする必要があります Zend_Validate_Alpha::NOT_ALPHA => 'Field can contain only alphabetic characters and spaces'

問題は、組み込みのトランスレータを有効にすると特定のメッセージが無視されることです。たとえば、コード

$form = new Zend_Form ();

$validator = new Zend_Validate_Alpha ();
$validator->setMessages (array (
    Zend_Validate_Alpha::NOT_ALPHA => 'xxx %value% x'
));

$form->addElement ('text', 'digit', array (
    'validators' => array (
        $validator
    )
));

$name = new Zend_Form_Element_Text ('name');
$name->addValidator ('Alpha', true, array (
    'allowWhiteSpace' => true,
    'messages' => array
    (
        Zend_Validate_Alpha::NOT_ALPHA => 'my more specific localized msg',
    )
));

$form->addElement ($name);

$form->isValid (array (
    'digit' => '___',
    'name' => '___',
));

Zend_Debug::dump ($form->getMessages ());

翻訳者が無効になっているとき、私は持っています

array(2) {
  'digit' =>
  array(1) {
    'notAlpha' =>
    string(9) "xxx ___ x"
  }
  'name' =>
  array(1) {
    'notAlpha' =>
    string(30) "my more specific localized msg"
  }
}

翻訳者を有効にすると、lang/translate.php からのメッセージが表示されます

array(2) {
  'digit' =>
  array(1) {
    'notAlpha' =>
    string(104) "common localized msg"
  }
  'name' =>
  array(1) {
    'notAlpha' =>
    string(104) "common localized msg"
  }
}
4

1 に答える 1

2

問題は、Alpha バリデーターがコンストラクターへのパラメーターでオプション配列をサポートしていないことです。個別に設定する必要があります。

    $form = new Zend_Form ();

    $validator = new Zend_Validate_Alpha ();

    /* Custom error message */
    $validator->setMessages (array (
        Zend_Validate_Alpha::NOT_ALPHA => 'xxx %value% x'
    ));

    $form->addElement ('text', 'digit', array (
        'validators' => array (
            $validator
        )
    ));


    $form->isValid (array (
        'digit' => '___'
    ));

    Zend_Debug::dump ($form->getMessages ());

アップデート

問題は翻訳者にあります。

トランスレーターを次のように構成しました。

resources.translate.adapter = Array
resources.translate.data = APPLICATION_PATH "/test-translate"

ファイル en.php:

return array (
                "notAlpha" => 'my Translated alpha'
);

そしてそれは動作します。

于 2012-12-01T17:56:18.227 に答える