Browse Source

[DOCUMENTATION] French: sync manual

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@20789 44c647ce-9c0f-0410-b52a-842ac1e357ba
mikaelkael 16 years ago
parent
commit
fde181388c

+ 289 - 94
documentation/manual/fr/module_specs/Zend_Validate-EmailAddress.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 17407 -->
+<!-- EN-Revision: 20115 -->
 <!-- Reviewed: no -->
 <sect2 id="zend.validate.set.email_address">
     <title>EmailAddress</title>
@@ -11,10 +11,12 @@
         domaine.
     </para>
 
-    <para><emphasis>Utilisation de base</emphasis></para>
+    <sect3 id="zend.validate.set.email_address.basic">
+        <title>Utilisation de base</title>
 
-    <para>
-        Exemple basique : <programlisting language="php"><![CDATA[
+        <para>Vous trouverez ci-dessous un exemple d'utilisation basique&#160;</para>
+
+        <programlisting language="php"><![CDATA[
 $validateur = new Zend_Validate_EmailAddress();
 if ($validateur->isValid($email)) {
     // l'email est valide
@@ -24,40 +26,132 @@ if ($validateur->isValid($email)) {
         echo "$message\n";
     }
 }
-]]></programlisting> Ceci validera l'adresse émail <varname>$email</varname> et, en cas d'échec,
-        fournira des messages d'erreur informatifs via
-        <code>$validator-&gt;getMessages()</code>.
-    </para>
+]]></programlisting>
 
-    <para><emphasis>Parties locales complexes</emphasis></para>
+        <para>
+            Ceci validera l'adresse émail <varname>$email</varname> et, en cas d'échec,
+            fournira des messages d'erreur informatifs via
+            <code>$validator-&gt;getMessages()</code>.
+        </para>
+    </sect3>
 
-    <para>
-        <classname>Zend_Validate_EmailAddress</classname> validera toute adresse émail
-        conforme à la RFC2822. Comme par exemple <code>bob@domaine.com</code>,
-        <code>bob+jones@domaine.fr</code>, <code>"bob@jones"@domaine.com</code> et <code>"bob
-        jones"@domaine.com</code>. Quelques formats d'émail obsolètes ne seront pas validés (comme
-        tout émail contenant un retour chariot ou un caractère "\").
-    </para>
+    <sect3 id="zend.validate.set.email_address.options">
+        <title>Options for validating Email Addresses</title>
 
-    <para><emphasis>Validation de différents types de noms de domaine</emphasis></para>
+        <para>
+            <classname>Zend_Validate_EmailAddress</classname> supports several options which can
+            either be set at initiation, by giving an array with the related options, or
+            afterwards, by using <methodname>setOptions()</methodname>. The following options are
+            supported:
+        </para>
 
-    <para>
-        La partie domaine d'une adresse émail est validée via <link
-        linkend="zend.validate.set.hostname"><classname>Zend_Validate_Hostname</classname></link>.
-        Par défaut, seules les domaines qualifiés sous la forme <code>domaine.com</code> sont
-        acceptés, même si, il vous est possible d'accepter les adresses IP et les domaines locaux
-        également.
-    </para>
+        <itemizedlist>
+            <listitem>
+                <para>
+                    <emphasis>allow</emphasis>: Defines which type of domain names are accepted.
+                    This option is used in conjunction with the hostname option to set the
+                    hostname validator. For more informations about possible values of this
+                    option, look at <link linkend="zend.validate.set.hostname">Hostname</link>
+                    and possible <constant>ALLOW</constant>* constants. This option defaults to
+                    <constant>ALLOW_DNS</constant>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>hostname</emphasis>: Sets the hostname validator with which the
+                    domain part of the email address will be validated.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>mx</emphasis>: Defines if the MX records from the server should be
+                    detected. If this option is defined to <constant>TRUE</constant> then the MX
+                    records are used to verify if the server
+                    accepts emails. This option defaults to <constant>FALSE</constant>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>deep</emphasis>: Defines if the servers MX records should be verified
+                    by a deep check. When this option is set to <constant>TRUE</constant> then
+                    additionally to MX records also the A, A6 and <constant>AAAA</constant> records
+                    are used to verify if the server accepts emails. This option defaults to
+                    <constant>FALSE</constant>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>domain</emphasis>: Defines if the domain part should be checked.
+                    When this option is set to <constant>FALSE</constant>, then only the local part
+                    of the email address will be checked. In this case the hostname validator will
+                    not be called. This option defaults to <constant>TRUE</constant>.
+                </para>
+            </listitem>
+        </itemizedlist>
 
-    <para>
-        Afin de réaliser cette opération, il vous faut instancier
-        <classname>Zend_Validate_EmailAddress</classname> en lui passant un paramètre indiquant le
-        type de nom de domaine à accepter. Les détails sont disponibles dans
-        <classname>Zend_Validate_EmailAddress</classname> mais vous trouverez ci-dessous un exemple
-        illustrant comment accepter les noms de domaines qualifiés et les hôtes locaux :
         <programlisting language="php"><![CDATA[
-$validateur = new Zend_Validate_EmailAddress(Zend_Validate_Hostname::ALLOW_DNS | Zend_Validate_Hostname::ALLOW_LOCAL);
-if ($validateur->isValid($email)) {
+$validator = new Zend_Validate_EmailAddress();
+$validator->setOptions(array('domain' => false));
+]]></programlisting>
+    </sect3>
+
+    <sect3 id="zend.validate.set.email_address.complexlocal">
+        <title>Parties locales complexes</title>
+
+        <para>
+            <classname>Zend_Validate_EmailAddress</classname> validera toute adresse émail
+            conforme à la RFC2822. Comme par exemple <code>bob@domaine.com</code>,
+            <code>bob+jones@domaine.fr</code>, <code>"bob@jones"@domaine.com</code> et <code>"bob
+            jones"@domaine.com</code>. Quelques formats d'émail obsolètes ne seront pas validés (comme
+            tout émail contenant un retour chariot ou un caractère "\").
+        </para>
+    </sect3>
+
+    <sect3 id="zend.validate.set.email_address.purelocal">
+        <title>Validating only the local part</title>
+
+        <para>
+            If you need <classname>Zend_Validate_EmailAddress</classname> to check only the local
+            part of an email address, and want to disable validation of the hostname, you can
+            set the <property>domain</property> option to <constant>FALSE</constant>. This forces
+            <classname>Zend_Validate_EmailAddress</classname> not to validate the hostname part of
+            the email address.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$validator = new Zend_Validate_EmailAddress();
+$validator->setOptions(array('domain' => FALSE));
+]]></programlisting>
+    </sect3>
+
+    <sect3 id="zend.validate.set.email_address.hostnametype">
+        <title>Validation de différents types de noms de domaine</title>
+
+        <para>
+            La partie domaine d'une adresse émail est validée via <link
+            linkend="zend.validate.set.hostname"><classname>Zend_Validate_Hostname</classname></link>.
+            Par défaut, seules les domaines qualifiés sous la forme <code>domaine.com</code> sont
+            acceptés, même si, il vous est possible d'accepter les adresses IP et les domaines locaux
+            également.
+        </para>
+
+        <para>
+            Afin de réaliser cette opération, il vous faut instancier
+            <classname>Zend_Validate_EmailAddress</classname> en lui passant un paramètre indiquant le
+            type de nom de domaine à accepter. Les détails sont disponibles dans
+            <classname>Zend_Validate_EmailAddress</classname> mais vous trouverez ci-dessous un exemple
+            illustrant comment accepter les noms de domaines qualifiés et les hôtes locaux :
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$validator = new Zend_Validate_EmailAddress(
+                    Zend_Validate_Hostname::ALLOW_DNS |
+                    Zend_Validate_Hostname::ALLOW_LOCAL);
+if ($validator->isValid($email)) {
     // l'email est valide
 } else {
     // l'email est invalide ; afficher pourquoi
@@ -65,79 +159,180 @@ if ($validateur->isValid($email)) {
         echo "$message\n";
     }
 }
-]]></programlisting></para>
+]]></programlisting>
+    </sect3>
 
-    <para>
-        <emphasis>Vérification que le nom de domaine accepte réellement
-        l'émail</emphasis>
-    </para>
+    <sect3 id="zend.validate.set.email_address.checkacceptance">
+        <title>Vérification que le nom de domaine accepte réellement l'émail</title>
 
-    <para>
-        Le fait qu'une adresse électronique est dans un format correct, ne signifie pas
-        nécessairement que l'adresse électronique existe en réalité. Pour aider résoudre ce
-        problème, vous pouvez utiliser la validation MX pour vérifier si une entrée MX (l'émail)
-        existe dans le l'enregistrement du DNS pour le nom de domaine de l'émail. Cela vous dit que
-        le nom de domaine accepte l'émail, mais ne vous dit pas que l'adresse électronique elle-même
-        est valable.
-    </para>
+        <para>
+            Le fait qu'une adresse électronique est dans un format correct, ne signifie pas
+            nécessairement que l'adresse électronique existe en réalité. Pour aider résoudre ce
+            problème, vous pouvez utiliser la validation MX pour vérifier si une entrée MX (l'émail)
+            existe dans le l'enregistrement du DNS pour le nom de domaine de l'émail. Cela vous dit que
+            le nom de domaine accepte l'émail, mais ne vous dit pas que l'adresse électronique elle-même
+            est valable.
+        </para>
+
+        <para>
+            La vérification MX n'est pas active par défaut et est seulement supporté par des
+            plates-formes UNIX pour l'instant. Pour activer la vérification MX vous pouvez passer un
+            deuxième paramètre au constructeur <classname>Zend_Validate_EmailAddress</classname>.
+        </para>
 
-    <para>
-        La vérification MX n'est pas active par défaut et est seulement supporté par des
-        plates-formes UNIX pour l'instant. Pour activer la vérification MX vous pouvez passer un
-        deuxième paramètre au constructeur <classname>Zend_Validate_EmailAddress</classname>.
         <programlisting language="php"><![CDATA[
-$validator =
-    new Zend_Validate_EmailAddress(Zend_Validate_Hostname::ALLOW_DNS,
-                                   true);
-]]></programlisting> Alternativement vous pouvez passer soit <constant>TRUE</constant> soit
-        <constant>FALSE</constant> à <code>$validator-&gt;setValidateMx()</code> pour activer ou désactiver
-        la validation MX.
-    </para>
+$validator = new Zend_Validate_EmailAddress(
+    array(
+        'allow' => Zend_Validate_Hostname::ALLOW_DNS,
+        'mx'    => true
+    )
+);
+]]></programlisting>
 
-    <para>
-        En activant ce paramètre, les fonctions de réseau seront utilisés pour vérifier la
-        présence d'un enregistrement MX sur le nom de domaine de l'adresse électronique que vous
-        voulez valider. Faîtes cependant attention, cela ralentira probablement votre
-        scénario.
-    </para>
+        <note>
+            <title>MX Check under Windows</title>
 
-    <para><emphasis>Valider les noms de domaines internationaux</emphasis></para>
+            <para>
+                Within Windows environments MX checking is only available when
+                <acronym>PHP</acronym> 5.3 or above is used. Below <acronym>PHP</acronym> 5.3 MX
+                checking will not be used even if it's activated within the options.
+            </para>
+        </note>
 
-    <para>
-        <classname>Zend_Validate_EmailAddress</classname> peut aussi vérifier les caractères
-        internationaux qui existent dans quelques domaines. Ceci est connu comme le support de Nom
-        de Domaine International (IDN). Celui-ci est activé par défaut, quoique vous puissiez le
-        mettre hors service en changeant le paramètre via l'objet interne
-        <classname>Zend_Validate_Hostname</classname> qui existe dans
-        <classname>Zend_Validate_EmailAddress</classname>. <programlisting language="php"><![CDATA[
+        <para>
+            Alternativement vous pouvez passer soit <constant>TRUE</constant> soit
+            <constant>FALSE</constant> à <code>$validator-&gt;setValidateMx()</code> pour activer ou désactiver
+            la validation MX.
+        </para>
+
+        <para>
+            En activant ce paramètre, les fonctions de réseau seront utilisés pour vérifier la
+            présence d'un enregistrement MX sur le nom de domaine de l'adresse électronique que vous
+            voulez valider. Faîtes cependant attention, cela ralentira probablement votre
+            scénario.
+        </para>
+
+        <para>
+            Sometimes validation for MX records returns <constant>FALSE</constant>, even if emails
+            are accepted. The reason behind this behaviour is, that servers can accept emails even
+            if they do not provide a MX record. In this case they can provide A, A6 or
+            <constant>AAAA</constant> records. To allow
+            <classname>Zend_Validate_EmailAddress</classname> to check also for these other records,
+            you need to set deep MX validation. This can be done at initiation by setting the
+            <property>deep</property> option or by using <methodname>setOptions()</methodname>.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$validator = new Zend_Validate_EmailAddress(
+    array(
+        'allow' => Zend_Validate_Hostname::ALLOW_DNS,
+        'mx'    => true,
+        'deep'  => true
+    )
+);
+]]></programlisting>
+
+        <warning>
+            <title>Performance warning</title>
+
+            <para>
+                You should be aware that enabling MX check will slow down you script because of the
+                used network functions. Enabling deep check will slow down your script even more as
+                it searches the given server for 3 additional types.
+            </para>
+        </warning>
+
+        <note>
+            <title>Disallowed IP addresses</title>
+
+            <para>
+                You should note that MX validation is only accepted for external servers. When deep
+                MX validation is enabled, then local IP addresses like <command>192.168.*</command>
+                or <command>169.254.*</command> are not accepted.
+            </para>
+        </note>
+    </sect3>
+
+    <sect3 id="zend.validate.set.email_address.validateidn">
+        <title>Valider les noms de domaines internationaux</title>
+
+        <para>
+            <classname>Zend_Validate_EmailAddress</classname> peut aussi vérifier les caractères
+            internationaux qui existent dans quelques domaines. Ceci est connu comme le support de Nom
+            de Domaine International (IDN). Celui-ci est activé par défaut, quoique vous puissiez le
+            mettre hors service en changeant le paramètre via l'objet interne
+            <classname>Zend_Validate_Hostname</classname> qui existe dans
+            <classname>Zend_Validate_EmailAddress</classname>.
+        </para>
+
+        <programlisting language="php"><![CDATA[
 $validator->hostnameValidator->setValidateIdn(false);
-]]></programlisting> De plus amples informations concernant l'utilisation de
-        <methodname>setValidateIdn()</methodname> sont présentes dans la <link
-        linkend="zend.validate.set.hostname">documentation de
-        <classname>Zend_Validate_Hostname</classname></link>.
-    </para>
+]]></programlisting>
 
-    <para>
-        Notez cependant que les IDNs sont seulement validés si vous autorisez la validation
-        des nom de domaines.
-    </para>
+        <para>
+            De plus amples informations concernant l'utilisation de
+            <methodname>setValidateIdn()</methodname> sont présentes dans la <link
+            linkend="zend.validate.set.hostname">documentation de
+            <classname>Zend_Validate_Hostname</classname></link>.
+        </para>
 
-    <para><emphasis>Validation des "Top Level Domains"</emphasis></para>
+        <para>
+            Notez cependant que les IDNs sont seulement validés si vous autorisez la validation
+            des nom de domaines.
+        </para>
+    </sect3>
 
-    <para>
-        Par défaut un nom de domaine sera vérifié grâce à une liste de TLDs connus. Ceci est
-        activé par défaut, quoique vous puissiez le mettre hors service en changeant le paramètre
-        via l'objet <classname>Zend_Validate_Hostname</classname> interne qui existe dans
-        <classname>Zend_Validate_EmailAddress</classname>. <programlisting language="php"><![CDATA[
+    <sect3 id="zend.validate.set.email_address.validatetld">
+        <title>Validation des "Top Level Domains"</title>
+
+        <para>
+            Par défaut un nom de domaine sera vérifié grâce à une liste de TLDs connus. Ceci est
+            activé par défaut, quoique vous puissiez le mettre hors service en changeant le paramètre
+            via l'objet <classname>Zend_Validate_Hostname</classname> interne qui existe dans
+            <classname>Zend_Validate_EmailAddress</classname>. 
+        </para>
+
+        <programlisting language="php"><![CDATA[
 $validator->hostnameValidator->setValidateTld(false);
-]]></programlisting> De plus amples informations concernant l'utilisation de
-        <methodname>setValidateTld()</methodname> sont présentes dans la <link
-        linkend="zend.validate.set.hostname">documentation de
-        <classname>Zend_Validate_Hostname</classname></link>.
-    </para>
+]]></programlisting>
 
-    <para>
-        Notez cependant que les TLDs sont seulement validés si vous autorisez la validation
-        des nom de domaines.
-    </para>
+        <para>
+            De plus amples informations concernant l'utilisation de
+            <methodname>setValidateTld()</methodname> sont présentes dans la <link
+            linkend="zend.validate.set.hostname">documentation de
+            <classname>Zend_Validate_Hostname</classname></link>.
+        </para>
+
+        <para>
+            Notez cependant que les TLDs sont seulement validés si vous autorisez la validation
+            des nom de domaines.
+        </para>
+    </sect3>
+
+    <sect3 id="zend.validate.set.email_address.setmessage">
+        <title>Setting messages</title>
+
+        <para>
+            <classname>Zend_Validate_EmailAddress</classname> makes also use of
+            <classname>Zend_Validate_Hostname</classname> to check the hostname part of a given
+            email address. As with Zend Framework 1.10 you can simply set messages for
+            <classname>Zend_Validate_Hostname</classname> from within
+            <classname>Zend_Validate_EmailAddress</classname>.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$validator = new Zend_Validate_EmailAddress();
+$validator->setMessages(
+    array(
+        Zend_Validate_Hostname::UNKNOWN_TLD => 'I don't know the TLD you gave'
+    )
+);
+]]></programlisting>
+
+        <para>
+            Before Zend Framework 1.10 you had to attach the messages to your own
+            <classname>Zend_Validate_Hostname</classname>, and then set this validator within
+            <classname>Zend_Validate_EmailAddress</classname> to get your own messages returned.
+        </para>
+    </sect3>
 </sect2>

+ 101 - 564
documentation/manual/fr/module_specs/Zend_Validate-Messages.xml

@@ -1,578 +1,117 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 18942 -->
+<!-- EN-Revision: 20352 -->
 <!-- Reviewed: no -->
 <sect1 id="zend.validate.messages">
-
     <title>Messages de validation</title>
 
     <para>
         Chaque validateur basé sur <classname>Zend_Validate</classname> propose un ou plusieurs messages
         dans le cas d'un echec. Vous pouvez utiliser ces informations pour créer vos propres messages
-        ou pour traduire les messages présents. La table suivante liste tous les messages retournés
-        par tous les validateurs.
+        ou pour traduire les messages présents.
     </para>
 
-    <table id="zend.validate.messages.table">
-        <title>Messages de validation disponibles</title>
-        <tgroup cols="3">
-            <thead>
-                <row>
-                    <entry>Validator</entry>
-                    <entry>Constant</entry>
-                    <entry>Message</entry>
-                </row>
-            </thead>
-            <tbody>
-                <row>
-                    <entry morerows="1" valign="middle">Alnum</entry>
-                    <entry><constant>NOT_ALNUM</constant></entry>
-                    <entry>'%value%' has not only alphabetic and digit characters</entry>
-                </row>
-                <row>
-                    <entry><constant>STRING_EMPTY</constant></entry>
-                    <entry>'%value%' is an empty string</entry>
-                </row>
-                <row>
-                    <entry morerows="1" valign="middle">Alpha</entry>
-                    <entry><constant>NOT_ALPHA</constant></entry>
-                    <entry>'%value%' has not only alphabetic characters</entry>
-                </row>
-                <row>
-                    <entry><constant>STRING_EMPTY</constant></entry>
-                    <entry>'%value%' is an empty string</entry>
-                </row>
-                <row>
-                    <entry>Barcode</entry>
-                    <entry>---</entry>
-                    <entry>messages are thrown by a subclass</entry>
-                </row>
-                <row>
-                    <entry morerows="2" valign="middle">Barcode_Ean13</entry>
-                    <entry><constant>INVALID</constant></entry>
-                    <entry>'%value%' is an invalid <constant>EAN</constant>-13 barcode</entry>
-                </row>
-                <row>
-                    <entry><constant>INVALID_LENGTH</constant></entry>
-                    <entry>'%value%' should be 13 characters</entry>
-                </row>
-                <row>
-                    <entry><constant>NOT_NUMERIC</constant></entry>
-                    <entry>'%value%' should contain only numeric characters</entry>
-                </row>
-                <row>
-                    <entry morerows="1" valign="middle">Barcode_UpcA</entry>
-                    <entry><constant>INVALID</constant></entry>
-                    <entry>'%value%' is an invalid <constant>UPC</constant>-A barcode</entry>
-                </row>
-                <row>
-                    <entry><constant>INVALID_LENGTH</constant></entry>
-                    <entry>'%value%' should be 12 characters</entry>
-                </row>
-                <row>
-                    <entry morerows="1" valign="middle">Between</entry>
-                    <entry><constant>NOT_BETWEEN</constant></entry>
-                    <entry>'%value%' is not between '%min%' and '%max%', inclusively</entry>
-                </row>
-                <row>
-                    <entry><constant>NOT_BETWEEN_STRICT</constant></entry>
-                    <entry>'%value%' is not strictly between '%min%' and '%max%'</entry>
-                </row>
-                <row>
-                    <entry morerows="1" valign="middle">Ccnum</entry>
-                    <entry><constant>LENGTH</constant></entry>
-                    <entry>'%value%' must contain between 13 and 19 digits</entry>
-                </row>
-                <row>
-                    <entry><constant>CHECKSUM</constant></entry>
-                    <entry>Luhn algorithm (mod-10 checksum) failed on '%value%'</entry>
-                </row>
-                <row>
-                    <entry morerows="1" valign="middle">Date</entry>
-                    <entry><constant>FALSEFORMAT</constant></entry>
-                    <entry>'%value%' does not fit given date format</entry>
-                </row>
-                <row>
-                    <entry><constant>INVALID</constant></entry>
-                    <entry>'%value%' does not appear to be a valid date</entry>
-                </row>
-                <row>
-                    <entry morerows="1" valign="middle">Db_Abstract</entry>
-                    <entry><constant>ERROR_NO_RECORD_FOUND</constant></entry>
-                    <entry>No record matching %value% was found</entry>
-                </row>
-                <row>
-                    <entry><constant>ERROR_RECORD_FOUND</constant></entry>
-                    <entry>A record matching %value% was found</entry>
-                </row>
-                <row>
-                    <entry morerows="1" valign="middle">Digits</entry>
-                    <entry><constant>NOT_DIGITS</constant></entry>
-                    <entry>'%value%' contains not only digit characters</entry>
-                </row>
-                <row>
-                    <entry><constant>STRING_EMPTY</constant></entry>
-                    <entry>'%value%' is an empty string</entry>
-                </row>
-                <row>
-                    <entry morerows="7" valign="middle">EmailAddress</entry>
-                    <entry><constant>INVALID</constant></entry>
-                    <entry>
-                        '%value%' is not a valid email address in the basic format
-                        local-part@hostname
-                    </entry>
-                </row>
-                <row>
-                    <entry><constant>INVALID_FORMAT</constant></entry>
-                    <entry>'%value%' is not a valid email address in the basic format local-part@hostname</entry>
-                </row>
-                <row>
-                    <entry><constant>INVALID_HOSTNAME</constant></entry>
-                    <entry>'%hostname%' is not a valid hostname for email address '%value%'</entry>
-                </row>
-                <row>
-                    <entry><constant>INVALID_MX_RECORD</constant></entry>
-                    <entry>
-                        '%hostname%' does not appear to have a valid MX record for the email address
-                        '%value%'
-                    </entry>
-                </row>
-                <row>
-                    <entry><constant>DOT_ATOM</constant></entry>
-                    <entry>'%localPart%' not matched against dot-atom format</entry>
-                </row>
-                <row>
-                    <entry><constant>QUOTED_STRING</constant></entry>
-                    <entry>'%localPart%' not matched against quoted-string format</entry>
-                </row>
-                <row>
-                    <entry><constant>INVALID_LOCAL_PART</constant></entry>
-                    <entry>
-                        '%localPart%' is not a valid local part for email address '%value%'
-                    </entry>
-                </row>
-                <row>
-                    <entry><constant>LENGTH_EXCEEDED</constant></entry>
-                    <entry>'%value%' exceeds the allowed length</entry>
-                </row>
-                <row>
-                    <entry morerows="1" valign="middle">File_Count</entry>
-                    <entry><constant>TOO_MUCH</constant></entry>
-                    <entry>
-                        Too much files, maximum '%max%' are allowed but '%count%' are given
-                    </entry>
-                </row>
-                <row>
-                    <entry><constant>TOO_LESS</constant></entry>
-                    <entry>
-                        Too less files, minimum '%min%' are expected but '%count%' are given
-                    </entry>
-                </row>
-                <row>
-                    <entry morerows="2" valign="middle">File_Crc32</entry>
-                    <entry><constant>DOES_NOT_MATCH</constant></entry>
-                    <entry>The file '%value%' does not match the given crc32 hashes</entry>
-                </row>
-                <row>
-                    <entry><constant>NOT_DETECTED</constant></entry>
-                    <entry>There was no crc32 hash detected for the given file</entry>
-                </row>
-                <row>
-                    <entry><constant>NOT_FOUND</constant></entry>
-                    <entry>The file '%value%' could not be found</entry>
-                </row>
-                <row>
-                    <entry morerows="1" valign="middle">File_ExcludeExtension</entry>
-                    <entry><constant>FALSE_EXTENSION</constant></entry>
-                    <entry>The file '%value%' has a false extension</entry>
-                </row>
-                <row>
-                    <entry><constant>NOT_FOUND</constant></entry>
-                    <entry>The file '%value%' was not found</entry>
-                </row>
-                <row>
-                    <entry morerows="2" valign="middle">File_ExcludeMimeType</entry>
-                    <entry><constant>FALSE_TYPE</constant></entry>
-                    <entry>The file '%value%' has a false mimetype of '%type%'</entry>
-                </row>
-                <row>
-                    <entry><constant>NOT_DETECTED</constant></entry>
-                    <entry>The mimetype of file '%value%' could not been detected</entry>
-                </row>
-                <row>
-                    <entry><constant>NOT_READABLE</constant></entry>
-                    <entry>The file '%value%' can not be read</entry>
-                </row>
-                <row>
-                    <entry>File_Exists</entry>
-                    <entry><constant>DOES_NOT_EXIST</constant></entry>
-                    <entry>The file '%value%' does not exist</entry>
-                </row>
-                <row>
-                    <entry morerows="1" valign="middle">File_Extension</entry>
-                    <entry><constant>FALSE_EXTENSION</constant></entry>
-                    <entry>The file '%value%' has a false extension</entry>
-                </row>
-                <row>
-                    <entry><constant>NOT_FOUND</constant></entry>
-                    <entry>The file '%value%' was not found</entry>
-                </row>
-                <row>
-                    <entry morerows="2" valign="middle">File_FilesSize</entry>
-                    <entry><constant>TOO_BIG</constant></entry>
-                    <entry>
-                        All files in sum should have a maximum size of '%max%' but '%size%' were
-                        detected
-                    </entry>
-                </row>
-                <row>
-                    <entry><constant>TOO_SMALL</constant></entry>
-                    <entry>
-                        All files in sum should have a minimum size of '%min%' but '%size%' were
-                        detected
-                    </entry>
-                </row>
-                <row>
-                    <entry><constant>NOT_READABLE</constant></entry>
-                    <entry>One or more files can not be read</entry>
-                </row>
-                <row>
-                    <entry morerows="2" valign="middle">File_Hash</entry>
-                    <entry><constant>DOES_NOT_MATCH</constant></entry>
-                    <entry>The file '%value%' does not match the given hashes</entry>
-                </row>
-                <row>
-                    <entry><constant>NOT_DETECTED</constant></entry>
-                    <entry>There was no hash detected for the given file</entry>
-                </row>
-                <row>
-                    <entry><constant>NOT_FOUND</constant></entry>
-                    <entry>The file '%value%' could not be found</entry>
-                </row>
-                <row>
-                    <entry morerows="5" valign="middle">File_ImageSize</entry>
-                    <entry><constant>WIDTH_TOO_BIG</constant></entry>
-                    <entry>
-                        Maximum allowed width for image '%value%' should be '%maxwidth%' but
-                        '%width%' detected
-                    </entry>
-                </row>
-                <row>
-                    <entry><constant>WIDTH_TOO_SMALL</constant></entry>
-                    <entry>
-                        Minimum expected width for image '%value%' should be '%minwidth%' but
-                        '%width%' detected
-                    </entry>
-                </row>
-                <row>
-                    <entry><constant>HEIGHT_TOO_BIG</constant></entry>
-                    <entry>
-                        Maximum allowed height for image '%value%' should be '%maxheight%' but
-                        '%height%' detected
-                    </entry>
-                </row>
-                <row>
-                    <entry><constant>HEIGHT_TOO_SMALL</constant></entry>
-                    <entry>
-                        Minimum expected height for image '%value%' should be '%minheight%' but
-                        '%height%' detected
-                    </entry>
-                </row>
-                <row>
-                    <entry><constant>NOT_DETECTED</constant></entry>
-                    <entry>The size of image '%value%' could not be detected</entry>
-                </row>
-                <row>
-                    <entry><constant>NOT_READABLE</constant></entry>
-                    <entry>The image '%value%' can not be read</entry>
-                </row>
-                <row>
-                    <entry morerows="2" valign="middle">File_IsCompressed</entry>
-                    <entry><constant>FALSE_TYPE</constant></entry>
-                    <entry>The file '%value%' is not compressed, '%type%' detected</entry>
-                </row>
-                <row>
-                    <entry><constant>NOT_DETECTED</constant></entry>
-                    <entry>The mimetype of file '%value%' could not been detected</entry>
-                </row>
-                <row>
-                    <entry><constant>NOT_READABLE</constant></entry>
-                    <entry>The file '%value%' can not be read</entry>
-                </row>
-                <row>
-                    <entry morerows="2" valign="middle">File_IsImage</entry>
-                    <entry><constant>FALSE_TYPE</constant></entry>
-                    <entry>The file '%value%' is no image, '%type%' detected</entry>
-                </row>
-                <row>
-                    <entry><constant>NOT_DETECTED</constant></entry>
-                    <entry>The mimetype of file '%value%' could not been detected</entry>
-                </row>
-                <row>
-                    <entry><constant>NOT_READABLE</constant></entry>
-                    <entry>The file '%value%' can not be read</entry>
-                </row>
-                <row>
-                    <entry morerows="2" valign="middle">File_Md5</entry>
-                    <entry><constant>DOES_NOT_MATCH</constant></entry>
-                    <entry>The file '%value%' does not match the given md5 hashes</entry>
-                </row>
-                <row>
-                    <entry><constant>NOT_DETECTED</constant></entry>
-                    <entry>There was no md5 hash detected for the given file</entry>
-                </row>
-                <row>
-                    <entry><constant>NOT_FOUND</constant></entry>
-                    <entry>The file '%value%' could not be found</entry>
-                </row>
-                <row>
-                    <entry morerows="2" valign="middle">File_MimeType</entry>
-                    <entry><constant>FALSE_TYPE</constant></entry>
-                    <entry>The file '%value%' has a false mimetype of '%type%'</entry>
-                </row>
-                <row>
-                    <entry><constant>NOT_DETECTED</constant></entry>
-                    <entry>The mimetype of file '%value%' could not been detected</entry>
-                </row>
-                <row>
-                    <entry><constant>NOT_READABLE</constant></entry>
-                    <entry>The file '%value%' can not be read</entry>
-                </row>
-                <row>
-                    <entry>File_NotExists</entry>
-                    <entry><constant>DOES_EXIST</constant></entry>
-                    <entry>The file '%value%' does exist</entry>
-                </row>
-                <row>
-                    <entry morerows="2" valign="middle">File_Sha1</entry>
-                    <entry><constant>DOES_NOT_MATCH</constant></entry>
-                    <entry>The file '%value%' does not match the given sha1 hashes</entry>
-                </row>
-                <row>
-                    <entry><constant>NOT_DETECTED</constant></entry>
-                    <entry>There was no sha1 hash detected for the given file</entry>
-                </row>
-                <row>
-                    <entry><constant>NOT_FOUND</constant></entry>
-                    <entry>The file '%value%' could not be found</entry>
-                </row>
-                <row>
-                    <entry morerows="2" valign="middle">File_Size</entry>
-                    <entry><constant>TOO_BIG</constant></entry>
-                    <entry>
-                        Maximum allowed size for file '%value%' is '%max%' but '%size%' detected
-                    </entry>
-                </row>
-                <row>
-                    <entry><constant>TOO_SMALL</constant></entry>
-                    <entry>
-                        Minimum expected size for file '%value%' is '%min%' but '%size%' detected
-                    </entry>
-                </row>
-                <row>
-                    <entry><constant>NOT_FOUND</constant></entry>
-                    <entry>The file '%value%' could not be found</entry>
-                </row>
-                <row>
-                    <entry morerows="9" valign="middle">File_Upload</entry>
-                    <entry><constant>INI_SIZE</constant></entry>
-                    <entry>The file '%value%' exceeds the defined ini size</entry>
-                </row>
-                <row>
-                    <entry><constant>FORM_SIZE</constant></entry>
-                    <entry>The file '%value%' exceeds the defined form size</entry>
-                </row>
-                <row>
-                    <entry><constant>PARTIAL</constant></entry>
-                    <entry>The file '%value%' was only partially uploaded</entry>
-                </row>
-                <row>
-                    <entry><constant>NO_FILE</constant></entry>
-                    <entry>The file '%value%' was not uploaded</entry>
-                </row>
-                <row>
-                    <entry><constant>NO_TMP_DIR</constant></entry>
-                    <entry>No temporary directory was found for the file '%value%'</entry>
-                </row>
-                <row>
-                    <entry><constant>CANT_WRITE</constant></entry>
-                    <entry>The file '%value%' can't be written</entry>
-                </row>
-                <row>
-                    <entry><constant>EXTENSION</constant></entry>
-                    <entry>
-                        The extension returned an error while uploading the file '%value%'
-                    </entry>
-                </row>
-                <row>
-                    <entry><constant>ATTACK</constant></entry>
-                    <entry>The file '%value%' was illegal uploaded, possible attack</entry>
-                </row>
-                <row>
-                    <entry><constant>FILE_NOT_FOUND</constant></entry>
-                    <entry>The file '%value%' was not found</entry>
-                </row>
-                <row>
-                    <entry><constant>UNKNOWN</constant></entry>
-                    <entry>Unknown error while uploading the file '%value%'</entry>
-                </row>
-                <row>
-                    <entry morerows="2" valign="middle">File_WordCount</entry>
-                    <entry><constant>TOO_MUCH</constant></entry>
-                    <entry>
-                        Too much words, maximum '%max%' are allowed but '%count%' were counted
-                    </entry>
-                </row>
-                <row>
-                    <entry><constant>TOO_LESS</constant></entry>
-                    <entry>
-                        Too less words, minimum '%min%' are expected but '%count%' were counted
-                    </entry>
-                </row>
-                <row>
-                    <entry><constant>NOT_FOUND</constant></entry>
-                    <entry>The file '%value%' could not be found</entry>
-                </row>
-                <row>
-                    <entry>Float</entry>
-                    <entry><constant>NOT_FLOAT</constant></entry>
-                    <entry>'%value%' does not appear to be a float</entry>
-                </row>
-                <row>
-                    <entry>GreaterThan</entry>
-                    <entry><constant>NOT_GREATER</constant></entry>
-                    <entry>'%value%' is not greater than '%min%'</entry>
-                </row>
-                <row>
-                    <entry>Hex</entry>
-                    <entry><constant>NOT_HEX</constant></entry>
-                    <entry>'%value%' has not only hexadecimal digit characters</entry>
-                </row>
-                <row>
-                    <entry morerows="7" valign="middle">Hostname</entry>
-                    <entry><constant>IP_ADDRESS_NOT_ALLOWED</constant></entry>
-                    <entry>
-                        '%value%' appears to be an IP address, but IP addresses are not allowed
-                    </entry>
-                </row>
-                <row>
-                    <entry><constant>UNKNOWN_TLD</constant></entry>
-                    <entry>
-                        '%value%' appears to be a <acronym>DNS</acronym> hostname but cannot match <acronym>TLD</acronym> against known
-                        list
-                    </entry>
-                </row>
-                <row>
-                    <entry><constant>INVALID_DASH</constant></entry>
-                    <entry>
-                        '%value%' appears to be a <acronym>DNS</acronym> hostname but contains a dash (-) in an invalid
-                        position
-                    </entry>
-                </row>
-                <row>
-                    <entry><constant>INVALID_HOSTNAME_SCHEMA</constant></entry>
-                    <entry>
-                        '%value%' appears to be a <acronym>DNS</acronym> hostname but cannot match against hostname
-                        schema for <acronym>TLD</acronym> '%tld%'
-                    </entry>
-                </row>
-                <row>
-                    <entry><constant>UNDECIPHERABLE_TLD</constant></entry>
-                    <entry>
-                        '%value%' appears to be a <acronym>DNS</acronym> hostname but cannot extract <acronym>TLD</acronym> part
-                    </entry>
-                </row>
-                <row>
-                    <entry><constant>INVALID_HOSTNAME</constant></entry>
-                    <entry>
-                        '%value%' does not match the expected structure for a <acronym>DNS</acronym> hostname
-                    </entry>
-                </row>
-                <row>
-                    <entry><constant>INVALID_LOCAL_NAME</constant></entry>
-                    <entry>'%value%' does not appear to be a valid local network name</entry>
-                </row>
-                <row>
-                    <entry><constant>LOCAL_NAME_NOT_ALLOWED</constant></entry>
-                    <entry>
-                        '%value%' appears to be a local network name but local network names are not
-                        allowed
-                    </entry>
-                </row>
-                <row>
-                    <entry morerows="2" valign="middle">Iban</entry>
-                    <entry><constant>NOTSUPPORTED</constant></entry>
-                    <entry>'%value%' does not have <acronym>IBAN</acronym></entry>
-                </row>
-                <row>
-                    <entry><constant>FALSEFORMAT</constant></entry>
-                    <entry>'%value%' has a false format</entry>
-                </row>
-                <row>
-                    <entry><constant>CHECKFAILED</constant></entry>
-                    <entry>'%value%' has failed the <acronym>IBAN</acronym> check</entry>
-                </row>
-                <row>
-                    <entry morerows="1" valign="middle">Identical</entry>
-                    <entry><constant>NOT_SAME</constant></entry>
-                    <entry>The token '%token%' does not match the given token '%value%'</entry>
-                </row>
-                <row>
-                    <entry><constant>MISSING_TOKEN</constant></entry>
-                    <entry>No token was provided to match against</entry>
-                </row>
-                <row>
-                    <entry>InArray</entry>
-                    <entry><constant>NOT_IN_ARRAY</constant></entry>
-                    <entry>'%value%' was not found in the haystack</entry>
-                </row>
-                <row>
-                    <entry>Int</entry>
-                    <entry><constant>NOT_INT</constant></entry>
-                    <entry>'%value%' does not appear to be an integer</entry>
-                </row>
-                <row>
-                    <entry>Ip</entry>
-                    <entry><constant>NOT_IP_ADDRESS</constant></entry>
-                    <entry>'%value%' does not appear to be a valid IP address</entry>
-                </row>
-                <row>
-                    <entry>LessThan</entry>
-                    <entry><constant>NOT_LESS</constant></entry>
-                    <entry>'%value%' is not less than '%max%'</entry>
-                </row>
-                <row>
-                    <entry>NotEmpty</entry>
-                    <entry><constant>IS_EMPTY</constant></entry>
-                    <entry>Value is required and can't be empty</entry>
-                </row>
-                <row>
-                    <entry>Regex</entry>
-                    <entry><constant>NOT_MATCH</constant></entry>
-                    <entry>'%value%' does not match against pattern '%pattern%'</entry>
-                </row>
-                <row>
-                    <entry morerows="1" valign="middle">StringLength</entry>
-                    <entry><constant>TOO_SHORT</constant></entry>
-                    <entry>'%value%' is less than %min% characters long</entry>
-                </row>
-                <row>
-                    <entry><constant>TOO_LONG</constant></entry>
-                    <entry>'%value%' is greater than %max% characters long</entry>
-                </row>
-            </tbody>
-        </tgroup>
-    </table>
+    <para>
+        These validation messages are constants which can be found at top of each validator class.
+        Let's look into <classname>Zend_Validate_GreaterThan</classname> for an descriptive example:
+    </para>
+
+    <programlisting language="php"><![CDATA[
+protected $_messageTemplates = array(
+    self::NOT_GREATER => "'%value%' is not greater than '%min%'",
+);
+]]></programlisting>
 
     <para>
-        Il est possible de récupérer tous les messages d'erreurs d'un validator grâce à sa méthode
-        <methodname>getMessageTemplates()</methodname>. Celle-ci retourne un tableau.
+        As you can see the constant <constant>self::NOT_GREATER</constant> refers to the failure and
+        is used as key, and the message itself is used as value of the message array.
+    </para>
+
+    <para>
+        You can retrieve all message templates from a validator by using the
+        <methodname>getMessageTemplates()</methodname> method. It returns you the above array which
+        contains all messages a validator could return in the case of a failed validation.
     </para>
 
     <programlisting language="php"><![CDATA[
-$validator = new Zend_Validate_Alnum();
+$validator = new Zend_Validate_GreaterThan();
 $messages  = $validator->getMessageTemplates();
 ]]></programlisting>
 
+    <para>
+        Using the <methodname>setMessage()</methodname> method you can set another message to be
+        returned in case of the specified failure.
+    </para>
+
+    <programlisting language="php"><![CDATA[
+$validator = new Zend_Validate_GreaterThan();
+$validator->setMessage('Please enter a lower value', Zend_Validate_GreaterThan::NOT_GREATER);
+]]></programlisting>
+
+    <para>
+        The second parameter defines the failure which will be overridden. When you omit this
+        parameter, then the given message will be set for all possible failures of this validator.
+    </para>
+
+    <sect2 id="zend.validate.messages.pretranslated">
+        <title>Using pre-translated validation messages</title>
+
+        <para>
+            Zend Framework is shipped with more than 45 different validators with more than 200
+            failure messages. It can be a tendious task to translate all of these messages. But for
+            your convinience Zend Framework comes with already pre-translated validation messages.
+            You can find them within the path <filename>/resources/languages</filename> in your
+            Zend Framework installation.
+        </para>
+
+        <note>
+            <title>Used path</title>
+
+            <para>
+                The resource files are outside of the library path because all of your translations
+                should also be outside of this path.
+            </para>
+        </note>
+
+        <para>
+            So to translate all validation messages to german for example, all you have to do is to
+            attach a translator to <classname>Zend_Validate</classname> using these resource files.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$translator = new Zend_Translate(
+    'array',
+    '/resources/languages',
+    $language,
+    array('scan' => Zend_Locale::LOCALE_DIRECTORY)
+);
+Zend_Validate_Abstract::setDefaultTranslator($translator);
+]]></programlisting>
+
+        <note>
+            <title>Used translation adapter</title>
+
+            <para>
+                As translation adapter Zend Framework choosed the array adapter. It is simple to
+                edit and created very fast.
+            </para>
+        </note>
+
+        <note>
+            <title>Supported languages</title>
+
+            <para>
+                This feature is very young, so the amount of supported languages may not be
+                complete. New languages will be added with each release. Additionally feel free to
+                use the existing resource files to make your own translations.
+            </para>
+
+            <para>
+                You could also use these resource files to rewrite existing translations. So you
+                are not in need to create these files manually yourself.
+            </para>
+        </note>
+    </sect2>
+
     <sect2 id="zend.validate.messages.limitation">
         <title>Limiter la taille d'un message de validation</title>
 
@@ -599,14 +138,12 @@ Zend_Validate::setMessageLength(100);
 ]]></programlisting>
 
         <note>
+            <title>Où ce paramètre est-il utilisé&#160;?</title>
+
             <para>
-                Notez que la taille des messages affecte aussi les messages personnalisés enregistrés,
-                si le validateur considéré étend <classname>Zend_Validate_Abstract</classname>.
+                La taille des messages affecte aussi les messages personnalisés enregistrés, dès
+                que le validateur considéré étend <classname>Zend_Validate_Abstract</classname>.
             </para>
         </note>
     </sect2>
-
-</sect1>
-<!--
-vim:se ts=4 sw=4 et:
--->
+</sect1>