Explorar o código

Added some translations for french doc
Fixed a typo in Filter-Compress doc

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@18474 44c647ce-9c0f-0410-b52a-842ac1e357ba

doctorrock83 %!s(int64=16) %!d(string=hai) anos
pai
achega
6bc90cd663

+ 1 - 1
documentation/manual/en/module_specs/Zend_Filter-Compress.xml

@@ -208,7 +208,7 @@ $filter     = new Zend_Filter_Compress(array(
         'archive' => 'filename.bz2'
     ),
 ));
-$compressed = $filter->filter('C:\temp\compressme.txt');
+$compressed = $filter->filter('C:\temp\somedir');
 // Returns true on success and creates the archive file
 ]]></programlisting>
 

+ 36 - 0
documentation/manual/fr/module_specs/Zend_Application-AvailableResources-Router.xml

@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect2 id="zend.application.available-resources.router">
+    <title>Zend_Application_Resource_Router</title>
+
+    <para>
+        <classname>Zend_Application_Resource_Router</classname> est utilisé pour 
+        configurer le routeur enregistré grâce aux options du contrôleur
+        frontal. Les options sont identiques à celles de <link
+        linkend="zend.controller.router.routes.standard">
+            <classname>Zend_Controller_Router_Route</classname></link>.
+    </para>
+
+    <example id="zend.application.available-resources.router.configExample">
+        <title>Exemple de configuration du routeur</title>
+
+        <para>
+            Voici l'exemple d'un fichier <acronym>INI</acronym> qui configure
+            une ressource de type routeur.
+        </para>
+
+        <programlisting language="ini"><![CDATA[
+resources.router.routes.route_id.route = "/login"
+resources.router.routes.route_id.defaults.module = "user"
+resources.router.routes.route_id.defaults.controller = "login"
+resources.router.routes.route_id.defaults.action = "index"
+
+; Optionellement, un séparateur de chaines peut être précisé:
+resources.router.chainNameSeparator = "_"
+]]></programlisting>
+
+        <para>Pour plus d'informations sur le séparateur de chaines, voyez
+            <link linkend="zend.controller.router.routes.chain.config">sa section</link>.
+        </para>
+    </example>
+</sect2>

+ 622 - 0
documentation/manual/fr/module_specs/Zend_Filter-Compress.xml

@@ -0,0 +1,622 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect2 id="zend.filter.set.compress">
+    <title>Compression et décompression</title>
+    <para>
+        Ces deux filtres sont capables de compresser et décompresser des chaines, des fichiers ou des
+        dossiers. Ils utilisent des adaptateurs dans ce but et supportent les formats suivants:
+    </para>
+
+    <itemizedlist>
+        <listitem>
+            <para>
+                <emphasis>Bz2</emphasis>
+            </para>
+        </listitem>
+
+        <listitem>
+            <para>
+                <emphasis>Gz</emphasis>
+            </para>
+        </listitem>
+
+        <listitem>
+            <para>
+                <emphasis>Lzf</emphasis>
+            </para>
+        </listitem>
+
+        <listitem>
+            <para>
+                <emphasis>Rar</emphasis>
+            </para>
+        </listitem>
+
+        <listitem>
+            <para>
+                <emphasis>Tar</emphasis>
+            </para>
+        </listitem>
+
+        <listitem>
+            <para>
+                <emphasis>Zip</emphasis>
+            </para>
+        </listitem>
+    </itemizedlist>
+
+    <para>
+        Chaque format de compression possède des caractéristiques propres et ils s'utilisent
+        tous d'une manière commune. Seules leurs options vont différer ainsi que les types
+        de compressions qu'ils offrent (algorithmes, fichiers, chaines et dossiers)
+    </para>
+
+    <sect3 id="zend.filter.set.compress.generic">
+        <title>Les bases</title>
+
+        <para>
+            Pour créer un filtre de compression vous devez sélectionner le format que vous désirez.
+            La description suivante utilisera l'adaptateur <emphasis>Bz2</emphasis>. Les détails
+            des autres adaptateurs seront précisés plus tard dans la section suivante.
+        </para>
+
+        <para>
+            Les deux filtres (compression et décompression) sont identiques lorsqu'ils utilisent le
+            même adaptateur. Simplement <classname>Zend_Filter_Compress</classname> est utilisé
+            pour les opérations de compression alors que <classname>Zend_Filter_Decompress</classname>
+            est utilisé pour la décompression.
+        </para>
+
+        <para>
+            Par exemple, si nous voulons compresser une chaine nous devons instancier
+            <classname>Zend_Filter_Compress</classname> et indiquer un adaptateur.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$filter = new Zend_Filter_Compress('Bz2');
+]]></programlisting>
+
+        <para>
+            Les adaptateurs se spécifient donc dans le constructeur.
+        </para>
+
+        <para>
+            Il est aussi possible de passer des options sous forme de tableau ou d'objet
+            <classname>Zend_Config</classname>. Si vous souhaitez préciser des options, vous devez
+            alors au minimum indiquer la clé "adapter". Les clés "options" ou
+            "adapterOptions" peuvent ensuite être utilisées et doivent représenter un tableau.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$filter = new Zend_Filter_Compress(array(
+    'adapter' => 'Bz2',
+    'options' => array(
+        'blocksize' => 8,
+    ),
+));
+]]></programlisting>
+
+        <note>
+            <title>Adaptateur de compression par défaut</title>
+
+            <para>
+                Lorsque vous ne précisez aucun adaptateur, <emphasis>Gz</emphasis> sera utilisé
+                par défaut.
+            </para>
+        </note>
+
+        <para>
+            Concernant la décompression, le principe est exactement identique.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$filter = new Zend_Filter_Decompress('Bz2');
+]]></programlisting>
+
+        <para>
+            Pour récupérer une chaine compressée, il faut indiquer la chaine originale.
+            La valeur "filtrée" récupérée sera alors la chaine compressée, tout simplement.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$filter     = new Zend_Filter_Compress('Bz2');
+$compressed = $filter->filter('Uncompressed string');
+// Retourne la chaine compressée
+]]></programlisting>
+
+        <para>
+            La décompression suit exactement le même principe.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$filter     = new Zend_Filter_Decompress('Bz2');
+$compressed = $filter->filter('Compressed string');
+// Retourne la chaine décompressée
+]]></programlisting>
+
+        <note>
+            <title>Note sur la compression de chaines</title>
+
+            <para>
+                Tous les adaptateurs ne supportent pas la compression de chaines. Les formats tels que
+                <emphasis>Rar</emphasis> ne savent que traiter des fichiers ou des répertoires. Pour les détails,
+                consultez la documentation relative à l'adaptateur en question.
+            </para>
+        </note>
+    </sect3>
+
+    <sect3 id="zend.filter.set.compress.archive">
+        <title>Créer une archive</title>
+
+        <para>
+            Créer une archive fonctionne quasiment de la même manière que la compression d'une chaine.
+            Cependant dans ce cas, nous devons préciser une options supplémentaire indiquant le nom
+            de l'archive à créer.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$filter     = new Zend_Filter_Compress(array(
+    'adapter' => 'Bz2', 
+    'options' => array(
+        'archive' => 'filename.bz2',
+    ),
+));
+$compressed = $filter->filter('Uncompressed string');
+// Retourne true en cas de succès et crée le fichier d'archive
+]]></programlisting>
+
+        <para>
+            Dans l'exemple ci-dessus, la chaine est compressée puis retournée dans une archive.
+        </para>
+
+        <note>
+            <title>Les archives existantes seront écrasées</title>
+
+            <para>
+                Si l'archive existe déja, elle sera écrasée.
+            </para>
+        </note>
+
+        <para>
+            Si vous souhaitez compresser un fichier, vous devez fournir son chemin.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$filter     = new Zend_Filter_Compress(array(
+    'adapter' => 'Bz2', 
+    'options' => array(
+        'archive' => 'filename.bz2'
+    ),
+));
+$compressed = $filter->filter('C:\temp\compressme.txt');
+// Retourne true en cas de succès et crée le fichier d'archive
+]]></programlisting>
+
+        <para>
+            Il est aussi possible de préciser le nom d'un dossier plutôt que d'un fichier.
+            Dans ce cas, tout le dossier sera compressé, récursivement.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$filter     = new Zend_Filter_Compress(array(
+    'adapter' => 'Bz2', 
+    'options' => array(
+        'archive' => 'filename.bz2'
+    ),
+));
+$compressed = $filter->filter('C:\temp\somedir');
+// Retourne true en cas de succès et crée le fichier d'archive
+]]></programlisting>
+
+        <note>
+            <title>Ne compressez pas un dossier trop gros ou trop profond</title>
+
+            <para>
+                Vous ne devriez jamais tenter de compresser un dossier trop gros ou trop profond, comme
+                par exemple une partition complète. Une telle opération s'avère très longue et très
+                couteuse en ressources ce qui peut provoquer des problèmes sur votre serveur.
+            </para>
+        </note>
+    </sect3>
+
+    <sect3 id="zend.filter.set.compress.decompress">
+        <title>Décompresser une archive</title>
+
+        <para>
+            Décompresser une archive s'éxecute d'une manière sensiblement identique à la compression.
+            Vous devez passer le paramètre <property>archive</property> ou préciser le nom du fichier.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$filter     = new Zend_Filter_Decompress('Bz2');
+$compressed = $filter->filter('filename.bz2');
+// Retourne true en cas de succès et décompresse le fichier d'archive
+]]></programlisting>
+
+        <para>
+            Certains adaptateurs permettent la décompression d'une archive dans un dossier cible,
+            dans ce cas le paramètre <property>target</property> permet de l'indiquer.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$filter     = new Zend_Filter_Decompress(array(
+    'adapter' => 'Zip', 
+    'options' => array(
+        'target' => 'C:\temp',
+    )
+));
+$compressed = $filter->filter('filename.zip');
+// Retourne true en cas de succès et décompresse le fichier d'archive
+// dans le dossier spécifié
+]]></programlisting>
+
+        <note>
+            <title>Les dossiers de cible doivent exister</title>
+
+            <para>
+                Lorsque vous souhaitez décompresser une archive dans un dossier cible, vérifiez
+                bien que celui-ci existe déja.
+            </para>
+        </note>
+    </sect3>
+
+    <sect3 id="zend.filter.set.compress.bz2">
+        <title>Adaptateur Bz2</title>
+
+        <para>
+            L'adaptateur Bz2 peut compresser et décompresser:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>Chaines</para>
+            </listitem>
+
+            <listitem>
+                <para>Fichiers</para>
+            </listitem>
+
+            <listitem>
+                <para>Dossiers</para>
+            </listitem>
+        </itemizedlist>
+
+        <para>
+            Cet adaptateur utilise l'extension <acronym>PHP</acronym> Bz2.
+        </para>
+
+        <para>
+            Pour personnaliser la compression, cet adaptateur utilise les options suivantes:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>
+                    <emphasis>Archive</emphasis>: Précise l'archive à utiliser ou à créer.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>Blocksize</emphasis>: Précise la taille des blocs. Des valeurs de
+                    '0' à '9' sont permises. La valeur par défaut est '4'.
+                </para>
+            </listitem>
+        </itemizedlist>
+
+        <para>
+            Toutes les options peuvent être passées à l'instanciation ou en utilisant des méthodes.
+            Par exemple pour la tailles des blocs, <methodname>getBlocksize()</methodname> et
+            <methodname>setBlocksize()</methodname>. La méthode
+            <methodname>setOptions()</methodname> est aussi présente, elle accepte un tableau
+        </para>
+    </sect3>
+
+    <sect3 id="zend.filter.set.compress.gz">
+        <title>Adaptateur Gz</title>
+
+        <para>
+            L'adaptateur Bz2 peut compresser et décompresser:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>Chaines</para>
+            </listitem>
+
+            <listitem>
+                <para>Fichiers</para>
+            </listitem>
+
+            <listitem>
+                <para>Dossiers</para>
+            </listitem>
+        </itemizedlist>
+
+        <para>
+            Cet adaptateur utilise l'extension <acronym>PHP</acronym> Zlib.
+        </para>
+
+        <para>
+            Pour personnaliser la compression, cet adaptateur utilise les options suivantes:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>
+                    <emphasis>Archive</emphasis>: L'archive à créer ou à utiliser.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>Level</emphasis>: Niveau de compression. Des valeurs de '0'
+                    à '9' sont utilisables, par défaut : '9'.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>Mode</emphasis>: Il existe deux modes supportés : 'compress'
+                    et 'deflate'. La valeur par défaut est 'compress'.
+                </para>
+            </listitem>
+        </itemizedlist>
+
+        <para>
+            Toutes les options peuvent être passées en constructeur ou en utilisant des méthodes.
+            Par exemple, pour l'option 'Level', <methodname>getLevel()</methodname> et
+            <methodname>setLevel()</methodname>. La méthode
+            <methodname>setOptions()</methodname> est aussi présente et accepte un tableau.
+        </para>
+    </sect3>
+
+    <sect3 id="zend.filter.set.compress.lzf">
+        <title>Adaptateur Lzf</title>
+
+        <para>
+            L'adaptateur Lzf peut compresser et décompresser:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>Chaines</para>
+            </listitem>
+        </itemizedlist>
+
+        <note>
+            <title>Lzf ne supporte que les chaines de caractères</title>
+
+            <para>
+                Lzf ne supporte pas les fichiers et les dossiers.
+            </para>
+        </note>
+
+        <para>
+            Cet adaptateur utilise l'extension <acronym>PHP</acronym>Lzf.
+        </para>
+
+        <para>
+            Il n'existe pas d'options pour personnaliser cet adaptateur.
+        </para>
+    </sect3>
+
+    <sect3 id="zend.filter.set.compress.rar">
+        <title>Adaptateur Rar</title>
+
+        <para>
+            L'adaptateur Rar peut compresser et décompresser:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>Fichiers</para>
+            </listitem>
+
+            <listitem>
+                <para>Dossiers</para>
+            </listitem>
+        </itemizedlist>
+
+        <note>
+            <title>Rar ne supporte pas les chaines de caractères</title>
+
+            <para>
+                L'adaptateur Rar ne supporte pas les chaines de caractères
+            </para>
+        </note>
+
+        <para>
+            Cet adaptateur utilise l'extension <acronym>PHP</acronym> Rar.
+        </para>
+
+        <note>
+            <title>Compression Rar non supportée</title>
+
+            <para>
+                Des restrictions du format Rar ne permettent pas la compression gratuite. Si vous souhaitez
+                compresser avec cet adaptateur, vous devrez passer une fonction de callback qui utilisera
+                un algorithme ou fera appel à un programme externe.
+            </para>
+        </note>
+
+        <para>
+            Cet adaptateur accepte les options suivantes:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>
+                    <emphasis>Archive</emphasis>: Précise l'archive à créer ou à utiliser.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>Callback</emphasis>: Une fonction de callback fournissant des services
+                    de compression à l'adaptateur.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>Password</emphasis>: Le mot de passe à utiliser éventuellement en cas
+                    de décompression.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>Target</emphasis>: La cible vers laquelle les fichiers décompressés seront
+                    écrits.
+                </para>
+            </listitem>
+        </itemizedlist>
+
+        <para>
+            Toutes les options peuvent être passées au constructeurs ou via des méthodes.
+            Par exemple, pour l'option 'Target', <methodname>getTarget()</methodname> et
+            <methodname>setTarget()</methodname>.La méthode 
+            <methodname>setOptions()</methodname> est aussi disponible et accepte un tableau.
+        </para>
+    </sect3>
+
+    <sect3 id="zend.filter.set.compress.tar">
+        <title>Tar Adapter</title>
+
+        <para>
+            L'adaptateur Tar peut compresser et décompresser:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>Fichiers</para>
+            </listitem>
+
+            <listitem>
+                <para>Dossiers</para>
+            </listitem>
+        </itemizedlist>
+
+        <note>
+            <title>Tar ne supporte pas les chaines de caractères</title>
+
+            <para>
+                L'adaptateur Tar ne supporte pas les chaines de caractères
+            </para>
+        </note>
+
+        <para>
+            Cet adaptateur utilise le paquet <acronym>PEAR</acronym>
+            <classname>Archive_Tar</classname>.
+        </para>
+
+        <para>
+            Cet adaptateur accepte les options suivantes:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>
+                    <emphasis>Archive</emphasis>: Précise l'archive à utiliser ou à créer.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>Mode</emphasis>: Mode de compression. Les modes supportés sont
+                    'null' qui signifie pas de compression, 'Gz' qui utilisera l'extension
+                    <acronym>PHP</acronym> Zlib et 'Bz2' qui utilisera l'extension
+                    <acronym>PHP</acronym>Bz2. La valeur par défaut est 'null'.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>Target</emphasis>: La cible vers laquelle les fichier décompressés
+                    seront écrits.
+                </para>
+            </listitem>
+        </itemizedlist>
+
+        <para>
+            Toutes les options peuvent être passées au constructeurs ou via des méthodes.
+            Par exemple, pour l'option 'Target', <methodname>getTarget()</methodname> et
+            <methodname>setTarget()</methodname>.La méthode 
+            <methodname>setOptions()</methodname> est aussi disponible et accepte un tableau.
+        </para>
+
+        <note>
+            <title>Utilisation avec des dossiers</title>
+
+            <para>
+                La compression des dossiers avec Tar utilise le chemin complet comme nom de fichier.
+            </para>
+        </note>
+    </sect3>
+
+    <sect3 id="zend.filter.set.compress.zip">
+        <title>Adaptateur Zip</title>
+
+        <para>
+            L'adaptateur Zip peut compresser et décompresser:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>Chaines</para>
+            </listitem>
+
+            <listitem>
+                <para>Fichiers</para>
+            </listitem>
+
+            <listitem>
+                <para>Dossiers</para>
+            </listitem>
+        </itemizedlist>
+
+        <note>
+            <title>Zip ne supporte pas la décompression vers des chaines</title>
+
+            <para>
+                L'adaptateur Zip ne supporte pas la décompression vers des chaines.
+                Un fichier sera systématiquement crée.
+            </para>
+        </note>
+
+        <para>
+            Cet adaptateur utilise l'extension <acronym>PHP</acronym>
+            <classname>Zip</classname>.
+        </para>
+
+        <para>
+            Les options suivantes sont supportées :
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>
+                    <emphasis>Archive</emphasis>: Précise l'archive qui sera utilisée ou
+                    créee.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>Target</emphasis>: La cible vers laquelle décompresser.
+                </para>
+            </listitem>
+        </itemizedlist>
+
+        <para>
+            Toutes les options peuvent être passées au constructeurs ou via des méthodes.
+            Par exemple, pour l'option 'Target', <methodname>getTarget()</methodname> et
+            <methodname>setTarget()</methodname>.La méthode 
+            <methodname>setOptions()</methodname> est aussi disponible et accepte un tableau.
+        </para>
+    </sect3>
+</sect2>
+<!--
+vim:se ts=4 sw=4 et:
+-->

+ 132 - 0
documentation/manual/fr/module_specs/Zend_Filter-Null.xml

@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect2 id="zend.filter.set.null">
+    <title>Null</title>
+
+    <para>
+        Ce filtre retournera la valeur <constant>NULL</constant> si des critères précis sont rencontrés.
+        C'est souvent nécessaire lorsqu'on travaille avec des bases de données et que l'on souhaite une
+        valeur <constant>NULL</constant> plutôt qu'un booléen ou tout autre type.
+    </para>
+
+    <sect3 id="zend.filter.set.null.default">
+        <title>Comportement par défaut de Zend_Filter_Null</title>
+
+        <para>
+            Par défaut, ce filtre fonctionne comme la fonction <acronym>PHP</acronym>
+            <methodname>empty()</methodname>. Donc si
+            <methodname>empty()</methodname> retourne true sur la valeur, alors
+            <constant>NULL</constant> sera retourné par ce filtre
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$filter = new Zend_Filter_Null();
+$value  = '';
+$result = $filter->filter($value);
+// retourne null plutôt que la chaine vide
+]]></programlisting>
+
+        <para>
+            Ceci signifie qu'en l'absence d'une configuration spéciale,
+            <classname>Zend_Filter_Null</classname> accepte tout type en entrée et retourne
+            <constant>NULL</constant> dans les mêmes cas que <methodname>empty()</methodname>.
+        </para>
+
+        <para>
+            Toute autre valeur sera retournée telle quelle, sans aucune modification.
+        </para>
+    </sect3>
+
+    <sect3 id="zend.filter.set.null.types">
+        <title>Changer le comportement de Zend_Filter_Null</title>
+
+        <para>
+            Quelques fois ça ne suffit pas de filtrer en se basant sur <methodname>empty()</methodname>. Ainsi,
+            <classname>Zend_Filter_Null</classname> permet de déclarer quels types seront convertis.
+        </para>
+
+        <para>
+            Les types suivants sont gérés:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>
+                    <emphasis>booleen</emphasis>: Convertit le booléen
+                    <emphasis><constant>FALSE</constant></emphasis> en
+                    <constant>NULL</constant>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>entier</emphasis>: Convertit l'entier <emphasis>0</emphasis> en
+                    <constant>NULL</constant>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>tableau_vide</emphasis>: Convertit le <emphasis>tableau</emphasis> vide
+                    en <constant>NULL</constant>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>chaine</emphasis>: Convertit la chaine vide <emphasis>''</emphasis> en
+                    <constant>NULL</constant>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>zero</emphasis>: Convertit la chaine zéro
+                     (<emphasis>'0'</emphasis>) en <constant>NULL</constant>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>tout</emphasis>: Convertit tous les types cités en <constant>NULL</constant>.
+                    (comportement par défaut).
+                </para>
+            </listitem>
+        </itemizedlist>
+
+        <para>
+            Il existe plusieurs manières de spécifier les types à filtrer, des constantes, des types ajoutés
+            à la suite, des chaines de caractères, un tableau... Voyez les exemples suivants:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+// convertit false en null
+$filter = new Zend_Filter_Null(Zend_Filter_Null::BOOLEAN);
+
+// convertit false et 0 en null
+$filter = new Zend_Filter_Null(
+    Zend_Filter_Null::BOOLEAN + Zend_Filter_Null::INTEGER
+);
+
+// convertit false et 0 en null
+$filter = new Zend_Filter_Null( array(
+    Zend_Filter_Null::BOOLEAN,
+    Zend_Filter_Null::INTEGER
+));
+
+// convertit false et 0 en null
+$filter = new Zend_Filter_Null(array(
+    'boolean',
+    'integer',
+));
+]]></programlisting>
+
+        <para>
+            Un objet <classname>Zend_Config</classname> peut aussi être utilisé pour préciser les types.
+            La méthode <methodname>setType()</methodname> existe de même.
+        </para>
+    </sect3>
+</sect2>
+<!--
+vim:se ts=4 sw=4 et:
+-->

+ 311 - 0
documentation/manual/fr/module_specs/Zend_Test-PHPUnit-Db-Quickstart.xml

@@ -0,0 +1,311 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect2 id="zend.test.phpunit.db.quickstart">
+    <title>Quickstart</title>
+
+    <sect3 id="zend.test.phpunit.db.quickstart.testcase">
+        <title>Configurer un cas de tests Database</title>
+
+        <para>
+            Nous allons à présent écrire des tests pour la base de données Bug de la
+            documentation sur <classname>Zend_Db_Table</classname>. D'abord, nous testons
+            qu'insérer un nouveau bug est bien sauvegardé en base. Nous devons créer un cas
+            de tests sous forme de classe étendant
+            <classname>Zend_Test_PHPUnit_DatabaseTestCase</classname>. Cette classe étend elle-
+            même PHPUnit Database Extension, qui étend alors
+            <classname>PHPUnit_Framework_TestCase</classname>. Un cas de test pour base de données
+            contient deux méthodes abstraites à définir, une concernant la connexion à la base et
+            l'autre concernant les données à utiliser comme source pour les tests.
+        </para>
+
+        <note>
+            <para>
+                Il est recommandé de se familiariser à l'extension PHPUnit Database afin de suivre
+                nos exemples sereinnement. Bien que nous expliquions tous les concepts dans cette
+                documentation, il peut être intéressant de lire la documentation de PHPUnit avant
+                de suivre nos exemples.
+            </para>
+        </note>
+
+        <programlisting language="php"><![CDATA[
+class BugsTest extends Zend_Test_PHPUnit_DatabaseTestCase
+{
+    private $_connectionMock;
+
+    /**
+     * Retourne la connexion de test
+     *
+     * @return PHPUnit_Extensions_Database_DB_IDatabaseConnection
+     */
+    protected function getConnection()
+    {
+        if($this->_connectionMock == null) {
+            $connection = Zend_Db::factory(...);
+            $this->_connectionMock = $this->createZendDbConnection(
+                $connection, 'zfunittests'
+            );
+            Zend_Db_Table_Abstract::setDefaultAdapter($connection);
+        }
+        return $this->_connectionMock;
+    }
+
+    /**
+     * @return PHPUnit_Extensions_Database_DataSet_IDataSet
+     */
+    protected function getDataSet()
+    {
+        return $this->createFlatXmlDataSet(
+            dirname(__FILE__) . '/_files/bugsSeed.xml'
+        );
+    }
+}
+]]></programlisting>
+
+        <para>
+            Ici, nous créons la connexion à la base et nous y injectons des données fictives de test.
+            Les éléments suivants sont importants à noter :
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>
+                    Vous ne pouvez retourner directement un objet <classname>Zend_Db_Adapter_Abstract</classname>
+                    depuis <methodname>getConnection()</methodname>, mais un objet spécifique à PHPUnit
+                    qui est généré grâce à la méthode <methodname>createZendDbConnection()</methodname>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    Le schéma de la base (tables et bases de données) n'est pas recrée
+                    entre chaque test. Les bases de données et les tables doivent être créees
+                    à la main avant de lancer les tests.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    Les tests vident la base durant <methodname>setUp()</methodname> et y
+                    insèrent les données en provenance de <methodname>getDataSet()</methodname>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    Les jeux de données (DataSets) doivent implémenter
+                    <classname>PHPUnit_Extensions_Database_DataSet_IDataSet</classname>.
+                    Il en existe quelques uns, basés sur <acronym>XML</acronym> ou YAML et
+                    ils sont inclus dans PHPUnit et permettent de décrire les données fictives pour
+                    les tests. Vous devriez vous reporter à la documentation de PHPUnit pour
+                    des informations complémentaires ou plus à jour concernant les DataSets.
+                </para>
+            </listitem>
+        </itemizedlist>
+    </sect3>
+
+    <sect3 id="zend.test.phpunit.db.quickstart.dataset">
+        <title>Spécifier un jeu de données (DataSet)</title>
+
+        <para>
+            Dans l'exemple précédent, nous avons préciser un fichier de jeu de données. Nous allons
+            maintenant le créer, au format <acronym>XML</acronym> :
+        </para>
+
+        <programlisting language="xml"><![CDATA[
+<?xml version="1.0" encoding="UTF-8" ?>
+<dataset>
+    <zfbugs bug_id="1" bug_description="system needs electricity to run"
+        bug_status="NEW" created_on="2007-04-01 00:00:00"
+        updated_on="2007-04-01 00:00:00" reported_by="goofy"
+        assigned_to="mmouse" verified_by="dduck" />
+    <zfbugs bug_id="2" bug_description="Implement Do What I Mean function"
+        bug_status="VERIFIED" created_on="2007-04-02 00:00:00"
+        updated_on="2007-04-02 00:00:00" reported_by="goofy"
+        assigned_to="mmouse" verified_by="dduck" />
+    <zfbugs bug_id="3" bug_description="Where are my keys?" bug_status="FIXED"
+        created_on="2007-04-03 00:00:00" updated_on="2007-04-03 00:00:00"
+        reported_by="dduck" assigned_to="mmouse" verified_by="dduck" />
+    <zfbugs bug_id="4" bug_description="Bug no product" bug_status="INCOMPLETE"
+        created_on="2007-04-04 00:00:00" updated_on="2007-04-04 00:00:00"
+        reported_by="mmouse" assigned_to="goofy" verified_by="dduck" />
+</dataset>
+]]></programlisting>
+
+        <para>
+            Nous allons travailler sur ces quatre entrées dans la table "zfbugs" après.
+            Le script MySQL suivant est nécessaire pour l'exemple:
+        </para>
+
+        <programlisting language="sql"><![CDATA[
+CREATE TABLE IF NOT EXISTS `zfbugs` (
+    `bug_id` int(11) NOT NULL auto_increment,
+    `bug_description` varchar(100) default NULL,
+    `bug_status` varchar(20) default NULL,
+    `created_on` datetime default NULL,
+    `updated_on` datetime default NULL,
+    `reported_by` varchar(100) default NULL,
+    `assigned_to` varchar(100) default NULL,
+    `verified_by` varchar(100) default NULL,
+PRIMARY KEY  (`bug_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 ;
+]]></programlisting>
+    </sect3>
+
+    <sect3 id="zend.test.phpunit.db.quickstart.initial-tests">
+        <title>Quelques tests initiaux</title>
+
+        <para>
+            Maintenant que nous avons écrits les deux méthodes obligatoires pour
+            <classname>Zend_Test_PHPUnit_DatabaseTestCase</classname> et que nous avons
+            préciser avec quoi remplir la base et ses tables, nous pouvons commencer à écrire
+            des tests afin d'effectuer des assertions. Voyons un test pour l'insertion d'un
+            nouveau bug
+        </para>
+
+        <programlisting language="php"><![CDATA[
+class BugsTest extends Zend_Test_PHPUnit_DatabaseTestCase
+{
+    public function testBugInsertedIntoDatabase()
+    {
+        $bugsTable = new Bugs();
+
+        $data = array(
+            'created_on'      => '2007-03-22 00:00:00',
+            'updated_on'      => '2007-03-22 00:00:00',
+            'bug_description' => 'Something wrong',
+            'bug_status'      => 'NEW',
+            'reported_by'     => 'garfield',
+            'verified_by'     => 'garfield',
+            'assigned_to'     => 'mmouse',
+        );
+
+        $bugsTable->insert($data);
+
+        $ds = new Zend_Test_PHPUnit_Db_DataSet_QueryDataSet(
+            $this->getConnection()
+        );
+        $ds->addTable('zfbugs', 'SELECT * FROM zfbugs');
+
+        $this->assertDataSetsEqual(
+            $this->createFlatXmlDataSet(dirname(__FILE__)
+                                      . "/_files/bugsInsertIntoAssertion.xml"),
+            $ds
+        );
+    }
+}
+]]></programlisting>
+
+        <para>
+            Au dessus de la ligne <methodname>$bugsTable->insert($data);</methodname>, tout devrait vous
+            être familier. La ligne d'après contient le nom de la méthode d'assertion. Nous souhaitons vérifier
+            qu'après l'insertion d'un bug, la base a été correctement mise à jour avec les données. Ainsi,
+            nous utilisons un objet de requête de jeu de données, instance de 
+            <classname>Zend_Test_PHPUnit_Db_DataSet_QueryDataSet</classname> et nous lui fournissons notre
+            connexion à la base de données. Puis nous indiquons à notre objet de requête qu'il contient une table
+            "zfbugs" contenant les données d'une requête <acronym>SQL</acronym> statement. Cet état actuel
+            est alors comparé à un état contenu dans un fichier  <acronym>XML</acronym>
+            "bugsInsertIntoAssertions.xml". Ce fichier <acronym>XML</acronym> est le même que celui des données
+            d'origine, à l'exception qu'il contient lui les données supplémentaires attendues:
+        </para>
+
+        <programlisting language="xml"><![CDATA[
+<?xml version="1.0" encoding="UTF-8" ?>
+<dataset>
+    <!-- Les 4 enregistrement précédents, puis: -->
+    <zfbugs bug_id="5" bug_description="Something wrong" bug_status="NEW"
+        created_on="2007-03-22 00:00:00" updated_on="2007-03-22 00:00:00"
+        reported_by="garfield" assigned_to="mmouse" verified_by="garfield" />
+</dataset>
+]]></programlisting>
+
+        <para>
+            Il existe d'autres manière de vérifier que l'état actuel de la base est équivalent à
+            un état attendu. La table "Bugs" de l'exemple connait déja sont état interne, utilisons
+            ceci à notre avantage. L'exemple suivant teste que la suppression de données dans la table
+            est possible:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+class BugsTest extends Zend_Test_PHPUnit_DatabaseTestCase
+{
+    public function testBugDelete()
+    {
+        $bugsTable = new Bugs();
+
+        $bugsTable->delete(
+            $bugsTable->getAdapter()->quoteInto("bug_id = ?", 4)
+        );
+
+        $ds = new Zend_Test_PHPUnit_Db_DataSet_DbTableDataSet();
+        $ds->addTable($bugsTable);
+
+        $this->assertDataSetsEqual(
+            $this->createFlatXmlDataSet(dirname(__FILE__)
+                                      . "/_files/bugsDeleteAssertion.xml"),
+            $ds
+        );
+    }
+}
+]]></programlisting>
+
+        <para>
+            Ici nous créons un objet représentant un jeu de données pour une table, instance de
+            <classname>Zend_Test_PHPUnit_Db_DataSet_DbTableDataSet</classname>. Il prend en paramètre
+            un objet <classname>Zend_Db_Table_Abstract</classname> et l'ajoute au jeu de données
+            avec le nom de la table, dans notre exemple : "zfbugs". Vous pourriez ajouter plus de données
+            dans le jeu de données en utilisant <methodname>addTable()</methodname> plusieurs fois.
+        </para>
+
+        <para>
+            Ici nous ne possédons qu'une seule table et nous la comparons à un état défini dans
+            "bugsDeleteAssertion.xml" qui est en fait le jeu de données original moins la données
+            supprimée : celle ayant l'id 4.
+        </para>
+
+        <para>
+            Voyons maintenant comment vérifier que deux tables soient identiques (et non deux jeux
+            de données correspondants à de telles tables). Ajoutons un test à notre scénario qui va
+            vérifier la mise à jour de données.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+class BugsTest extends Zend_Test_PHPUnit_DatabaseTestCase
+{
+    public function testBugUpdate()
+    {
+        $bugsTable = new Bugs();
+
+        $data = array(
+            'updated_on'      => '2007-05-23',
+            'bug_status'      => 'FIXED'
+        );
+
+        $where = $bugsTable->getAdapter()->quoteInto('bug_id = ?', 1);
+
+        $bugsTable->update($data, $where);
+
+        $rowset = $bugsTable->fetchAll();
+
+        $ds        = new Zend_Test_PHPUnit_Db_DataSet_DbRowset($rowset);
+        $assertion = $this->createFlatXmlDataSet(
+            dirname(__FILE__) . '/_files/bugsUpdateAssertion.xml'
+        );
+        $expectedRowsets = $assertion->getTable('zfbugs');
+
+        $this->assertTablesEqual(
+            $expectedRowsets, $ds
+        );
+    }
+}
+]]></programlisting>
+
+        <para>
+            Ici, nous récupérons l'état de la table depuis un objet
+            <classname>Zend_Db_Table_Rowset_Abstract</classname> au moyen de
+            <methodname>Zend_Test_PHPUnit_Db_DataSet_DbRowset($rowset)</methodname> qui crée
+            une représentation de l'état interne des données du rowset. Nous comparons
+            enfin cet état grâce à l'assertion
+            <methodname>$this->assertTablesEqual()</methodname>
+        </para>
+    </sect3>
+</sect2>