Procházet zdrojové kódy

Added some french translations

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@20341 44c647ce-9c0f-0410-b52a-842ac1e357ba
doctorrock83 před 16 roky
rodič
revize
396ff48ac8

+ 454 - 0
documentation/manual/fr/module_specs/Zend_Serializer-Adapter.xml

@@ -0,0 +1,454 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect1 id="zend.serializer.adapter">
+    <title>Zend_Serializer_Adapter</title>
+    
+    <para>
+        Les adaptateurs <classname>Zend_Serializer</classname> servent à changer les méthodes
+        de sérialisation facilement.
+    </para>
+
+    <para>
+        Chaque adaptateurs possède ses propres atouts et inconvénients. Dans certains cas, certains
+        types PHP (objets) ne peuvent être représentés sous forme de chaines. Dans ce cas, ces types
+        seront convertis vers un type sérialisable (par exemple, les objets seront convertis en tableaux).
+        Ci ceci échoue, une exception <classname>Zend_Serializer_Exception</classname> sera alors envoyée.
+    </para>
+
+    <para>
+        Voici une liste des adaptateurs disponibles.
+    </para>
+
+    <sect2 id="zend.serializer.adapter.phpserialize">
+        <title>Zend_Serializer_Adapter_PhpSerialize</title>
+
+        <para>
+            Cet adaptateur utilise les fonctions PHP <methodname>un/serialize</methodname> et
+            constitue un bon choix d'adaptateur par défaut.
+        </para>
+
+        <para>
+            Aucune option de configuration n'existe pour cet adaptateur.
+        </para>
+    </sect2>
+
+    <sect2 id="zend.serializer.adapter.igbinary">
+        <title>Zend_Serializer_Adapter_Igbinary</title>
+
+        <para>
+            <ulink url="http://opensource.dynamoid.com">Igbinary</ulink> est un logiciel
+            Open Source crée par Sulake Dynamoid Oy. C'est un remplaçant du sérialiseur utiliser
+            par PHP. Au lieu d'utiliser une représentation textuelle (couteuse en temps et en poids),
+            igbinary représente les structures de données PHP dans un format binaire compact.
+            Les gains sont importants lorsqu'un système de stockage comme memcache est utilisé
+            pour les données sérialisées.
+        </para>
+
+        <para>
+            L'extension PHP igbinary est requise pour l'utilisation de cet adaptateur.
+        </para>
+
+        <para>
+            Aucune option de configuration n'existe pour cet adaptateur.
+        </para>
+    </sect2>
+
+    <sect2 id="zend.serializer.adapter.wddx">
+        <title>Zend_Serializer_Adapter_Wddx</title>
+
+        <para>
+            <ulink url="http://wikipedia.org/wiki/WDDX">WDDX</ulink> (Web Distributed Data eXchange)
+            est à la fois un langage de programmation, une plateforme et un mecanisme de transport
+            de données entre différents environnements.
+        </para>
+
+        <para>
+            Cet adaptateur utilise simplement les fonctions PHP
+            <ulink url="http://php.net/manual/book.wddx.php">wddx_*()</ulink>. Veuillez lire
+            le manuel PHP afin de vérifier la disponibilité et l'installation de ces fonctions.
+        </para>
+
+        <para>
+            Aussi, l'extension PHP <ulink
+                url="http://php.net/manual/book.simplexml.php">SimpleXML</ulink> est utilisée
+            pour vérifier si une valeur <constant>NULL</constant> retournée par
+            <methodname>wddx_unserialize()</methodname> est basée sur une donnée sérialisée
+            <constant>NULL</constant> ou au contraire des données non valides
+        </para>
+
+        <para>
+            Les options disponibles sont:
+        </para>
+
+        <table>
+            <title>Options Zend_Serializer_Adapter_Wddx</title>
+
+            <tgroup cols="4">
+                 <thead>
+                      <row>
+                          <entry>Option</entry>
+
+                          <entry>Type de donnée</entry>
+
+                          <entry>Valeur par défaut</entry>
+
+                          <entry>Description</entry>
+                    </row>
+                 </thead>
+
+                 <tbody>
+                      <row>
+                          <entry><emphasis>comment</emphasis></entry>
+
+                          <entry><type>chaine</type></entry>
+
+                          <entry></entry>
+
+                          <entry>
+                            Un commentaire qui apparait dans l'en-tête du paquet. 
+                          </entry>
+                      </row>
+                  </tbody>
+             </tgroup>
+        </table>
+    </sect2>
+
+    <sect2 id="zend.serializer.adapter.json">
+        <title>Zend_Serializer_Adapter_Json</title>
+
+        <para>
+            L'adaptateur <acronym>JSON</acronym> acréer un pont vers
+            <classname>Zend_Json</classname> et/ou ext/json (l'extension json de PHP).
+            Pour plus d'informations, lisez le manuel de <link
+                linkend= "zend.json.introduction">Zend_Json</link>.
+        </para>
+
+        <para>
+            Les options disponibles sont:
+        </para>
+
+        <table>
+            <title>Options Zend_Serializer_Adapter_Json</title>
+
+            <tgroup cols="4">
+                 <thead>
+                      <row>
+                          <entry>Option</entry>
+
+                          <entry>Type de donnée</entry>
+
+                          <entry>Valeur par défaut</entry>
+
+                          <entry>Description</entry>
+                    </row>
+                 </thead>
+
+                 <tbody>
+                      <row>
+                          <entry><emphasis>cycleCheck</emphasis></entry>
+
+                          <entry><type>booléen</type></entry>
+
+                          <entry>false</entry>
+
+                          <entry>
+                               Voyez <xref linkend= "zend.json.advanced.objects1"/>
+                          </entry>
+                      </row>
+
+                      <row>
+                          <entry><emphasis>objectDecodeType</emphasis></entry>
+
+                          <entry><type>Zend_Json::TYPE_*</type></entry>
+
+                          <entry>Zend_Json::TYPE_ARRAY</entry>
+
+                          <entry>
+                               Voyez <xref linkend= "zend.json.advanced.objects1"/>
+                          </entry>
+                      </row>
+
+                      <row>
+                          <entry><emphasis>enableJsonExprFinder</emphasis></entry>
+
+                          <entry><type>booléen</type></entry>
+
+                          <entry>false</entry>
+
+                          <entry>
+                               Voyez <xref linkend= "zend.json.advanced.expr"/>
+                          </entry>
+                      </row>
+                  </tbody>
+             </tgroup>
+        </table>
+    </sect2>
+
+    <sect2 id="zend.serializer.adapter.amf03">
+        <title>Zend_Serializer_Adapter_Amf 0 et 3</title>
+
+        <para>
+            Les adaptateurs <acronym>AMF</acronym>, <classname>Zend_Serializer_Adapter_Amf0</classname>
+            et <classname>Zend_Serializer_Adapter_Amf3</classname>, sont un pont vers le sérialiseur
+            du composant <classname>Zend_Amf</classname>. Veuillez lire la documentation de <link
+                linkend= "zend.amf.introduction">Zend_Amf documentation</link> pour plus
+            d'informations.
+        </para>
+
+        <para>
+            Aucune option de configuration n'existe pour cet adaptateur.
+        </para>
+    </sect2>
+
+    <sect2 id="zend.serializer.adapter.pythonpickle">
+        <title>Zend_Serializer_Adapter_PythonPickle</title>
+
+        <para>
+            Cet adaptateur convertit des types PHP vers une chaine <ulink
+                url="http://docs.python.org/library/pickle.html">Python Pickle</ulink>
+            Grâce à lui, vous pouvez lire en Python des données sérialisées de PHP et
+            inversement.
+        </para>
+
+        <para>
+            Les options disponibles sont:
+        </para>
+
+        <table>
+            <title>Options Zend_Serializer_Adapter_PythonPickle</title>
+
+            <tgroup cols="4">
+                 <thead>
+                      <row>
+                          <entry>Option</entry>
+
+                          <entry>Type de donnée</entry>
+
+                          <entry>Valeur par défaut</entry>
+
+                          <entry>Description</entry>
+                    </row>
+                 </thead>
+
+                 <tbody>
+                      <row>
+                          <entry><emphasis>protocol</emphasis></entry>
+
+                          <entry><type>entier</type> (0 | 1 | 2 | 3)</entry>
+
+                          <entry>0</entry>
+
+                          <entry>
+                               La version du protocole Pickle pour <methodname>serialize</methodname>
+                          </entry>
+                      </row>
+                  </tbody>
+             </tgroup>
+        </table>
+
+        <para>
+            Le transtypage (PHP vers Python) se comporte comme suit:
+        </para>
+
+        <table>
+            <title>Le transtypage (PHP vers Python)</title>
+
+            <tgroup cols="2">
+                 <thead>
+                      <row>
+                        <entry>Type PHP</entry>
+
+                        <entry>Type Python</entry>
+                    </row>
+                 </thead>
+
+                 <tbody>
+                      <row>
+                          <entry><type>NULL</type></entry>
+
+                          <entry><type>None</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>booléen</type></entry>
+
+                          <entry><type>booléen</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>entier</type></entry>
+
+                          <entry><type>entier</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>flottant</type></entry>
+
+                          <entry><type>flottant</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>chaine</type></entry>
+
+                          <entry><type>chaine</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>tableau</type></entry>
+
+                          <entry><type>liste</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>tableau associatif</type></entry>
+
+                          <entry><type>dictionnaire</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>objet</type></entry>
+
+                          <entry><type>dictionnaire</type></entry>
+                      </row>
+                  </tbody>
+             </tgroup>
+        </table>
+
+        <para>
+            Le transtypage (Python vers PHP) se comporte comme suit:
+        </para>
+
+        <table>
+            <title>Transtypage (Python vers PHP):</title>
+
+            <tgroup cols="2">
+                 <thead>
+                      <row>
+                        <entry>Type Python</entry>
+
+                        <entry>Type PHP</entry>
+                    </row>
+                 </thead>
+
+                 <tbody>
+                      <row>
+                          <entry><type>None</type></entry>
+
+                          <entry><type>NULL</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>booléen</type></entry>
+
+                          <entry><type>booléen</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>entier</type></entry>
+
+                          <entry><type>entier</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>long</type></entry>
+
+                          <entry>
+                              <type>entier</type>
+                              | <type>flottant</type>
+                              | <type>chaine</type>
+                              | <classname>Zend_Serializer_Exception</classname>
+                          </entry>
+                      </row>
+
+                      <row>
+                          <entry><type>flottant</type></entry>
+
+                          <entry><type>flottant</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>chaine</type></entry>
+
+                          <entry><type>chaine</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>octets</type></entry>
+
+                          <entry><type>chaine</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>chaine Unicode</type></entry>
+
+                          <entry><type>chaine UTF-8</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>list</type></entry>
+
+                          <entry><type>tableau</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>tuple</type></entry>
+
+                          <entry><type>tableau</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>dictionnaire</type></entry>
+
+                          <entry><type>tableau associatif</type></entry>
+                      </row>
+
+                      <row>
+                          <entry>Tout autre type</entry>
+
+                          <entry><classname>Zend_Serializer_Exception</classname></entry>
+                      </row>
+                  </tbody>
+             </tgroup>
+        </table>
+    </sect2>
+    
+    <sect2 id="zend.serializer.adapter.phpcode">
+        <title>Zend_Serializer_Adapter_PhpCode</title>
+
+        <para>
+            Cet adaptateur génère une chaine représentant du code analysable par PHP via <ulink
+                url="http://php.net/manual/function.var-export.php">var_export()</ulink>.A la
+                désérialisation, les données seront exécutées par <ulink
+                url="http://php.net/manual/function.eval.php">eval</ulink>.
+        </para>
+
+        <para>
+             Aucune option de configuration n'existe pour cet adaptateur.
+        </para>
+
+        <warning>
+            <title>Désérialiser des objets</title>
+
+            <para>
+                Les objets seront sérialisés en utilisant la méthode magique<ulink
+                    url="http://php.net/manual/language.oop5.magic.php#language.oop5.magic.set-state">__set_state</ulink>
+                Si la classe ne propose pas cette méthode, une erreur fatale aboutira.
+            </para>
+        </warning>
+
+        <warning>
+            <title>Utilisation de eval()</title>
+
+            <para>
+                L'adaptateur <classname>PhpCode</classname> utilise <methodname>eval()</methodname>
+                pour désérialiser. Ceci mène à des problèmes de performance et de sécurité, un nouveau processus
+                sera crée. Typiquement, vous devriez utiliser l'adaptateur
+                <methodname>PhpSerialize</methodname> à moins que vous ne vouliez que les données sérialisées
+                ne soient analysables à l'oeil humain.
+            </para>
+        </warning>
+    </sect2>
+</sect1>
+<!--
+vim:se ts=4 sw=4 et:
+-->

+ 100 - 0
documentation/manual/fr/module_specs/Zend_Serializer-Introduction.xml

@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect1 id="zend.serializer.introduction">
+    <title>Introduction</title>
+
+    <para>
+        <classname>Zend_Serializer</classname> utilise une interface basée sur des adaptateurs
+        afin de générer des représentations stockables de types php et inversement.
+    </para>
+
+    <example id="zend.serializer.introduction.example.dynamic">
+        <title>Utiliser <classname>Zend_Serializer</classname></title>
+
+        <para>
+            Pour instancier un sérialiseur, vous devriez utiliser la méthode de fabrique
+            d'adaptateurs:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$serializer = Zend_Serializer::factory('PhpSerialize');
+// $serializer est instance de Zend_Serializer_Adapter_AdapterInterface,
+// précisémment Zend_Serializer_Adapter_PhpSerialize
+
+try { 
+    $serialized = $serializer->serialize($data);
+    // $serialized est une chaine
+    
+    $unserialized = $serializer->unserialize($serialized);
+    // ici $data == $unserialized
+} catch (Zend_Serializer_Exception $e) { 
+    echo $e; 
+} 
+]]></programlisting>
+    </example>
+
+    <para>
+        La méhode <methodname>serialize</methodname> génère une chaine. Pour regénérer la donnée
+        utilisez la méthode <methodname>unserialize</methodname>.
+    </para>
+
+    <para>
+        Si une erreur survient à la sérialisation ou désérialisation,
+        <classname>Zend_Serializer</classname> enverra une
+        <classname>Zend_Serializer_Exception</classname>.
+    </para>
+
+    <para>
+        Pour configurer l'adaptateur, vous pouvez passer un tableau ou un objet instance de
+        <classname>Zend_Config</classname> à la méthode <methodname>factory</methodname> ou aux
+        méthode <methodname>un-/serialize</methodname>:
+    </para>
+
+    <programlisting language="php"><![CDATA[
+$serializer = Zend_Serializer::factory('Wddx', array(
+    'comment' => 'serialized by Zend_Serializer',
+));
+
+try { 
+    $serialized = $serializer->serialize($data, array('comment' => 'change comment'));
+    $unserialized = $serializer->unserialize($serialized, array(/* options pour unserialize */));
+} catch (Zend_Serializer_Exception $e) { 
+    echo $e; 
+} 
+]]></programlisting>
+
+    <para>
+        Les options passées à <methodname>factory</methodname> sont valides pour l'objet crée.
+        Vous pouvez alors changer ces options grâce à la méthode <methodname>setOption(s)</methodname>.
+        Pour changer des options pour un seul appel, passez celles-ci en deuxième arguement des méthodes
+        <methodname>serialize</methodname> ou <methodname>unserialize</methodname>.
+    </para>
+
+    <sect2 id="zend.serializer.introduction.example.static.php">
+        <title>Utiliser l'interface statique de Zend_Serializer</title>
+
+        <para>
+            Vous pouvez enregistrer une adaptateur spécifique comme adaptateur par défaut à utiliser
+            avec <classname>Zend_Serializer</classname>. Par défaut, l'adaptateur enregistré est 
+            <classname>PhpSerialize</classname> mais vous pouvez le changer au moyen de la méthode
+            statique <methodname>setDefaultAdapter()</methodname>.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+Zend_Serializer::setDefaultAdapter('PhpSerialize', $options);
+// ou
+$serializer = Zend_Serializer::factory('PhpSerialize', $options);
+Zend_Serializer::setDefaultAdapter($serializer);
+
+try { 
+    $serialized   = Zend_Serializer::serialize($data, $options); 
+    $unserialized = Zend_Serializer::unserialize($serialized, $options); 
+} catch (Zend_Serializer_Exception $e) { 
+    echo $e; 
+} 
+]]></programlisting>
+    </sect2>
+</sect1>
+<!--
+vim:se ts=4 sw=4 et:
+-->

+ 241 - 0
documentation/manual/fr/module_specs/Zend_Test-PHPUnit-Db-Testing.xml

@@ -0,0 +1,241 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect2 id="zend.test.phpunit.db.testing">
+    <title>Utilisation, API et possibilités d'extension</title>
+
+    <para>
+        Le Quickstart permet déja de se rendre compte des capacités de tests d'une base de données avec 
+        PHPUnit et Zend Framework. Cette section donne un aperçu de l'<acronym>API</acronym> de
+        <classname>Zend_Test_PHPUnit_Db</classname> ainsi que de son fonctionnement interne.
+    </para>
+
+    <note>
+        <title>Remarque sur les tests de bases de données</title>
+
+        <para>
+            Tout comme les TestCase de vos contrôleurs, les tests de bases de données sont efféctués
+            au niveau intégration. Ils utilisent différentes couches applicatives pour lancer les tests
+            et à ce titre devraient être utilisés avec précaution.
+        </para>
+
+        <para>
+            Notez que tester la logique métier au seul moyen de tests d'intégration comme ceux
+            fournis avec Zend_Test de Zend Framework est une mauvaise pratique. Les tests d'intégration
+            sont là pour prouver le bon fonctionnement de l'assemblage des composants entre eux, ils ne
+            doivent donc pas remplacer des tests unitaires éffectués plus bas dans les couches de votre
+            logique métier.
+        </para>
+    </note>
+
+    <sect3 id="zend.test.phpunit.db.testing.testcase">
+        <title>La classe Zend_Test_PHPUnit_DatabaseTestCase</title>
+
+        <para>
+            La classe <classname>Zend_Test_PHPUnit_DatabaseTestCase</classname> étend
+            <classname>PHPUnit_Extensions_Database_TestCase</classname>, celle-ci permet de configurer
+            un jeu de données concernant la base, pour chaque test. L'implementation du Zend Framework
+            offre quelques fonctionalités supplémentaires par rapport à l'extension PHPUnit concernant
+            les bases de données, ceci dans le but d'utiliser des ressources provenant de
+            <classname>Zend_Db</classname>. Voici le scénario classique d'un test de base de données :
+        </para>
+
+        <orderedlist>
+            <listitem>
+                <para>
+                    Pour chaque test, PHPUnit crée une instance de la classe de tests (TestCase) et lance
+                    la méthode <methodname>setUp()</methodname>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    Le scénario de test (TestCase) crée à son tour une instance du testeur de base de données
+                    (Database Tester) qui s'occupe de la construction et destruction de la base de données.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    Le testeur de base de données récupère la connexion à la base et le jeu de données
+                    initiales grâce à <methodname>getConnection()</methodname> et
+                    <methodname>getDataSet()</methodname> qui sont toutes deux des méthodes abstraites
+                    que vous devez implémenter dans votre scénario de test.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    Par défaut le testeur vide les tables spécifiées dans le jeu de données, puis
+                    peuple la base avec le jeu de données.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    Lorsque le testeur a fini de monter la base, PHPUnit lance votre test.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    Après que votre test ait fini, <methodname>tearDown()</methodname> est appelée.
+                    Cette méthode n'exécute aucune action du la base de données elle-même car les
+                    actions à mener sont efféctuées en <methodname>setUp()</methodname> (vider les 
+                    tables).
+                </para>
+            </listitem>
+        </orderedlist>
+
+        <note>
+            <para>
+                Le test de la base s'attend à ce que la base de données et les tables soient présentes.
+                Il n'existe pas de mécanisme pour créer/détruire des base de données et/ou des tables.
+            </para>
+        </note>
+
+        <para>
+            La classe <classname>Zend_Test_PHPUnit_DatabaseTestCase</classname> permet les tests de base
+            de données à l'echelle du Zend Framework.
+        </para>
+
+        <para>
+            Le tableau suivant liste uniquement les nouvelles méthodes par rapport à la classe
+            <classname>PHPUnit_Extensions_Database_TestCase</classname>, dont l'<ulink
+                url="http://www.phpunit.de/manual/current/en/database.html">API est documentée dans
+                la documentation de PHPUnit</ulink>.
+        </para>
+
+        <table id="zend.test.phpunit.db.testing.testcase.api-methods">
+            <title>Méthodes de Zend_Test_PHPUnit_DatabaseTestCase</title>
+
+            <tgroup cols="2">
+                <thead>
+                    <row>
+                        <entry>Méthode</entry>
+                        <entry>Description</entry>
+                    </row>
+                </thead>
+
+                <tbody>
+                    <row>
+                        <entry>
+                            <methodname>createZendDbConnection(Zend_Db_Adapter_Abstract $connection,
+                                $schema)</methodname>
+                        </entry>
+
+                        <entry>
+                            Créer une connexion compatible avec l'extension PHPUnit Database depuis une
+                            instance de <classname>Zend_Db_Adapter_Abstract</classname>. Cette méthode devrait
+                            être utilisée dans la configuration du scénario de tests en implémentant la méthode
+                            abstraite <methodname>getConnection()</methodname>.
+                        </entry>
+                    </row>
+
+                    <row>
+                        <entry><methodname>getAdapter()</methodname></entry>
+
+                        <entry>
+                            Méthode permettant l'accès à l'instance de 
+                            <classname>Zend_Db_Adapter_Abstract</classname> qui est encapsulée dans
+                            la connexion efféctuée par PHPUnit au moyen de
+                            <methodname>getConnection()</methodname>.
+                        </entry>
+                    </row>
+
+                    <row>
+                        <entry>
+                            <methodname>createDbRowset(Zend_Db_Table_Rowset_Abstract $rowset,
+                                $tableName = null)</methodname>
+                        </entry>
+
+                        <entry>
+                            Créer un objet représentant les données d'une table depuis une instance de
+                            <classname>Zend_Db_Table_Rowset_Abstract</classname> donnée. La table
+                            reliée au rowset est choisie lorsque <varname>$tableName</varname>
+                            est <constant>NULL</constant>.
+                        </entry>
+                    </row>
+
+                    <row>
+                        <entry>
+                            <methodname>createDbTable(Zend_Db_Table_Abstract $table, $where = null,
+                                $order = null, $count = null, $offset = null)</methodname>
+                        </entry>
+
+                        <entry>
+                            Créer un objet qui représente les données contenues dans une instance de 
+                            <classname>Zend_Db_Table_Abstract</classname> donnée. La récupération des
+                            données est faite grâce à <methodname>fetchAll()</methodname>, les paramètres
+                            additionnels peuvent servir à limiter les données retournées.
+                        </entry>
+                    </row>
+
+                    <row>
+                        <entry>
+                            <methodname>createDbTableDataSet(array $tables=array())</methodname>
+                        </entry>
+
+                        <entry>
+                            Crée un jeu de données basé sur les tables <varname>$tables</varname>, tableau
+                            d'instances de <classname>Zend_Db_Table_Abstract</classname>.
+                        </entry>
+                    </row>
+                </tbody>
+            </tgroup>
+        </table>
+    </sect3>
+
+    <sect3 id="zend.test.phpunit.db.testing.controllerintegration">
+        <title>Intégrer les tests de bases de données avec les tests de contrôleurs</title>
+
+        <para>
+            <acronym>PHP</acronym> n'autorise pas l'héritage multiple, donc vous ne pouvez utiliser
+            les tests de contrôleurs et de bases de données en même temps via héritage. Cependant,
+            vous pouvez utiliser <classname>Zend_Test_PHPUnit_Db_SimpleTester</classname> dans vos tests de
+            contrôleurs pour configurer un environnement relatif à la base pour chaque test de contrôleur.
+        </para>
+
+        <example id="zend.test.phpunit.db.testing.controllerintegration.example">
+            <title>Exemple d'intégration d'une base de données</title>
+
+            <para>
+                Cet exemple reprend le test de UserController utilisé dans la documentation de
+                <classname>Zend_Test_PHPUnit_ControllerTestCase</classname> et y inclut la gestion
+                d'une base de données.
+            </para>
+
+            <programlisting language="php"><![CDATA[
+class UserControllerTest extends Zend_Test_PHPUnit_ControllerTestCase
+{
+    public function setUp()
+    {
+        $this->setupDatabase();
+        $this->bootstrap = array($this, 'appBootstrap');
+        parent::setUp();
+    }
+
+    public function setupDatabase()
+    {
+        $db = Zend_Db::factory(...);
+        $connection = new Zend_Test_PHPUnit_Db_Connection($db,
+                                                      'database_schema_name');
+        $databaseTester = new Zend_Test_PHPUnit_Db_SimpleTester($connection);
+
+        $databaseFixture =
+                    new PHPUnit_Extensions_Database_DataSet_FlatXmlDataSet(
+                        dirname(__FILE__) . '/_files/initialUserFixture.xml'
+                    );
+
+        $databaseTester->setupDatabase($databaseFixture);
+    }
+}
+]]></programlisting>
+
+            <para>
+                Ici le jeu de données <acronym>XML</acronym> "initialUserFixture.xml" est utilisé pour monter
+                des données en base avant chaque test, exactement de la même manière que DatabaseTestCase le
+                fait en interne.
+            </para>
+        </example>
+    </sect3>
+</sect2>

+ 234 - 0
documentation/manual/fr/module_specs/Zend_Validate-Callback.xml

@@ -0,0 +1,234 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect2 id="zend.validate.set.callback">
+    <title>Callback (fonction de rappel)</title>
+
+    <para>
+        <classname>Zend_Validate_Callback</classname> permet de fournir une fonction de rappel
+        utilisée pour valider la valeur.
+    </para>
+
+    <sect3 id="zend.validate.set.callback.basic">
+        <title>Utilisation classique</title>
+
+        <para>
+            Le plus simple est de posséder une fonction classique, qui sera utilisée
+            pour valider la donnée. Soit la fonction ci-après :
+        </para>
+
+        <programlisting language="php"><![CDATA[
+function myMethod($value)
+{
+    // ici de la validation à effectuer
+    return true;
+}
+]]></programlisting>
+
+        <para>
+            Pour l'utiliser avec<classname>Zend_Validate_Callback</classname> vous devez simplement
+            effectuer votre appel comme ceci:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$valid = new Zend_Validate_Callback('myMethod');
+if ($valid->isValid($input)) {
+    // input semble valide
+} else {
+    // input est invalide
+}
+]]></programlisting>
+    </sect3>
+
+    <sect3 id="zend.validate.set.callback.closure">
+        <title>Utilisation avec les fonctions anonymes (closures)</title>
+
+        <para>
+            PHP 5.3 introduit les <ulink url="http://php.net/functions.anonymous">fonctions
+            anonymes</ulink> ou fonctions de <emphasis>fermeture</emphasis>. PHP traite les
+            fonctions anonymes comme des fonctions de rappel valides, et il est donc
+            possible d'utiliser celles-ci avec <classname>Zend_Validate_Callback</classname>.
+            Exemple:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$valid = new Zend_Validate_Callback(function($value){
+    // Validation ici
+    return true;
+});
+
+if ($valid->isValid($input)) {
+    // input semble valide
+} else {
+    // input est invalide
+}
+]]></programlisting>
+    </sect3>
+
+    <sect3 id="zend.validate.set.callback.class">
+        <title>Utilisation avec les méthodes de rappel</title>
+
+        <para>
+            Bien sûr, il est aussi possible d'utiliser des méthodes de rappel:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+class MyClass
+{
+    public function myMethod($value)
+    {
+        // Validation ici
+        return true;
+    }
+}
+]]></programlisting>
+
+        <para>
+            La définition de la fonction de rappel se fait alors dans un tableau contenant un
+            objet de la classe et la méthode à appeler:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$object = new MyClass;
+$valid = new Zend_Validate_Callback(array($object, 'myMethod'));
+if ($valid->isValid($input)) {
+    // input semble valide
+} else {
+    // input est invalide
+}
+]]></programlisting>
+
+        <para>
+            Il est aussi possible d'utiliser une méthode statique comme fonction de rappel:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+class MyClass
+{
+    public static function test($value)
+    {
+        // Validation ici
+        return true;
+    }
+}
+
+$valid = new Zend_Validate_Callback(array('MyClass, 'test'));
+if ($valid->isValid($input)) {
+    // input semble valide
+} else {
+    // input est invalide
+}
+]]></programlisting>
+
+        <para>
+            Enfin, PHP 5.3 définit la méthode magique <methodname>__invoke()</methodname>.
+            Si vous l'utilisez, alors un simple objet suffira comme fonction de rappel:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+class MyClass
+{
+    public function __invoke($value)
+    {
+        // Validation ici
+        return true;
+    }
+}
+
+$object = new MyClass();
+$valid = new Zend_Validate_Callback($object);
+if ($valid->isValid($input)) {
+    // input semble valide
+} else {
+    // input est invalide
+}
+]]></programlisting>
+    </sect3>
+
+    <sect3 id="zend.validate.set.callback.options">
+        <title>Ajouter des options</title>
+
+        <para>
+            <classname>Zend_Validate_Callback</classname> permet d'utiliser des options, celles-ci
+            seront alors passées comme argument supplémentaires à la fonction de callback.
+        </para>
+
+        <para>
+            Soit la définition suivante:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+class MyClass
+{
+    function myMethod($value, $option)
+    {
+        // De la validation ici
+        return true;
+    }
+}
+]]></programlisting>
+
+        <para>
+            Il extsite deux manières d'indiquer des options au validateur : via le constructeur ou sa
+            méthode <methodname>setOptions()</methodname>.
+        </para>
+
+        <para>
+            Via le constructeur, passez un tableau contenant les clés "callback" et "options":
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$valid = new Zend_Validate_Callback(array(
+    'callback' => array('MyClass', 'myMethod'),
+    'options'  => $option,
+));
+
+if ($valid->isValid($input)) {
+    // input semble valide
+} else {
+    // input est invalide
+}
+]]></programlisting>
+
+        <para>
+            Sinon, vous pouvez passer les options après:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$valid = new Zend_Validate_Callback(array('MyClass', 'myMethod'));
+$valid->setOptions($option);
+
+if ($valid->isValid($input)) {
+    // input semble valide
+} else {
+    // input est invalide
+}
+]]></programlisting>
+
+        <para>
+            Si des valeurs supplémentaires sont passées à <methodname>isValid()</methodname> elles
+            seront utilisées comme arguments supplémentaires lors de l'appel à la fonction de rappel,
+            mais avant les options <varname>$options</varname>.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$valid = new Zend_Validate_Callback(array('MyClass', 'myMethod'));
+$valid->setOptions($option);
+
+if ($valid->isValid($input, $additional)) {
+    // input semble valide
+} else {
+    // input est invalide
+}
+]]></programlisting>
+
+        <para>
+            Lors de l'appel à la fonction de rappel, la valeur à valider sera toujours passée comme premier argument
+            à la fonction de rappel suivie de toutes les autres valeurs passées à
+            <methodname>isValid()</methodname>; les autres options suivront. Le nombre et le type d'options qui
+            peuvent être utilisées est illimité.
+        </para>
+    </sect3>
+</sect2>
+<!--
+vim:se ts=4 sw=4 et:
+-->

+ 335 - 0
documentation/manual/fr/module_specs/Zend_Validate-CreditCard.xml

@@ -0,0 +1,335 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect2 id="zend.validate.set.creditcard">
+    <title>CreditCard</title>
+
+    <para>
+        <classname>Zend_Validate_CreditCard</classname> permet de valider si une valeur est susceptible
+        de représenter un numéro de carte de crédit.
+    </para>
+
+    <para>
+        Une carte de crédit contient plein de données, incluant un hologramme, un numéro de compte,
+        un logo, une date d'expiration, un code de sécurité et le nom du détenteur. L'algorithme
+        qui vérifie la combinaison de ces données n'est connu que des entreprises délivrant les cartes
+        et devrait être vérifié lors d'un paiement. Cependant, il est utile de savoir si le numéro de
+        la carte est valable <emphasis>avant</emphasis> d'effectuer de telles vérifications complexes.
+        <classname>Zend_Validate_CreditCard</classname> vérifie simplement que le numéro est bien formé.
+    </para>
+
+    <para>
+        Dans les cas où vous possederiez un service capable d'effectuer des vérifications complètes,
+        <classname>Zend_Validate_CreditCard</classname> vous permet de passer une fonction de rappel
+        à utiliser si le numéro a été vérifié comme valide. Le retour de la fonction de rappel
+        servira alors de retour général du validateur.
+    </para>
+
+    <para>
+        Les institutions suivantes sont acceptées:
+    </para>
+
+    <itemizedlist>
+        <listitem>
+            <para>
+                <emphasis>American Express</emphasis>
+            </para>
+
+            <para>
+                <emphasis>China UnionPay</emphasis>
+            </para>
+
+            <para>
+                <emphasis>Diners Club Card Blanche</emphasis>
+            </para>
+
+            <para>
+                <emphasis>Diners Club International</emphasis>
+            </para>
+
+            <para>
+                <emphasis>Diners Club US &amp; Canada</emphasis>
+            </para>
+
+            <para>
+                <emphasis>Discover Card</emphasis>
+            </para>
+
+            <para>
+                <emphasis>JCB</emphasis>
+            </para>
+
+            <para>
+                <emphasis>Laser</emphasis>
+            </para>
+
+            <para>
+                <emphasis>Maestro</emphasis>
+            </para>
+
+            <para>
+                <emphasis>MasterCard</emphasis>
+            </para>
+
+            <para>
+                <emphasis>Solo</emphasis>
+            </para>
+
+            <para>
+                <emphasis>Visa</emphasis>
+            </para>
+
+            <para>
+                <emphasis>Visa Electron</emphasis>
+            </para>
+        </listitem>
+    </itemizedlist>
+
+    <note>
+        <title>Institutions non valides</title>
+
+        <para>
+            <emphasis>Bankcard</emphasis> et <emphasis>Diners Club
+                enRoute</emphasis> n'existent plus, elles sont donc considérées non valides.
+        </para>
+
+        <para>
+            <emphasis>Switch</emphasis> est rattaché à <emphasis>Visa</emphasis> et est donc
+            considérée comme non valide.
+        </para>
+    </note>
+
+    <sect3 id="zend.validate.set.creditcard.basic">
+        <title>Utilisation classique</title>
+
+        <para>
+            Il y a plusieurs institutions qui peuvent être validées par
+            <classname>Zend_Validate_CreditCard</classname>. Par défaut, toutes les institutions
+            connues sont acceptées:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$valid = new Zend_Validate_CreditCard();
+if ($valid->isValid($input)) {
+    // input semble valide
+} else {
+    // input est invalide
+}
+]]></programlisting>
+
+        <para>
+            L'exemple ci-dessus valide le numéro pour toutes les institutions connues.
+        </para>
+    </sect3>
+
+    <sect3 id="zend.validate.set.creditcard.institute">
+        <title>Accepter seulement certains types de cartes</title>
+
+        <para>
+            Il peut arriver que vous ne vouliez valider que certains types de cartes plutôt que
+            toutes les institutions connues. <classname>Zend_Validate_CreditCard</classname> permet
+            ceci.
+        </para>
+
+        <para>
+            Pour utiliser une limite, spécifiez les institutions accéptées à l'initialisation ou après,
+            grâce à <methodname>setType()</methodname>. Plusieurs arguments sont utilisables.
+        </para>
+
+        <para>
+            Vous pouvez préciser une seule institution:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$valid = new Zend_Validate_CreditCard(
+    Zend_Validate_CreditCard::AMERICAN_EXPRESS
+);
+]]></programlisting>
+
+        <para>
+            Plusieurs institutions se précisent au moyen d'un tableau:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$valid = new Zend_Validate_CreditCard(array(
+    Zend_Validate_CreditCard::AMERICAN_EXPRESS,
+    Zend_Validate_CreditCard::VISA
+));
+]]></programlisting>
+
+        <para>
+            Et comme pour tout validateur, vous pouvez passer un tableau global ou un objet
+            <classname>Zend_Config</classname>. Dans ce cas, les institutions se précisent au moyen
+            de la clé <property>type</property>:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$valid = new Zend_Validate_CreditCard(array(
+    'type' => array(Zend_Validate_CreditCard::AMERICAN_EXPRESS)
+));
+]]></programlisting>
+
+        <table id="zend.validate.set.creditcard.institute.table">
+            <title>Constante représentant les institutions</title>
+            <tgroup cols="5">
+                <thead>
+                    <row>
+                        <entry>Institution</entry>
+                        <entry>Constante</entry>
+                    </row>
+                </thead>
+
+                <tbody>
+                    <row>
+                        <entry><emphasis>American Express</emphasis></entry>
+                        <entry><constant>AMERICAN_EXPRESS</constant></entry>
+                    </row>
+
+                    <row>
+                        <entry><emphasis>China UnionPay</emphasis></entry>
+                        <entry><constant>UNIONPAY</constant></entry>
+                    </row>
+
+                    <row>
+                        <entry><emphasis>Diners Club Card Blanche</emphasis></entry>
+                        <entry><constant>DINERS_CLUB</constant></entry>
+                    </row>
+
+                    <row>
+                        <entry><emphasis>Diners Club International</emphasis></entry>
+                        <entry><constant>DINERS_CLUB</constant></entry>
+                    </row>
+
+                    <row>
+                        <entry><emphasis>Diners Club US &amp; Canada</emphasis></entry>
+                        <entry><constant>DINERS_CLUB_US</constant></entry>
+                    </row>
+
+                    <row>
+                        <entry><emphasis>Discover Card</emphasis></entry>
+                        <entry><constant>DISCOVER</constant></entry>
+                    </row>
+
+                    <row>
+                        <entry><emphasis>JCB</emphasis></entry>
+                        <entry><constant>JCB</constant></entry>
+                    </row>
+
+                    <row>
+                        <entry><emphasis>Laser</emphasis></entry>
+                        <entry><constant>LASER</constant></entry>
+                    </row>
+
+                    <row>
+                        <entry><emphasis>Maestro</emphasis></entry>
+                        <entry><constant>MAESTRO</constant></entry>
+                    </row>
+
+                    <row>
+                        <entry><emphasis>MasterCard</emphasis></entry>
+                        <entry><constant>MASTERCARD</constant></entry>
+                    </row>
+
+                    <row>
+                        <entry><emphasis>Solo</emphasis></entry>
+                        <entry><constant>SOLO</constant></entry>
+                    </row>
+
+                    <row>
+                        <entry><emphasis>Visa</emphasis></entry>
+                        <entry><constant>VISA</constant></entry>
+                    </row>
+
+                    <row>
+                        <entry><emphasis>Visa Electron</emphasis></entry>
+                        <entry><constant>VISA</constant></entry>
+                    </row>
+                </tbody>
+            </tgroup>
+        </table>
+
+        <para>
+            Vous pouvez aussi configurer les institutions valides après la construction,
+            au moyen des méthodes
+            <methodname>setType()</methodname>, <methodname>addType()</methodname> et
+            <methodname>getType()</methodname>.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$valid = new Zend_Validate_CreditCard();
+$valid->setType(array(
+    Zend_Validate_CreditCard::AMERICAN_EXPRESS,
+    Zend_Validate_CreditCard::VISA
+));
+]]></programlisting>
+
+        <note>
+            <title>Institution par défaut</title>
+
+            <para>
+                Si vous ne précisez pas d'institution à la construction, alors <constant>ALL</constant>
+                sera utilisée, et donc toutes les institutions seront utilisées.
+            </para>
+
+            <para>
+                Dans ce cas, utiliser <methodname>addType()</methodname> ne sert à rien.
+            </para>
+        </note>
+    </sect3>
+
+    <sect3 id="zend.validate.set.creditcard.servicecheck">
+        <title>Validation par fonction de rappel</title>
+
+        <para>
+            Comme déja dit, <classname>Zend_Validate_CreditCard</classname> ne valide que le numéro
+            de la carte. Heureusement, certaines institutions proposent des
+            <acronym>API</acronym>s pour valider des numéros de carte de crédit qui ne sont
+            pas publiques. Ces services sont très souvent payants, ainsi cette vérification est par
+            défaut désactivée.
+        </para>
+
+        <para>
+            Lorsque vous avez accès à de telles <acronym>API</acronym>s, vous pouvez les utiliser
+            comme fonctions additionnelles à <classname>Zend_Validate_CreditCard</classname> et ainsi
+            augmenter la sécurité de la validation.
+        </para>
+
+        <para>
+            Pour ce faire, vous devez simplement préciser une fonction de rappel qui sera appelée
+            après que la validation "classique" ait réussi. Ceci évite un appel à l'
+            <acronym>API</acronym> avec un numéro de toute façon non valide et augmentera ainsi
+            les performances de la validation et donc de l'application.
+        </para>
+
+        <para>
+            <methodname>setService()</methodname> et
+            <methodname>getService()</methodname> sont utilisée pour la fonction de rappel.
+            La clé de configuration à utiliser, si vous le souhaitez, est '<property>service</property>'
+            (à la construction). Des détails peuvent être trouvés sur la documentation du validateur<link
+                linkend="zend.validate.set.callback">Callback</link>.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+// Votre classe de service
+class CcService
+{
+    public function checkOnline($cardnumber, $types)
+    {
+        // Processus de validation ici
+    }
+}
+
+// La validation
+$service = new CcService();
+$valid   = new Zend_Validate_CreditCard(Zend_Validate_CreditCard::VISA);
+$valid->setService(array($service, 'checkOnline'));
+]]></programlisting>
+
+        <para>
+            Ici le service sera appelé avec le numéro de carte comme premier paramètre,
+            et les types accéptés comme second.
+        </para>
+    </sect3>
+</sect2>
+<!--
+vim:se ts=4 sw=4 et:
+-->

+ 85 - 0
documentation/manual/fr/module_specs/Zend_Validate-Ip.xml

@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect2 id="zend.validate.set.ip">
+
+    <title>Ip</title>
+
+    <para>
+        <classname>Zend_Validate_Ip</classname> permet de déterminer si une adresse IP donnée
+        est valide. Le composant supporte IPv4 et IPv6.
+    </para>
+
+    <sect3 id="zend.validate.set.ip.basic">
+        <title>Utilisation classique</title>
+
+        <para>
+            Voici un exemple banal:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$validator = new Zend_Validate_Ip();
+if ($validator->isValid($ip)) {
+    // ip semble valide
+} else {
+    // ip n'est pas valide
+}
+]]></programlisting>
+
+        <note>
+            <title>adresses IP invalides</title>
+
+            <para>
+                <classname>Zend_Validate_Ip</classname> ne valide que des adresses IP.
+                'mydomain.com' ou '192.168.50.1/index.html' ne sont donc pas des adresses IP valides.
+                Ce sont des noms de domaines ou des <acronym>URL</acronym>s mais pas des adresses IP.
+            </para>
+        </note>
+
+        <note>
+            <title>Validation IPv6</title>
+
+            <para>
+                <classname>Zend_Validate_Ip</classname> valides les adresses IPv6 au moyen d'expressions
+                régulières. La raison est que les fonctions fournies par PHP ne suivent pas le RFC.
+                Beaucoup d'autres classes disponibles font de même.
+            </para>
+        </note>
+    </sect3>
+
+    <sect3 id="zend.validate.set.ip.singletype">
+        <title>Valider IPv4 ou IPV6 seules</title>
+
+        <para>
+            Il peut arriver de ne vouloir valider qu'un seul des deux formats. Par exemple si le réseau
+            ne supporte pas IPv6, il serait idiot de demander une telle validation.
+        </para>
+
+        <para>
+            Pour limiter <classname>Zend_Validate_Ip</classname> sur un seul des deux protocoles, utilisez
+            les options <property>allowipv4</property> ou <property>allowipv6</property> et mettez les à
+            <constant>FALSE</constant>. Il est possible d'effectuer celà au moyen du constructeur ou
+            avec la méthode <methodname>setOptions()</methodname>.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$validator = new Zend_Validate_Ip(array('allowipv6' => false);
+if ($validator->isValid($ip)) {
+    // ip semble être une IPv4 valide
+} else {
+    // ip n'est pas une adresse IPv4
+}
+]]></programlisting>
+
+        <note>
+            <title>Comportement par défaut</title>
+
+            <para>
+                Le comportement par défaut de <classname>Zend_Validate_Ip</classname> est de valider 
+                les deux standards.
+            </para>
+        </note>
+    </sect3>
+</sect2>
+<!--
+vim:se ts=4 sw=4 et:
+-->

+ 129 - 0
documentation/manual/fr/module_specs/Zend_Validate-Isbn.xml

@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect2 id="zend.validate.set.isbn">
+    <title>Isbn</title>
+
+    <para>
+        <classname>Zend_Validate_Isbn</classname> permet de valider des valeurs
+        <acronym>ISBN-10</acronym> ou <acronym>ISBN-13</acronym>.
+    </para>
+
+    <sect3 id="zend.validate.set.isbn.basic">
+        <title>Utilisation classique</title>
+
+        <para>
+            Voici un exemple banal:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$validator = new Zend_Validate_Isbn();
+if ($validator->isValid($isbn)) {
+    // isbn valide
+} else {
+    // isbn non valide
+}
+]]></programlisting>
+
+        <para>
+            Ceci valide tout <acronym>ISBN-10</acronym> et <acronym>ISBN-13</acronym> sans
+            séparateur.
+        </para>
+    </sect3>
+
+    <sect3 id="zend.validate.set.isbn.type-explicit">
+        <title>Configurer un type de validation ISBN explicite</title>
+
+        <para>
+            Voici comment effectuer une restriction de type de l'<acronym>ISBN</acronym> :
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$validator = new Zend_Validate_Isbn();
+$validator->setType(Zend_Validate_Isbn::ISBN13);
+// OU
+$validator = new Zend_Validate_Isbn(array(
+    'type' => Zend_Validate_Isbn::ISBN13,
+));
+
+if ($validator->isValid($isbn)) {
+    // ISBN-13 valide
+} else {
+    // ISBN-13 invalide
+}
+]]></programlisting>
+
+        <para>
+            Seules les valeurs de <acronym>ISBN-13</acronym> sont validée ci-dessus.
+        </para>
+
+        <para>
+            Les types valides sont:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para><constant>Zend_Validate_Isbn::AUTO</constant> (défaut)</para>
+            </listitem>
+
+            <listitem>
+                <para><constant>Zend_Validate_Isbn::ISBN10</constant></para>
+            </listitem>
+
+            <listitem>
+                <para><constant>Zend_Validate_Isbn::ISBN13</constant></para>
+            </listitem>
+        </itemizedlist>
+    </sect3>
+
+    <sect3 id="zend.validate.set.isbn.separator">
+        <title>Spécifier une restriction de séparateur</title>
+
+        <para>
+            Voici un exemple de restriction de séparateur:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$validator = new Zend_Validate_Isbn();
+$validator->setSeparator('-');
+// OU
+$validator = new Zend_Validate_Isbn(array(
+    'separator' => '-',
+));
+
+if ($validator->isValid($isbn)) {
+    // ISBN valide avec séparateur
+} else {
+    // ISBN invalide avec séparateur
+}
+]]></programlisting>
+
+        <note>
+            <title>Valeurs sans séparateur</title>
+
+            <para>
+                La valeur <constant>FALSE</constant> est retournée si <varname>$isbn</varname>
+                ne contient pas de séparateur <emphasis>ou</emphasis> si le séparateur n'est
+                pas valide.
+            </para>
+        </note>
+
+        <para>
+            Séparateurs valides:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>"" (vide) (défaut)</para>
+            </listitem>
+            <listitem>
+                <para>"-" (tiret)</para>
+            </listitem>
+            <listitem>
+                <para>" " (espace)</para>
+            </listitem>
+        </itemizedlist>
+    </sect3>
+</sect2>
+<!--
+vim:se ts=4 sw=4 et:
+-->

+ 170 - 0
documentation/manual/fr/module_specs/Zend_Validate-NotEmpty.xml

@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect2 id="zend.validate.set.notempty">
+    <title>NotEmpty</title>
+
+    <para>
+        Ce validateur permet de déterminer si une valeur est non vide. C'est utile lorsque vous travaillez
+        avec des formulaires ou des entrées utilisateur, là où vous pouvez l'utiliser pour savoir si des
+        éléments requis ont été saisis.
+    </para>
+
+    <sect3 id="zend.validate.set.notempty.default">
+        <title>Comportement par défaut de Zend_Validate_NotEmpty</title>
+
+        <para>
+            Par défaut, ce validateur fonctionne différement de la fonction 
+            <acronym>PHP</acronym> <methodname>empty()</methodname>. En particulier, ce validateur va
+            évaluer l'entier <emphasis>0</emphasis> et la chaine '<emphasis>0</emphasis>' comme vides.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$valid = new Zend_Validate_NotEmpty();
+$value  = '';
+$result = $valid->isValid($value);
+// retourne false
+]]></programlisting>
+
+        <note>
+            <title>Le comportement par défaut diffère de PHP</title>
+
+            <para>
+                Sans configuration ajoutée, <classname>Zend_Validate_NotEmpty</classname> diffère
+                de <acronym>PHP</acronym>.
+            </para>
+        </note>
+    </sect3>
+
+    <sect3 id="zend.validate.set.notempty.types">
+        <title>Changer le comportement de Zend_Validate_NotEmpty</title>
+
+        <para>
+            Certains projets ont des opinions différentes sur ce qui peut être considéré comme 'vide'.
+            Une chaine seulement composée d'espaces blancs pourrait être considérée comme vide, ou
+            <emphasis>0</emphasis> pourrait être considéré comme non-vide (surtout dans les séquences
+            logiques booléennes). Pour correspondre aux différents besoins,
+            <classname>Zend_Validate_NotEmpty</classname> vous permet de configurer les types que vous
+            considérez comme vides.
+        </para>
+
+        <para>
+            Les types suivants sont gérés:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>
+                    <emphasis>booléen</emphasis>: Retourne <constant>FALSE</constant> lorsque
+                    la valeur booléenne est <constant>FALSE</constant>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>entier</emphasis>: Retourne <constant>FALSE</constant> lorsque l'entier
+                    <emphasis>0</emphasis> est passé. Par défaut cette validation n'est pas activée et
+                    retourne <constant>TRUE</constant> pour toute valeur d'entier.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>flottant</emphasis>: Retourne <constant>FALSE</constant> lorsque le flottant
+                    <emphasis>0.0</emphasis> est passé. Par défaut cette validation n'est pas activée et
+                    retourne <constant>TRUE</constant> pour toute valeur de flottant.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>chaine</emphasis>: Retourne <constant>FALSE</constant> lorsque la chaine vide
+                    <emphasis>''</emphasis> est passée.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>zero</emphasis>: Retourne <constant>FALSE</constant> lorsque le seul caractère
+                    zéro (<emphasis>'0'</emphasis>) est passé.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>tableau_vide</emphasis>: Retourne <constant>FALSE</constant> lorsqu'un tableau vide
+                    <emphasis>array()</emphasis> est passé.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>null</emphasis>: Retourne <constant>FALSE</constant> lorsqu'une valeur
+                    <constant>NULL</constant> est passée.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>php</emphasis>: Retourne <constant>FALSE</constant> lorsque la fonction
+                    <acronym>PHP</acronym> <methodname>empty()</methodname> retournerait
+                    <constant>TRUE</constant>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>espace</emphasis>: Retourne <constant>FALSE</constant> lorsqu'une chaine
+                    ne contenant que des caractères espace est passée.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>tout</emphasis>: Retourne <constant>FALSE</constant> pour tous les
+                    types gérés cités ci-dessus.
+                </para>
+            </listitem>
+        </itemizedlist>
+
+        <para>
+            Toute autre valeur passée retourne <constant>TRUE</constant> par défaut.
+        </para>
+
+        <para>
+            Il existe différentes manières de selectionner les types ci-dessus. Vous pouvez en spécifier
+            un ou plusieurs, sous forme de tableau ou de constantes ou encore de chaines.
+            Voyez les exemples ci-après:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+// Retourne false pour 0
+$validator = new Zend_Validate_NotEmpty(Zend_Validate_NotEmpty::INTEGER);
+
+// Retourne false pour 0 ou '0'
+$validator = new Zend_Validate_NotEmpty(
+    Zend_Validate_NotEmpty::INTEGER + Zend_NotEmpty::ZERO
+);
+
+// Retourne false pour 0 ou '0'
+$validator = new Zend_Validate_NotEmpty(array(
+    Zend_Validate_NotEmpty::INTEGER,
+    Zend_Validate_NotEmpty::ZERO
+));
+
+// Retourne false pour 0 ou '0'
+$validator = new Zend_Validate_NotEmpty(array(
+    'integer',
+    'zero',
+));
+]]></programlisting>
+
+        <para>
+            Il est aussi possible de passer un objet <classname>Zend_Config</classname> afin de
+            préciser les types à utiliser. Après instantiation, <methodname>setType()</methodname>
+            peut être utilisée.
+        </para>
+    </sect3>
+</sect2>
+<!--
+vim:se ts=4 sw=4 et:
+-->

+ 148 - 0
documentation/manual/fr/module_specs/Zend_View-Helpers-Currency.xml

@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect3 id="zend.view.helpers.initial.currency">
+    <title>Aide Currency</title>
+
+    <para>
+        Afficher des informations de monnaie localisées est très courant; l'aide de vue de
+        <classname>Zend_Currency</classname> est dédiée à cela. Voyez le chapitre
+        <link linkend="zend.currency.introduction">sur Zend Currency</link> pour les détails sur la
+        localisation. Dans cette section, nous apprendrons à manipuler l'aide de vue uniquement.
+    </para>
+
+    <para>
+        Il existe plusieurs manières d'initialiser l'aide de vue <emphasis>Currency</emphasis>:
+    </para>
+
+    <itemizedlist>
+        <listitem>
+            <para>
+                Enrigistrée dans une instance de
+                <classname>Zend_Registry</classname>.
+            </para>
+        </listitem>
+
+        <listitem>
+            <para>
+                Grâce à une interface fluide.
+            </para>
+        </listitem>
+
+        <listitem>
+            <para>
+                En instanciant directement la classe.
+            </para>
+        </listitem>
+    </itemizedlist>
+
+    <para>
+        L'enregistrement en registre de <classname>Zend_Currency</classname> est la manière recommandée.
+        Grâce à cela vous pouvez selectionner la monnaie à utiliser puis ajouter son adaptateur au registre.
+    </para>
+
+    <para>
+        Pour séléctionner la valeur de la monnaie à utiliser, passez une chaine ou
+        encore une locale ce qui est recommandé car les informations provenant du client HTTP seront alors
+        utilisées par défaut.
+    </para>
+
+    <note>
+        <para>
+            Nous parlons bien de "locales" et non de "langues" car la langue peut varier en fonction de
+            la position géorgraphique au sein d'un même pays.Par exemple, l'anglais est parlé dans différents
+            dialectes : Anglais ou Américain. Une monnaie est liée directement à une région, vous devrez
+            donc utiliser une locale complète c'est à dire représentant le pays <emphasis>et</emphasis>
+            la région. Nous parlons donc de "locale" plutôt que de "langue."
+        </para>
+    </note>
+
+    <example id="zend.view.helpers.initial.currency.registered">
+        <title>Instance en registre</title>
+
+        <para>
+            Pour utiliser une instance en registre, créez une instance de
+            <classname>Zend_Currency</classname> et enregistrez la dans
+            <classname>Zend_Registry</classname> en utilisant la clé
+            <classname>Zend_Currency</classname>.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+// notre monnaie d'exemple
+$currency = new Zend_Currency('de_AT');
+Zend_Registry::set('Zend_Currency', $currency);
+
+// Dans votre vue
+echo $this->currency(1234.56);
+// Ceci affiche '€ 1.234,56'
+]]></programlisting>
+    </example>
+
+    <para>
+        Si vous préférez utiliser l'interface fluide, vous pouvez alors créer une instance
+        dans votre vue et la configurer après cela.
+    </para>
+
+    <example id="zend.view.helpers.initial.currency.afterwards">
+        <title>Instance dans la vue</title>
+
+        <para>
+            Pour utiliser l'interface fluide, créez une instance de <classname>Zend_Currency</classname>,
+            appelez l'aide de vue sans paramètre et appelez ensuite la méthode <methodname>setCurrency()</methodname>.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+// Dans votre vue
+$currency = new Zend_Currency('de_AT');
+$this->currency()->setCurrency($currency)->currency(1234.56);
+// Ceci affiche '€ 1.234,56'
+]]></programlisting>
+    </example>
+
+    <para>
+        Si vous utilisez l'aide sans <classname>Zend_View</classname> alors vous pouvez aussi
+        l'utiliser de manière directe, via instanciation manuelle.
+    </para>
+
+    <example id="zend.view.helpers.initial.currency.directly.example-1">
+        <title>Utilisation directe via instanciation</title>
+
+        <programlisting language="php"><![CDATA[
+// Notre monnaie d'exemple
+$currency = new Zend_Currency('de_AT');
+
+// Initialisation de l'aide de vue
+$helper = new Zend_View_Helper_Currency($currency);
+echo $helper->currency(1234.56); // Ceci affiche '€ 1.234,56'
+]]></programlisting>
+    </example>
+
+    <para>
+        Comme déja vu, la méthode <methodname>currency()</methodname> est utilisée pour retourner
+        la chaine représentant la monnaie. Appelez la simplement avec la valeur que vous voulez
+        voir affichée. Des options sont aussi disponibles, elles servent à changer le comportement
+        interne de l'aide.
+    </para>
+
+    <example id="zend.view.helpers.initial.currency.directly.example-2">
+        <title>Utilisation directe</title>
+
+        <programlisting language="php"><![CDATA[
+// Notre monnaie d'exemple
+$currency = new Zend_Currency('de_AT');
+
+// Initialisation de l'aide de vue
+$helper = new Zend_View_Helper_Currency($currency);
+echo $helper->currency(1234.56); // Ceci affiche '€ 1.234,56'
+echo $helper->currency(1234.56, array('precision' => 1));
+// Ceci affiche '€ 1.234,6'
+]]></programlisting>
+    </example>
+
+    <para>
+        Concernant les options disponibles, voyez la méthode
+        <methodname>toCurrency()</methodname> de  <classname>Zend_Currency</classname>.
+    </para>
+</sect3>
+<!--
+vim:se ts=4 sw=4 et:
+-->