Просмотр исходного кода

Added some french doc

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@20361 44c647ce-9c0f-0410-b52a-842ac1e357ba
doctorrock83 16 лет назад
Родитель
Сommit
a61a2ec57f

+ 37 - 0
documentation/manual/fr/module_specs/Zend_Exception-Basic.xml

@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect1 id="zend.exception.basic">
+    <title>Utilisation classique</title>
+
+    <para>
+        <classname>Zend_Exception</classname> est le classe de base concernant toutes les exceptions envoyées
+        par Zend Framework. Cette classe étend la classe PHP <classname>Exception</classname>.
+    </para>
+
+    <example id="zend.exception.catchall.example">
+        <title>Attraper toutes les exceptions du Zend Framework</title>
+
+        <programlisting language="php"><![CDATA[
+try {
+    // votre code
+} catch (Zend_Exception $e) {
+    // faire quelque chose
+}
+]]></programlisting>
+    </example>
+
+    <example id="zend.exception.catchcomponent.example">
+        <title>Attraper les exceptions envoyées par un composant spécifique de Zend Framework</title>
+
+        <programlisting language="php"><![CDATA[
+try {
+    // Votre code
+} catch (Zend_Db_Exception $e) {
+    // faire quelque chose
+}
+]]></programlisting>
+    </example>
+</sect1>
+<!--
+vim:se ts=4 sw=4 et:
+-->

+ 44 - 0
documentation/manual/fr/module_specs/Zend_Exception-Previous.xml

@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect1 id="zend.exception.previous">
+    <title>Exceptions précédentes</title>
+
+    <para>
+        Depuis Zend Framework 1.10, <classname>Zend_Exception</classname> utilise les exceptions PHP 5.3
+        concernant l'exception précédente. Simplement, dans un bloc <methodname>catch</methodname>, il est
+        possible d'envoyer une exception faisant référence à la précédente, ce qui améliore le contexte de
+        débogage. Ce support dans Zend Framework apporte le support complet de PHP 5.3 concernant les exceptions.
+    </para>
+
+    <para>
+        L'exception précedente s'utilise comme troisième paramètre du constructeur de la classe Exception.
+    </para>
+
+    <example id="zend.exception.previous.example">
+        <title>Exceptions précedentes</title>
+
+        <programlisting language="php"><![CDATA[
+try {
+    $db->query($sql);
+} catch (Zend_Db_Statement_Exception $e) {
+    if ($e->getPrevious()) {
+        echo '[' . get_class($e)
+            . '] a comme exception précédente ['
+            . get_class($e->getPrevious())
+            . ']' . PHP_EOL;
+    } else {
+        echo '[' . get_class($e)
+            . '] n'a pas d'exception qui la précède'
+            . PHP_EOL;
+    }
+
+    echo $e;
+    // affiche toutes les exception à commencer par la première, puis
+    // dépile.
+}
+]]></programlisting>
+    </example>
+</sect1>
+<!--
+vim:se ts=4 sw=4 et:
+-->

+ 328 - 0
documentation/manual/fr/module_specs/Zend_Filter-Boolean.xml

@@ -0,0 +1,328 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect2 id="zend.filter.set.boolean">
+    <title>Boolean</title>
+
+    <para>
+        Ce filtre transforme toute donnée en valeur <constant>BOOLEENNE</constant>. Ce peut être utile
+        en travaillant avec des bases de données ou des formulaires.
+    </para>
+
+    <sect3 id="zend.filter.set.boolean.default">
+        <title>Comportement par défaut de Zend_Filter_Boolean</title>
+
+        <para>
+            Par défaut, ce filtre caste (transtype) sa valeur vers un <constant>BOOLEEN</constant>
+            ; en d'autres termes, il fonctionne comme un appel PHP <command>(boolean)
+            $value</command>.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$filter = new Zend_Filter_Boolean();
+$value  = '';
+$result = $filter->filter($value);
+// retourne false
+]]></programlisting>
+
+        <para>
+            Ceci signifie que sans paramètre additionnel,
+            <classname>Zend_Filter_Boolean</classname> prend toute valeur d'entrée et retourne un
+            <constant>BOOLEEN</constant> comme le cast PHP vers le
+            <constant>BOOLEEN</constant>.
+        </para>
+    </sect3>
+
+    <sect3 id="zend.filter.set.boolean.types">
+        <title>Changer le comportement de Zend_Filter_Boolean</title>
+
+        <para>
+            Quelques fois, le cast vers tel que <command>(boolean)</command> peut ne pas suffire.
+            <classname>Zend_Filter_Boolean</classname> permet ainsi de configurer les types d'entrée
+            à convertir, et ceux à ignorer.
+        </para>
+
+        <para>
+            Les types suivants sont acceptés:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>
+                    <emphasis>booléen</emphasis>: Retourne la valeur booléenne telle quelle.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>entier</emphasis>: Convertit l'entier <emphasis>0</emphasis> vers
+                    <constant>FALSE</constant>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>flottant</emphasis>: Convertit le flottant <emphasis>0.0</emphasis> vers
+                    <constant>FALSE</constant>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>chaine</emphasis>: Convertit la chaine vide <emphasis>''</emphasis> vers
+                    <constant>FALSE</constant>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>zero</emphasis>: Convertit la chaine contenant zéro
+                    (<emphasis>'0'</emphasis>) vers <constant>FALSE</constant>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>empty_array</emphasis>: Convertit la tableau vide <emphasis>array()</emphasis>
+                    vers <constant>FALSE</constant>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>null</emphasis>: Convertit une valeur <constant>NULL</constant> vers
+                    <constant>FALSE</constant>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>php</emphasis>: Convertit une valeur comme <acronym>PHP</acronym>
+                    le ferait vers le <constant>BOOLEEN</constant>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>false_string</emphasis>: Convertit une chaine contenant le mot "false"
+                    vers le booléen <constant>FALSE</constant>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>yes</emphasis>: Convertit une chaine localisée contenant le mot
+                    "no" vers <constant>FALSE</constant>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>all</emphasis>: Convertit tous les types ci-dessus vers un
+                    <constant>BOOLEEN</constant>.
+                </para>
+            </listitem>
+        </itemizedlist>
+
+        <para>
+            Toute autre valeur fournie retournera <constant>TRUE</constant>.
+        </para>
+
+        <para>
+            Pour préciser les optiosn ci-dessus, plusieurs manières sont données : utilisez des chaines, 
+            des constantes, ajoutez les, utilisez des tableaux... Voyez l'exemple:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+// convertit 0 vers false
+$filter = new Zend_Filter_Boolean(Zend_Filter_Boolean::INTEGER);
+
+// convertit 0 et '0' vers false
+$filter = new Zend_Filter_Boolean(
+    Zend_Filter_Boolean::INTEGER + Zend_Filter_Boolean::ZERO
+);
+
+// convertit 0 et '0' vers false
+$filter = new Zend_Filter_Boolean(array(
+    'type' => array(
+        Zend_Filter_Boolean::INTEGER,
+        Zend_Filter_Boolean::ZERO,
+    ),
+));
+
+// convertit 0 et '0' vers false
+$filter = new Zend_Filter_Boolean(array(
+    'type' => array(
+        'integer',
+        'zero',
+    ),
+));
+]]></programlisting>
+
+        <para>
+            Vous pouvez aussi passer une instance de <classname>Zend_Config</classname> pour préciser
+            les options. Pour préciser ces options après la création de votre objet, utilisez la méthode
+            <methodname>setType()</methodname>.
+        </para>
+    </sect3>
+
+    <sect3 id="zend.filter.set.boolean.localized">
+        <title>Booléens localisés</title>
+
+        <para>
+            Comme déja précisé, <classname>Zend_Filter_Boolean</classname> reconnait les chaines localisées
+            "yes" et "no". Ceci signifie que vous pouvez demander au client au travers d'un formulaire
+            "oui" ou "non" dans sa propre langue et <classname>Zend_Filter_Boolean</classname> convertira la
+            valeur vers le booléen approprié.
+        </para>
+
+        <para>
+            Préciser la locale s'effectue grâce à la clé de configuration <property>locale</property>
+            ou la méthode <methodname>setLocale()</methodname>.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$filter = new Zend_Filter_Boolean(array(
+    'type'   => Zend_Filter_Boolean::ALL,
+    'locale' => 'de',
+));
+
+// retourne false
+echo $filter->filter('nein');
+
+$filter->setLocale('en');
+
+// retourne true
+$filter->filter('yes');
+]]></programlisting>
+    </sect3>
+
+    <sect3 id="zend.filter.set.boolean.casting">
+        <title>Désactiver le cast (transtypage)</title>
+
+        <para>
+            Il peut arriver de ne vouloir que reconnaitre <constant>TRUE</constant> ou
+            <constant>FALSE</constant> et donc retourner les autres valeurs telles quelles.
+            <classname>Zend_Filter_Boolean</classname> permet un tel comportement via son
+            option <property>casting</property> lorsque réglée sur <constant>FALSE</constant>.
+        </para>
+
+        <para>
+            Dans un tel cas, <classname>Zend_Filter_Boolean</classname> fonctionnera comme décrit dans
+            le tableau ci-dessous qui montre quelles valeurs retournent <constant>TRUE</constant> ou
+            <constant>FALSE</constant>. Toute autre valeur non présente dans ce tableau sera retournée
+            telle quelle lorsque l'option <property>casting</property> est à <constant>FALSE</constant>
+        </para>
+
+        <table id="zend.filter.set.boolean.casting.table">
+            <title>Utilisation sans transtypage</title>
+            <tgroup cols="3">
+                <thead>
+                    <row>
+                        <entry>Type</entry>
+
+                        <entry>True</entry>
+
+                        <entry>False</entry>
+                    </row>
+                </thead>
+
+                <tbody>
+                    <row>
+                        <entry>Zend_Filter_Boolean::BOOLEAN</entry>
+
+                        <entry><constant>TRUE</constant></entry>
+
+                        <entry><constant>FALSE</constant></entry>
+                    </row>
+
+                    <row>
+                        <entry>Zend_Filter_Boolean::INTEGER</entry>
+
+                        <entry>0</entry>
+
+                        <entry>1</entry>
+                    </row>
+
+                    <row>
+                        <entry>Zend_Filter_Boolean::FLOAT</entry>
+
+                        <entry>0.0</entry>
+
+                        <entry>1.0</entry>
+                    </row>
+
+                    <row>
+                        <entry>Zend_Filter_Boolean::STRING</entry>
+
+                        <entry>""</entry>
+
+                        <entry />
+                    </row>
+
+                    <row>
+                        <entry>Zend_Filter_Boolean::ZERO</entry>
+
+                        <entry>"0"</entry>
+
+                        <entry>"1"</entry>
+                    </row>
+
+                    <row>
+                        <entry>Zend_Filter_Boolean::EMPTY_ARRAY</entry>
+
+                        <entry>array()</entry>
+
+                        <entry />
+                    </row>
+
+                    <row>
+                        <entry>Zend_Filter_Boolean::NULL</entry>
+
+                        <entry><constant>NULL</constant></entry>
+
+                        <entry />
+                    </row>
+
+                    <row>
+                        <entry>Zend_Filter_Boolean::FALSE_STRING</entry>
+
+                        <entry>"false" (non sensible à la casse)</entry>
+
+                        <entry>"true" (non sensible à la casse)</entry>
+                    </row>
+
+                    <row>
+                        <entry>Zend_Filter_Boolean::YES</entry>
+
+                        <entry>"oui" localisé (non sensible à la casse)</entry>
+
+                        <entry>"non" localisé (non sensible à la casse)</entry>
+                    </row>
+                </tbody>
+            </tgroup>
+        </table>
+
+        <para>
+            L'exemple qui suit illustre l'utilisation de l'option <property>casting</property>:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$filter = new Zend_Filter_Boolean(array(
+    'type'    => Zend_Filter_Boolean::ALL,
+    'casting' => false,
+));
+
+// retourne false
+echo $filter->filter(0);
+
+// retourne true
+echo $filter->filter(1);
+
+// retourne la valeur
+echo $filter->filter(2);
+]]></programlisting>
+    </sect3>
+</sect2>
+<!--
+vim:se ts=4 sw=4 et:
+-->

+ 414 - 0
documentation/manual/fr/module_specs/Zend_Log-Factory.xml

@@ -0,0 +1,414 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect1 id="zend.log.factory">
+    <title>Utiliser la fabrique pour créer des logs</title>
+
+    <para>
+        En plus de pouvoir instancier les objets directement, il est possible d'utiliser une fabrique,
+        la méthode <methodname>factory()</methodname> d'une instance Log, et il est possible de configurer
+        les objets d'écriture (writers) et leurs filtres. En utilisant la fabrique, vous pouvez attacher
+        plusieurs objets d'écriture dont la configuration peut être passée sous forme de tableau ou d'objet
+        <classname>Zend_Config</classname>.
+    </para>
+
+    <para>
+        Un exemple:
+    </para>
+
+    <programlisting language="php"><![CDATA[
+$logger = Zend_Log::factory(array(
+    array(
+        'writerName'   => 'Stream',
+        'writerParams' => array(
+            'stream'   => '/tmp/zend.log',
+        ),
+        'filterName'   => 'Priority',
+        'filterParams' => array(
+            'priority' => Zend_Log::WARN,
+        ),
+    ),
+    array(
+        'writerName'   => 'Firebug',
+        'filterName'   => 'Priority',
+        'filterParams' => array(
+            'priority' => Zend_Log::INFO,
+        ),
+    ),
+));
+]]></programlisting>
+
+    <para>
+        Le code ci-dessus instancie un objet journal et 2 objets d'écriture dont un vers un
+        fichier local, puis un vers Firebug. Chacun possède un filtre.
+    </para>
+
+    <para>
+        Chaque objet d'écriture support les options suivantes:
+    </para>
+
+    <variablelist>
+        <varlistentry>
+            <term>writerName (requis)</term>
+
+            <listitem>
+                <para>
+                    Le nom "court" de l'objet d'écriture; le nom sans le préfixe. Voyez
+                    "writerNamespace" pour plus de détails, des exemples sont : "Mock", 
+                    "Stream", "Firebug".
+                </para>
+            </listitem>
+        </varlistentry>
+
+        <varlistentry>
+            <term>writerParams (optionnel)</term>
+
+            <listitem>
+                <para>
+                    Tableau associatif de paramètre à utiliser à l'instanciation de l'objet d'écriture.
+                    Chaque méthode <methodname>factory()</methodname> fera suivre ces paramètres.
+                </para>
+            </listitem>
+        </varlistentry>
+
+        <varlistentry>
+            <term>writerNamespace (optionnel)</term>
+
+            <listitem>
+                <para>
+                    Le préfixe de classe ou espace de nom(namespace) à utiliser pour créer le nom de classe
+                    complet de l'objet d'écriture. Par défault : "Zend_Log_Writer".
+                </para>
+            </listitem>
+        </varlistentry>
+
+        <varlistentry>
+            <term>filterName (optionnel)</term>
+
+            <listitem>
+                <para>
+                    Le nom "court" d'un filtre à utiliser sur l'objet d'écriture. Voyez "filterNamespace"
+                    pour plus de détails. Exemples: "Message", "Priority".
+                </para>
+            </listitem>
+        </varlistentry>
+
+        <varlistentry>
+            <term>filterParams (optionnel)</term>
+
+            <listitem>
+                <para>
+                    Tableau associatif de paramètre à utiliser à l'instanciation de l'objet filtre.
+                    Chaque méthode <methodname>factory()</methodname> fera suivre ces paramètres.
+                </para>
+            </listitem>
+        </varlistentry>
+
+        <varlistentry>
+            <term>filterNamespace (optionnel)</term>
+
+            <listitem>
+                <para>
+                    Le préfixe de classe ou espace de nom(namespace) à utiliser pour créer le nom de classe
+                    complet de l'objet filtre. Par défault : "Zend_Log_Filter".
+                </para>
+            </listitem>
+        </varlistentry>
+    </variablelist>
+
+    <para>
+        Chaque objet d'écriture et chaque filtre possède des options.
+    </para>
+
+    <sect2 id="zend.log.factory.writer-options">
+        <title>Options pour les objets d'écriture</title>
+
+        <sect3 id="zend.log.factory.writer-options.db">
+            <title>Zend_Log_Writer_Db Options</title>
+
+            <variablelist>
+                <varlistentry>
+                    <term>db</term>
+
+                    <listitem>
+                        <para>
+                            Une instance de <classname>Zend_Db_Adapter</classname>
+                        </para>
+                    </listitem>
+                </varlistentry>
+
+                <varlistentry>
+                    <term>table</term>
+
+                    <listitem>
+                        <para>
+                            Nom de la table à utiliser.
+                        </para>
+                    </listitem>
+                </varlistentry>
+
+                <varlistentry>
+                    <term>columnMap</term>
+
+                    <listitem>
+                        <para>
+                            Tableau associatif de correspondance entre les noms des colonnes de la table
+                            et les champs des évènements du journal.
+                        </para>
+                    </listitem>
+                </varlistentry>
+            </variablelist>
+        </sect3>
+
+        <sect3 id="zend.log.factory.writer-options.firebug">
+            <title>Zend_Log_Writer_Firebug Options</title>
+
+            <para>
+                Aucune option n'est acceptée par cet objet d'écriture.
+            </para>
+        </sect3>
+
+        <sect3 id="zend.log.factory.writer-options.mail">
+            <title>Zend_Log_Writer_Mail Options</title>
+
+            <para>
+                <classname>Zend_Log_Writer_Mail</classname> actuellement (en 1.10) n'implémente pas la
+                fabrique, et renverra une exception si vous tentez de l'utiliser via
+                <methodname>Zend_Log::factory()</methodname>.
+            </para>
+        </sect3>
+
+        <sect3 id="zend.log.factory.writer-options.mock">
+            <title>Zend_Log_Writer_Mock Options</title>
+
+            <para>
+                Aucune option n'est acceptée par cet objet d'écriture.
+            </para>
+        </sect3>
+
+        <sect3 id="zend.log.factory.writer-options.null">
+            <title>Zend_Log_Writer_Null Options</title>
+
+            <para>
+                Aucune option n'est acceptée par cet objet d'écriture.
+            </para>
+        </sect3>
+
+        <sect3 id="zend.log.factory.writer-options.stream">
+            <title>Zend_Log_Writer_Stream Options</title>
+
+            <variablelist>
+                <varlistentry>
+                    <term>stream|url</term>
+
+                    <listitem>
+                        <para>
+                            Un identifiant de flux PHP valide vers lequel journaliser.
+                        </para>
+                    </listitem>
+                </varlistentry>
+
+                <varlistentry>
+                    <term>mode</term>
+
+                    <listitem>
+                        <para>
+                            Le mode I/O (Lecture/Ecriture) à utiliser; défaut : "a" pour "append".
+                        </para>
+                    </listitem>
+                </varlistentry>
+            </variablelist>
+        </sect3>
+
+        <sect3 id="zend.log.factory.writer-options.syslog">
+            <title>Zend_Log_Writer_Syslog Options</title>
+
+            <variablelist>
+                <varlistentry>
+                    <term>application</term>
+
+                    <listitem>
+                        <para>
+                            Nom de l'application utilisé par le journaliseur syslog.
+                        </para>
+                    </listitem>
+                </varlistentry>
+
+                <varlistentry>
+                    <term>facility</term>
+
+                    <listitem>
+                        <para>
+                            Facility utilisée par le journal syslog.
+                        </para>
+                    </listitem>
+                </varlistentry>
+            </variablelist>
+        </sect3>
+
+        <sect3 id="zend.log.factory.writer-options.zendmonitor">
+            <title>Zend_Log_Writer_ZendMonitor Options</title>
+
+            <para>
+               Aucune option n'est acceptée par cet objet d'écriture.
+            </para>
+        </sect3>
+    </sect2>
+
+    <sect2 id="zend.log.factory.filter-options">
+        <title>Options des filtres</title>
+
+        <sect3 id="zend.log.factory.filter-options.message">
+            <title>Zend_Log_Filter_Message Options</title>
+
+            <variablelist>
+                <varlistentry>
+                    <term>regexp</term>
+
+                    <listitem>
+                        <para>
+                            Expression régulière à faire correspondre par rapport au message du journal.
+                        </para>
+                    </listitem>
+                </varlistentry>
+            </variablelist>
+        </sect3>
+
+        <sect3 id="zend.log.factory.filter-options.priority">
+            <title>Zend_Log_Filter_Priority Options</title>
+
+            <variablelist>
+                <varlistentry>
+                    <term>priority</term>
+
+                    <listitem>
+                        <para>
+                            La priorité maximale à journaliser.
+                        </para>
+                    </listitem>
+                </varlistentry>
+
+                <varlistentry>
+                    <term>operator</term>
+
+                    <listitem>
+                        <para>
+                            L'opérateur de comparaison (supérieur ou inférieur) à utiliser pour la comparaison,
+                            "&lt;=" est utilisé par défaut.
+                        </para>
+                    </listitem>
+                </varlistentry>
+            </variablelist>
+        </sect3>
+
+        <sect3 id="zend.log.factory.filter-options.suppress">
+            <title>Zend_Log_Writer_Suppress Options</title>
+
+            <para>
+                Aucune option n'est acceptée par cet objet d'écriture.
+            </para>
+        </sect3>
+    </sect2>
+
+    <sect2 id="zend.log.factory.custom">
+        <title>Créer des objets d'écriture et des filtres configurés</title>
+
+        <para>
+            SI vous souhaitez créer vos propres objets d'écriture du journal, ou vos propres filtres, il est
+            possible de les rendre compatibles avec <methodname>Zend_Log::factory()</methodname> facilement.
+        </para>
+
+        <para>
+            Vous devez au minimum implémenter
+            <interfacename>Zend_Log_FactoryInterface</interfacename>, qui attend une méthode statique
+            <methodname>factory()</methodname> accéptant un seul argument,
+            <varname>$config</varname>, de types tableau ou instance de
+            <classname>Zend_Config</classname>. Si vos objets étendent
+            <classname>Zend_Log_Writer_Abstract</classname>, ou vos filtres étendent
+            <classname>Zend_Log_Filter_Abstract</classname>, alors ce sera tout.
+        </para>
+
+        <para>
+            Après, définissez la correspondance entre les options de configuration et les arguments du
+            constructeur. Par exemple :
+        </para>
+
+        <programlisting language="php"><![CDATA[
+class My_Log_Writer_Foo extends Zend_Log_Writer_Abstract
+{
+    public function __construct($bar, $baz)
+    {
+        // ...
+    }
+
+    public static function factory($config)
+    {
+        if ($config instanceof Zend_Config) {
+            $config = $config->toArray();
+        }
+        if (!is_array($config)) {
+            throw new Exception(
+                'factory attend un tableau ou un Zend_Config'
+            );
+        }
+
+        $default = array(
+            'bar' => null,
+            'baz' => null,
+        );
+        $config = array_merge($default, $config);
+
+        return new self(
+            $config['bar'],
+            $config['baz']
+        );
+    }
+}
+]]></programlisting>
+
+        <para>
+            Aussi, il est possible d'appeler les setters après l'instanciation, mais avant de retourner
+            l'instance:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+class My_Log_Writer_Foo extends Zend_Log_Writer_Abstract
+{
+    public function __construct($bar = null, $baz = null)
+    {
+        // ...
+    }
+
+    public function setBar($value)
+    {
+        // ...
+    }
+
+    public function setBaz($value)
+    {
+        // ...
+    }
+
+    public static function factory($config)
+    {
+        if ($config instanceof Zend_Config) {
+            $config = $config->toArray();
+        }
+        if (!is_array($config)) {
+            throw new Exception(
+                'factory attend un tableau ou un Zend_Config'
+            );
+        }
+
+        $writer = new self();
+        if (isset($config['bar'])) {
+            $writer->setBar($config['bar']);
+        }
+        if (isset($config['baz'])) {
+            $writer->setBaz($config['baz']);
+        }
+        return $writer;
+    }
+}
+]]></programlisting>
+    </sect2>
+</sect1>

+ 119 - 0
documentation/manual/fr/module_specs/Zend_Log-Writers-ZendMonitor.xml

@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect2 id="zend.log.writers.zendmonitor">
+    <title>Ecrire vers le moniteur Zend Server</title>
+
+    <para>
+        <classname>Zend_Log_Writer_ZendMonitor</classname> vous permet de journaliser des évènements
+        via l'API de Zend Server. Vous pouvez alors aggréger des messages de journal pour l'application
+        et tout son environnement, ceci vers un seul endroit. En interne, cet objet utilise simplement la
+        fonction <methodname>monitor_custom_event()</methodname> issue de Zend Monitor.
+    </para>
+
+    <para>
+        Une caractéristique particulière de l'API Monitor est que vous pouvez spécifier n'importe quelle
+        information dans le journal. Par exemple, journaliser une exception est possible en journalisant
+        tout l'objet Exception d'un coup et pas juste son message. L'objet sera alors visible et analysable
+        via le moniteur d'évènement de Zend Server.
+    </para>
+
+    <note>
+        <title>Zend Monitor doit être installé et activé</title>
+
+        <para>
+            Pour utiliser cet objet d'écriture, Zend Monitor doit petre installé et activé.
+            Si ce n'est pas le cas, alors l'objet d'écriture agira de manière transparente et ne fera
+            rien du tout.
+        </para>
+    </note>
+
+    <para>
+        Instancier l'objet d'écriture <classname>ZendMonitor</classname> est très simple:
+    </para>
+
+    <programlisting language="php"><![CDATA[
+$writer = new Zend_Log_Writer_ZendMonitor();
+$log    = new Zend_Log($writer);
+]]></programlisting>
+
+    <para>
+        Ensuite, journalisez vos évènements comme d'habitude:
+    </para>
+
+    <programlisting language="php"><![CDATA[
+$log->info('Voici un message');
+]]></programlisting>
+
+    <para>
+        Vous pouvez ajouter des informations à journaliser, passez les comme second paramètre:
+    </para>
+
+    <programlisting language="php"><![CDATA[
+$log->info('Exception rencontrée', $e);
+]]></programlisting>
+
+    <para>
+        Ce deuxième paramètre peut être de type scalaire, objet, ou tableau; si vous souhaitez
+        passer plusieurs informations d'un seul coup, utilisez un tableau.
+    </para>
+
+    <programlisting language="php"><![CDATA[
+$log->info('Exception rencontrée', array(
+    'request'   => $request,
+    'exception' => $e,
+));
+]]></programlisting>
+
+    <para>
+        Au sein de Zend Server, votre évènement est enregistré comme un "évènement personnalisé" (custom event).
+        Depuis l'onglet "Monitor", sélectionnez le sous menu "Evènements"(Events), et utilisez ensuite le filtre
+        "Personnalisé"(Custom).
+    </para>
+
+    <para>
+        <inlinegraphic fileref="figures/zend.log.writers.zendmonitor-events.png" format="PNG" />
+    </para>
+
+    <para>
+        Evènements dans le récapitulatif Zend Server Monitor
+    </para>
+
+    <para>
+        Sur cette image, les deux premiers évènements listés sont des évènements personnalisés enregistré via
+        l'objet d'écriture <classname>ZendMonitor</classname>. Cliquez alors sur un évènement pour voir toutes ses
+        informations.
+    </para>
+
+    <para>
+        <inlinegraphic fileref="figures/zend.log.writers.zendmonitor-event.png" format="PNG" />
+    </para>
+
+    <para>
+        Détails de l'évènement dans Zend Server Monitor
+    </para>
+
+    <para>
+        Cliquer sur le sous menu "Personnalisé"(Custom) montre les détails, c'est à dire ce que vous avez passé
+        comme deuxième argument à la méthode de journalisation. Cet information est enregistrée sous la clé
+        <varname>info</varname>; et vous pouvez voir que l'objet de requête a été enregistré dans cet exemple.
+    </para>
+
+    <note>
+        <title>Intégration avec Zend_Application</title>
+
+        <para>
+            Par défaut, les commandes <command>zf.sh</command> et <command>zf.bat</command> ajoute une
+            configuration pour la ressource 'log' de<link
+                linkend="zend.application.available-resources.log"><classname>Zend_Application</classname>
+                </link>, elle inclut la configuration pour l'objet d'écriture du journal
+            <classname>ZendMonitor</classname>. Aussi, le
+            <classname>ErrorController</classname> utilise ce journal pour journaliser les exceptions de
+            l'application.
+        </para>
+
+        <para>
+            Comme dit précedemment, si l'API de Zend Monitor API n'est pas détectée sur votre installation de PHP,
+            alors le journal ne fera rien du tout.
+        </para>
+    </note>
+</sect2>

+ 83 - 0
documentation/manual/fr/module_specs/Zend_Markup-Getting-Started.xml

@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect1 id="zend.markup.getting-started">
+    <title>Guide de démarrage avec Zend_Markup</title>
+
+    <para>
+        Ce guide pour vous aider à démarrer avec <classname>Zend_Markup</classname> utilisera le parseur BBCode
+        et le moteur de rendu <acronym>HTML</acronym>. Les principes utilisés s'adaptent à d'autres formats.
+    </para>
+
+    <example id="zend.markup.getting-started.basic-usage">
+        <title>Utilisation classique de Zend_Markup</title>
+
+        <para>
+            Nous allons d'abord instancier un objet <classname>Zend_Markup_Renderer_Html</classname> en utilisant
+            la méthode <methodname>Zend_Markup::factory()</methodname>. Ceci créera aussi un objet
+            a <classname>Zend_Markup_Parser_Bbcode</classname> qui sera ajouté à l'objet de rendu.
+        </para>
+
+        <para>
+            Ensuite, nous utiliserons la méthode <methodname>render()</methodname> afin de convertir un bout de
+            BBCode vers du <acronym>HTML</acronym>.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+// Créer une instance de Zend_Markup_Renderer_Html,
+// avec Zend_Markup_Parser_BbCode comme parseur
+$bbcode = Zend_Markup::factory('Bbcode');
+
+echo $bbcode->render('[b]bold text[/b] and [i]cursive text[/i]');
+// Affiche: '<strong>bold text</strong> and <em>cursive text</em>'
+]]></programlisting>
+    </example>
+
+    <example id="zend.markup.getting-started.complicated-example">
+        <title>Un exemple plus complexe de Zend_Markup</title>
+
+        <para>
+            Même chose ici, mais avec un bout de BBCode plus complexe.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$bbcode = Zend_Markup::factory('Bbcode');
+
+$input = <<<EOT
+[list]
+[*]Zend Framework
+[*]Foobar
+[/list]
+EOT;
+
+echo $bbcode->render($input);
+/*
+Devrait afficher quelque chose comme:
+<ul>
+<li>Zend Framework</li>
+<li>Foobar</li>
+</ul>
+*/
+]]></programlisting>
+    </example>
+
+    <example id="zend.markup.getting-started.incorrect-input">
+        <title>Traitement des entrées incorrectes</title>
+
+        <para>
+            En plus d'analyser et rendre des codes de type BBCode, <classname>Zend_Markup</classname>
+            peut aussi traiter les entrées non valides. La plupart des processeurs de BBCode ne sont pas
+            capables de rendre toute l'entrée sous forme de <acronym>XHTML</acronym> valide.
+            <classname>Zend_Markup</classname> corrige les entrées non valides et ajoute des tags de
+            fermetures si nécessaire:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$bbcode = Zend_Markup::factory('Bbcode');
+
+echo $bbcode->render('some [i]wrong [b]sample [/i] text');
+// Remarquez que le tag '[b]' n'est pas fermé et est aussi mal niché
+// dans l'arbre; mais Zend_Markup propose un rendu correct:
+// some <em>wrong <strong>sample </strong></em><strong> text</strong>
+]]></programlisting>
+    </example>
+</sect1>

+ 226 - 0
documentation/manual/fr/module_specs/Zend_Markup-Parsers.xml

@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect1 id="zend.markup.parsers">
+    <title>Analyseurs Zend_Markup (parsers)</title>
+
+    <para>
+        <classname>Zend_Markup</classname> est fourni avec deux analyseurs, BBCode et
+        Textile.
+    </para>
+
+    <sect2 id="zend.markup.parsers.theory">
+        <title>Theorie de l'analyse</title>
+
+        <para>
+            Les analyseurs syntaxiques de <classname>Zend_Markup</classname> sont des classes
+            qui convertissent du texte balisé en un arbre d'identifiants d'analyses, appelées 'tokens'.
+            Même si nous utilisons par la suite l'analyseur BBCode, le principe de l'arbre à
+            tokens est le même pour tous les analyseurs syntaxiques. Essayons avec un morceau
+            de BBCode par exemple:
+        </para>
+
+        <programlisting><![CDATA[
+[b]foo[i]bar[/i][/b]baz
+]]></programlisting>
+
+        <para>
+            L'analyseur BBCode va analyser syntaxiquement ce code et en déduire l'arbre suivant:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>[b]</para>
+
+                <itemizedlist>
+                    <listitem>
+                        <para>foo</para>
+                    </listitem>
+
+                    <listitem>
+                        <para>[i]</para>
+
+                        <itemizedlist>
+                            <listitem>
+                                <para>bar</para>
+                            </listitem>
+                        </itemizedlist>
+                    </listitem>
+                </itemizedlist>
+            </listitem>
+
+            <listitem>
+                <para>baz</para>
+            </listitem>
+        </itemizedlist>
+
+        <para>
+            Notez que les tags de fermeture n'existent plus dans l'arbre généré. Ceci car ils
+            n'ont pas de valeur particulière pour la sémantique, ils ne sont pas perdus mais stockés
+            grâce au seul tag d'ouverture. Notez aussi que ceci n'est qu'une vue simplifiée de l'arbre
+            réel qui contient en réalité bien plus d'informations comme les attributs éventuels du tag
+            et son nom.
+        </para>
+    </sect2>
+
+    <sect2 id="zend.markup.parsers.bbcode">
+        <title>L'analyseur BBCode</title>
+
+        <para>
+            L'analyseur BBCode est un analyseur de <classname>Zend_Markup</classname> qui
+            transforme un code BBCode en arbres à tokens. La syntaxe des tags BBCode est:
+        </para>
+
+        <programlisting language="text"><![CDATA[
+[name(=(value|"value"))( attribute=(value|"value"))*]
+]]></programlisting>
+
+        <para>
+            Des exemples de tags BBCode valides:
+        </para>
+
+        <programlisting><![CDATA[
+[b]
+[list=1]
+[code file=Zend/Markup.php]
+[url="http://framework.zend.com/" title="Zend Framework!"]
+]]></programlisting>
+
+        <para>
+            Par défaut, tous les tags sont fermés avec la syntaxe '[/tagname]'.
+        </para>
+    </sect2>
+
+    <sect2 id="zend.markup.parsers.textile">
+        <title>L'analyseur Textile</title>
+
+        <para>
+            L'analyseur Textile de <classname>Zend_Markup</classname> convertit du texte au format Textile
+            en un arbre à tokens. Textile n'ayant pas de structure à base de tags, la liste suivante est un
+            exemple de tags:
+        </para>
+
+        <table id="zend.markup.parsers.textile.tags">
+            <title>Liste de tags Textile basiques</title>
+
+            <tgroup cols="2" align="left" colsep="1" rowsep="1">
+                <thead>
+                    <row>
+                        <entry>Entrée</entry>
+
+                        <entry>Sortie</entry>
+                    </row>
+                </thead>
+
+                <tbody>
+                    <row>
+                        <entry>*foo*</entry>
+
+                        <entry><![CDATA[<strong>foo</strong>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>_foo_</entry>
+
+                        <entry><![CDATA[<em>foo</em>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>??foo??</entry>
+
+                        <entry><![CDATA[<cite>foo</cite>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>-foo-</entry>
+
+                        <entry><![CDATA[<del>foo</del>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>+foo+</entry>
+
+                        <entry><![CDATA[<ins>foo</ins>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>^foo^</entry>
+
+                        <entry><![CDATA[<sup>foo</sup>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>~foo~</entry>
+
+                        <entry><![CDATA[<sub>foo</sub>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>%foo%</entry>
+
+                        <entry><![CDATA[<span>foo</span>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>PHP(PHP Hypertext Preprocessor)</entry>
+
+                        <entry><![CDATA[<acronym title="PHP Hypertext Preprocessor">PHP</acronym>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>"Zend Framework":http://framework.zend.com/</entry>
+
+                        <entry><![CDATA[<a href="http://framework.zend.com/">Zend Framework</a>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>h1. foobar</entry>
+
+                        <entry><![CDATA[<h1>foobar</h1>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>h6. foobar</entry>
+
+                        <entry><![CDATA[<h6>foobar</h6>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>!http://framework.zend.com/images/logo.gif!</entry>
+
+                        <entry><![CDATA[<img src="http://framework.zend.com/images/logo.gif" />]]></entry>
+                    </row>
+                </tbody>
+            </tgroup>
+        </table>
+
+        <para>
+            L'analyseur Textile encapsule tous les tags dans des paragraphes; un paragraphe se termine par
+            deux nouvelles lignes, et s'il y a des tags supplémentaires, un nouveau paragraphe sera ajouté.
+        </para>
+
+        <sect3 id="zend.markup.parsers.textile.lists">
+            <title>Listes</title>
+
+            <para>
+                L'analyseur Textile supporte aussi deux types de listes. Le type numérique, utilisant
+                le caractère "#" et le type anonyme qui utilise lui l'étoile "*".
+                Exemple des deux listes:
+            </para>
+
+            <programlisting><![CDATA[
+# Item 1
+# Item 2
+
+* Item 1
+* Item 2
+]]></programlisting>
+
+            <para>
+                Le code ci-dessus génèrera deux listes, la première, numérique; et la seconde, anonyme.
+                Dans les éléments des listes, vous pouvez utiliser des tags classiques comme le gras
+                (*), et l'emphase(italique) (_). Les tags ayant besoin de créer une nouvelle ligne
+                (comme 'h1' etc.) ne peuvent être utilisés au sein des listes.
+            </para>
+        </sect3>
+    </sect2>
+</sect1>

+ 205 - 0
documentation/manual/fr/module_specs/Zend_Markup-Renderers.xml

@@ -0,0 +1,205 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect1 id="zend.markup.renderers">
+    <title>Moteurs de rendu Zend_Markup</title>
+
+    <para>
+        <classname>Zend_Markup</classname> est fournie avec un moteur de rendu, le
+        <acronym>HTML</acronym>.
+    </para>
+
+    <sect2 id="zend.markup.renderers.add">
+        <title>Ajouter vos propres tags</title>
+
+        <para>
+            En ajoutant vos tags, vous pouvez ajouter vos propres fonctionnalités aux moteurs
+            de rendu de <classname>Zend_Markup</classname>. Grâce à la structure en tags, vous pouvez
+            ajouter presque toutes les fonctionnalités que vous voulez, depuis des tags simples jusqu'à
+            des structures de données complexes. Voici un exemple pour un tag simple 'foo':
+        </para>
+
+        <programlisting language="php"><![CDATA[
+// Créer une instance de Zend_Markup_Renderer_Html,
+// avec Zend_Markup_Parser_BbCode comme analyseur
+$bbcode = Zend_Markup::factory('Bbcode');
+
+// Ceci va créer un tag simple 'foo'
+// Le premier paramètre définit le nom du tag
+// Le second param prend un entier qui définit le type de tag.
+// Le troisième param est un tableau qui définit d'autres caractéristiques
+// du tag comme son groupe et (dans ce cas) les tags de début et de fin
+$bbcode->addTag(
+    'foo',
+    Zend_Markup_Renderer_RendererAbstract::TYPE_REPLACE,
+    array(
+        'start' => '-bar-',
+        'end'   => '-baz-',
+        'group' => 'inline'
+    )
+);
+
+// La sortie sera: 'my -bar-tag-baz-'
+echo $bbcode->render('my [foo]tag[/foo]');
+]]></programlisting>
+
+        <para>
+            Notez que créer vos propres tags n'est utile que si l'analyseur syntaxique en tient compte.
+            Actuellement, seul BBCode supporte cela. Textile ne supporte pas les tags personnalisés.
+        </para>
+        
+        <para>
+            Certains moteurs de rendu (comme le moteur HTML) supporte un paramètre nommé 'tag'.
+            Cela remplace les paramètres 'start' et 'end', et il rend le tag avec des attributs
+            par défaut ainsi que le tag de fin. 
+        </para>
+        
+        <sect3 id="zend.markup.renderers.add.callback">
+            <title>Ajout d'un tag de rappel(callback)</title>
+            
+            <para>
+                Ajouter des tags de rappel permet de faire bien plus que de simples
+                remplacements. Par exemple, vous pouvez changer le contenu, utiliser
+                des paramètres pour changer la sortie, etc.
+            </para>
+            
+            <para>
+                Un rappel est une classe qui implémente
+                <classname>Zend_Markup_Renderer_TokenInterface</classname>
+                Voici un exemple de classe de tag de rappel:
+            </para>
+            
+            <programlisting language="php"><![CDATA[
+class My_Markup_Renderer_Html_Upper extends Zend_Markup_Renderer_TokenConverterInterface
+{
+
+    public function convert(Zend_Markup_Token $token, $text)
+    {
+        return '!up!' . strtoupper($text) . '!up!';
+    }
+
+}
+]]></programlisting>
+
+            <para>
+                Il est possible maintenant d'ajouter le tag 'upper', avec comme fonction de rappel,
+                une instance de <classname>My_Markup_Renderer_Html_Upper</classname>.
+                Voici un exemple:
+            </para>
+            
+            <programlisting language="php"><![CDATA[
+// Créer une instance de Zend_Markup_Renderer_Html,
+// avec Zend_Markup_Parser_BbCode comme analyseur
+$bbcode = Zend_Markup::factory('Bbcode');
+
+// Ceci va créer un tag simple 'foo'
+// Le premier paramètre définit le nom du tag
+// Le second param prend un entier qui définit le type de tag.
+// Le troisième param est un tableau qui définit d'autres caractéristiques
+// du tag comme son groupe et (dans ce cas) les tags de début et de fin
+$bbcode->addTag(
+    'upper',
+    Zend_Markup_Renderer_RendererAbstract::TYPE_REPLACE,
+    array(
+        'callback' => new My_Markup_Renderer_Html_Upper(),
+        'group'    => 'inline'
+    )
+);
+
+// La sortie sera: 'my !up!TAG!up!'
+echo $bbcode->render('my [upper]tag[/upper]');
+]]></programlisting>
+        </sect3>
+    </sect2>
+    
+    <sect2 id="zend.markup.renderers.list">
+        <title>Liste de tags</title>
+
+        <table id="zend.markup.renderers.list.tags">
+            <title>Liste de tags</title>
+
+            <tgroup cols="2" align="left" colsep="1" rowsep="1">
+                <thead>
+                    <row>
+                        <entry>Entrée (bbcode)</entry>
+
+                        <entry>Sortie</entry>
+                    </row>
+                </thead>
+
+                <tbody>
+                    <row>
+                        <entry>[b]foo[/b]</entry>
+
+                        <entry><![CDATA[<strong>foo</strong>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>[i]foo[/i]</entry>
+
+                        <entry><![CDATA[<em>foo</em>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>[cite]foo[/cite]</entry>
+
+                        <entry><![CDATA[<cite>foo</cite>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>[del]foo[/del]</entry>
+
+                        <entry><![CDATA[<del>foo</del>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>[ins]foo[/ins]</entry>
+
+                        <entry><![CDATA[<ins>foo</ins>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>[sup]foo[/sup]</entry>
+
+                        <entry><![CDATA[<sup>foo</sup>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>[sub]foo[/sub]</entry>
+
+                        <entry><![CDATA[<sub>foo</sub>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>[span]foo[/span]</entry>
+
+                        <entry><![CDATA[<span>foo</span>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>[acronym title="PHP Hypertext Preprocessor]PHP[/acronym]</entry>
+
+                        <entry><![CDATA[<acronym title="PHP Hypertext Preprocessor">PHP</acronym>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>[url=http://framework.zend.com/]Zend Framework[/url]</entry>
+
+                        <entry><![CDATA[<a href="http://framework.zend.com/">Zend Framework</a>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>[h1]foobar[/h1]</entry>
+
+                        <entry><![CDATA[<h1>foobar</h1>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>[img]http://framework.zend.com/images/logo.gif[/img]</entry>
+
+                        <entry><![CDATA[<img src="http://framework.zend.com/images/logo.gif" />]]></entry>
+                    </row>
+                </tbody>
+            </tgroup>
+        </table>
+    </sect2>
+</sect1>

+ 83 - 0
documentation/manual/fr/module_specs/Zend_Navigation-Introduction.xml

@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect1 id="zend.navigation.introduction">
+    <title>Introduction</title>
+
+    <para>
+        <classname>Zend_Navigation</classname> est un composant gérant arbres et menus
+        pour les pages webs. Il permet de créer des menus, des fils, des liens et
+        des cartographies de sites (sitemaps), ou encore toute autre représentation
+        concernant la navigation.
+    </para>
+
+    <sect2 id="zend.navigation.introduction.concepts">
+        <title>Pages et Conteneurs</title>
+
+        <para>
+            Deux concepts existent dans <classname>Zend_Navigation</classname>:
+        </para>
+
+        <sect3 id="zend.navigation.introduction.pages">
+            <title>Pages</title>
+            <para>
+                Une page (<classname>Zend_Navigation_Page</classname>) dans
+                <classname>Zend_Navigation</classname> – dans sa forme la plus
+                simple – est un objet pointant vers une page web. En plus d'un
+                pointeur vers une page web, l'objet page contient d'autres
+                informations utiles à la navigation comme un <code>label</code>,
+                un titre <code>title</code>, etc.
+            </para>
+
+            <para>
+                Pour plus d'informations sur les pages, lisez
+                <link linkend="zend.navigation.pages">leur section</link>.
+            </para>
+        </sect3>
+
+        <sect3 id="zend.navigation.introduction.containers">
+            <title>Conteneurs</title>
+            <para>
+                Un conteneur de navigation
+                (<classname>Zend_Navigation_Container</classname>) est une classe
+                contenant des pages. Elle possède des méthodes pour ajouter, supprimer,
+                récupérer et itrérer au travers de pages. Elle implémente les interfaces
+                de la <ulink url="http://php.net/spl">SPL</ulink>
+                <classname>RecursiveIterator</classname> et
+                <classname>Countable</classname>, et peuvent ainsi être parcourues avec
+                les itérateurs de la SPL tels que
+                <classname>RecursiveIteratorIterator</classname>.
+            </para>
+
+            <para>
+                Pour plus d'informations sur les conteneurs, lisez
+                <link linkend="zend.navigation.containers">leur section</link>.
+            </para>
+
+            <note>
+                <para>
+                    <classname>Zend_Navigation_Page</classname> étend
+                    <classname>Zend_Navigation_Container</classname>, ce qui signifie
+                    qu'une page peut posséder des sous-pages.
+                </para>
+            </note>
+        </sect3>
+    </sect2>
+
+    <sect2 id="zend.navigation.introduction.separation">
+        <title>Séparation des données (modèle) et du rendu (vue)</title>
+
+        <para>
+            Les classes dans <classname>Zend_Navigation</classname> ne s'occupent
+            pas du rendu visuel, celui-ci est effectué par des aides de vue. Par contre,
+            les pages peuvent contenir des informations utilisées par les aides de vue
+            comme un label (libellé), une classe <acronym>CSS</acronym>, un titre,
+            des attributs <code>lastmod</code> et <code>priority</code> pour les
+            sitemaps, etc.
+        </para>
+
+        <para>
+            Pour plus d'informations sur le rendu des éléments, lisez
+            <link linkend="zend.view.helpers.initial.navigation">leur section</link>.
+        </para>
+    </sect2>
+</sect1>

+ 210 - 0
documentation/manual/fr/module_specs/Zend_Navigation-Pages-Common.xml

@@ -0,0 +1,210 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect2 id="zend.navigation.pages.common">
+    <title>Caractéristiques communes aux pages</title>
+
+    <para>
+        Toutes les classes pour des pages doivent étendre <classname>Zend_Navigation_Page</classname>,
+        elles partageront ainsi des caractéristiques communes. Ces options sont représentées dans le
+        tableau ci-après.
+    </para>
+
+    <para>
+        Les noms des options (en clés) sont dirigées vers les setters appropriés <code>set</code>.
+        Ceci signifie qu'une option appelée <code>order</code> sera passée à la méthode
+        <methodname>setOrder()</methodname>, et une option nommée <code>reset_params</code> sera
+        dirigée vers <methodname>setResetParams()</methodname>. Si aucune méthode setter ne correspond,
+        l'option sera alors évaluée comme un attribut personnalisé de la page.
+    </para>
+
+    <para>
+        Documentez vous au sujet de la création de pages <classname>Zend_Navigation_Page</classname> dans
+        <link linkend="zend.navigation.pages.custom">la documentation appropriée</link>.
+    </para>
+
+    <table id="zend.navigation.pages.common.options">
+        <title>Options communes aux pages</title>
+        <tgroup cols="4">
+            <thead>
+                <row>
+                    <entry>Clé</entry>
+                    <entry>Type</entry>
+                    <entry>Valeur par défaut</entry>
+                    <entry>Description</entry>
+                </row>
+            </thead>
+            <tbody>
+                <row>
+                    <entry><code>label</code></entry>
+                    <entry><type>chaine</type></entry>
+                    <entry><constant>NULL</constant></entry>
+                    <entry>
+                        Un nom de page, comme 'Home' ou 'Blog'.
+                    </entry>
+                </row>
+                <row>
+                    <entry><code>id</code></entry>
+                    <entry><type>chaine</type> | <code>entier</code></entry>
+                    <entry><constant>NULL</constant></entry>
+                    <entry>
+                        Un tag id à utiliser lors du rendu de la page, typiquement
+                        pour repérer un élément.
+                    </entry>
+                </row>
+                <row>
+                    <entry><code>class</code></entry>
+                    <entry><type>chaine</type></entry>
+                    <entry><constant>NULL</constant></entry>
+                    <entry>
+                        Une classe <acronym>CSS</acronym> à utiliser lors du rendu de la page.
+                    </entry>
+                </row>
+                <row>
+                    <entry><code>title</code></entry>
+                    <entry><type>chaine</type></entry>
+                    <entry><constant>NULL</constant></entry>
+                    <entry>
+                        Un titre de page utilisé lors du rendu, utilisé typiquement
+                        sous forme d'attribut <code>title</code>.
+                    </entry>
+                </row>
+                <row>
+                    <entry><code>target</code></entry>
+                    <entry><type>chaine</type></entry>
+                    <entry><constant>NULL</constant></entry>
+                    <entry>
+                        La cible à utiliser dans la page.
+                    </entry>
+                </row>
+                <row>
+                    <entry><code>rel</code></entry>
+                    <entry><type>tableau</type></entry>
+                    <entry><methodname>array()</methodname></entry>
+                    <entry>
+                        Attribue les relations de la page.
+                        Chaque élément dans le tableau est une paire clé-valeur où
+                        la clé désigne le type de relation et la valeur un pointeur vers
+                        la page. Par exemple <code>'alternate' => 'format/plain.html'</code>.
+                        Pour une fléxibilité maximale, il n'y a pas de restrictions quant aux
+                        valeurs, elles peuvent être autre chose qu'une chaine. Concernant
+                        <code>rel</code> et <code>rev</code>, voyez la section de documentation 
+                        <link linkend="zend.view.helpers.initial.navigation.links">sur l'aide
+                        de vue Links.</link>.
+                    </entry>
+                </row>
+                <row>
+                    <entry><code>rev</code></entry>
+                    <entry><type>tableau</type></entry>
+                    <entry><methodname>array()</methodname></entry>
+                    <entry>
+                        Spécifie les relations inverses de la page. Fonctionne tout comme
+                        <code>rel</code>.
+                    </entry>
+                </row>
+                <row>
+                    <entry><code>order</code></entry>
+                    <entry><type>chaine</type> | <code>entier</code> | <constant>NULL</constant></entry>
+                    <entry><constant>NULL</constant></entry>
+                    <entry>
+                        Fonctionne comme order pour les éléments de
+                        <link linkend="zend.form.quickstart.render">
+                        <classname>Zend_Form</classname></link>. Si spécifiée, la page sera
+                        parcourue dans un ordre précis ce qui signifie que vous pouvez forcer la page
+                        à apparaitre avant les autres en utilisant une valeur de
+                        <code>order</code> basse, comme -100. Si une <type>chaine</type> est passée,
+                        elle doit pouvoir être convertie en <code>entier</code>. Si <constant>NULL</constant>
+                        est utilisé, le paramètre sera remis à zéro, donc l'ordre dans lequel la page
+                        a été ajoutée sera utilisé.
+                    </entry>
+                </row>
+                <row>
+                    <entry><code>resource</code></entry>
+                    <entry><type>chaine</type> | <classname>Zend_Acl_Resource_Interface</classname> | <constant>NULL</constant></entry>
+                    <entry><constant>NULL</constant></entry>
+                    <entry>
+                        Une ressource d'<acronym>ACL</acronym> à associer à la page. Voyez la documentation
+                        <link linkend="zend.view.helpers.initial.navigation.acl">de la section sur les
+                        <acronym>ACL</acronym> concernant les aides de vue.</link>.
+                    </entry>
+                </row>
+                <row>
+                    <entry><code>privilege</code></entry>
+                    <entry><type>chaine</type> | <constant>NULL</constant></entry>
+                    <entry><constant>NULL</constant></entry>
+                    <entry>
+                        Un privilège d'<acronym>ACL</acronym> à associer à la page. Voyez la documentation
+                        <link linkend="zend.view.helpers.initial.navigation.acl">de la section sur les
+                        <acronym>ACL</acronym> concernant les aides de vue.</link>.
+                    </entry>
+                </row>
+                <row>
+                    <entry><code>active</code></entry>
+                    <entry><code>booléen</code></entry>
+                    <entry><constant>FALSE</constant></entry>
+                    <entry>
+                        Si oui ou non la page doit être considérée comme active. Si à
+                        <constant>FALSE</constant> (ou non fourni), les pages <acronym>MVC</acronym> vont aller
+                        vérifier l'objet requête suite à l'appel à <code>$page->isActive()</code>.
+                    </entry>
+                </row>
+                <row>
+                    <entry><code>visible</code></entry>
+                    <entry><code>booléen</code></entry>
+                    <entry><constant>TRUE</constant></entry>
+                    <entry>
+                        Si oui ou non la page doit être visible à l'utilisateur ou juste présente
+                        dans la structure mais non représentée visuellement.
+                    </entry>
+                </row>
+                <row>
+                    <entry><code>pages</code></entry>
+                    <entry><type>tableau</type> | <classname>Zend_Config</classname> | <constant>NULL</constant></entry>
+                    <entry><constant>NULL</constant></entry>
+                    <entry>
+                        Pages enfant de la page en cours. Peut être de type <type>tableau</type>
+                        ou <classname>Zend_Config</classname> contenant des options à passer à la
+                        méthode <methodname>factory()</methodname> ou des instances de
+                        <classname>Zend_Navigation_Page</classname>, ou un mélange des deux types.
+                    </entry>
+                </row>
+            </tbody>
+        </tgroup>
+    </table>
+
+    <note>
+        <title>Propriétés personnalisées</title>
+        <para>
+            Toutes les pages supportent la gestion de propriétés personnalisées, ceci via les méthodes
+            magiques <methodname>__set($name, $value)</methodname>, <methodname>__get($name)</methodname>,
+            <methodname>__isset($name)</methodname> et <methodname>__unset($name)</methodname>.
+            Ces propriétés peuvent prendre n'importe quelle valeur et seront incluses dans le tableau
+            retourné par <code>$page->toArray()</code>, ce qui signifie que les pages peuvent être
+            dé/sérialisées même si elles comportent des propriétés non natives à leur classe.
+        </para>
+        <para>
+            Que les pages soient natives ou personnalisées par vos soins, les propriétés peuvent
+            être gérées au moyen des méthodes <code>$page->set($name, $value)</code> et
+            <code>$page->get($name)</code>, ou encore via des méthodes magiques.
+        </para>
+    </note>
+
+    <example id="zend.navigation.pages.common.example.customprops">
+        <title>Propriétés de pages personnalisées</title>
+
+        <para>
+            Cet exemple montre comment les propriétés personnalisées des pages peuvent être utilisées.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$page = new Zend_Navigation_Page_Mvc();
+$page->foo = 'bar';
+$page->meaning = 42;
+
+echo $page->foo;
+
+if ($page->meaning != 42) {
+    // quelque chose à faire ici
+}
+]]></programlisting>
+    </example>
+</sect2>

+ 95 - 0
documentation/manual/fr/module_specs/Zend_Navigation-Pages-Custom.xml

@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect2 id="zend.navigation.pages.custom">
+    <title>Créer des pages de type personnalisé</title>
+
+    <para>
+        Etendre <classname>Zend_Navigation_Page</classname> ne nécessite pas forcément de réécrire
+        le constructeur ou les méthodes <methodname>setOptions()</methodname> ou
+        <methodname>setConfig()</methodname>. Le constructeur prend un seul paramètre de type
+        <type>Array</type> ou <classname>Zend_Config</classname> et il est passé à
+        <methodname>setOptions()</methodname> ou <methodname>setConfig()</methodname> respectivement.
+        Ces méthodes appellerons par la suite les setters <methodname>set()</methodname> qui distribueront
+        leurs options. Si l'option <code>internal_id</code> est présente, alors la méthode
+        <methodname>setInternalId()</methodname> sera évaluée si présente, et l'option en question lui sera
+        passée. Si une telle méthode n'existe pas, l'option sera alors vue comme une propriété de la page
+        et sera accessible sous <code>$internalId = $page->internal_id;</code> ou
+        <code>$internalId = $page->get('internal_id');</code>.
+    </para>
+
+    <example id="zend.navigation.custom.example.simple">
+        <title>La page personnalisée la plus simple possible</title>
+
+        <para>
+            La seule chose à définir dans une page personnalisée est la méthode
+            <methodname>getHref()</methodname>.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+class My_Simple_Page extends Zend_Navigation_Page
+{
+    public function getHref()
+    {
+        return 'Quelquechose-ici--ce-que-je-veux';
+    }
+}
+]]></programlisting>
+    </example>
+
+    <example id="zend.navigation.custom.example.properties">
+        <title>Une page personnalisée avec des propriétés</title>
+
+        <para>
+            Ajouter des propriétés à vos pages étendues ne nécessite pas de réécrire
+            <methodname>setOptions()</methodname> ou <methodname>setConfig()</methodname>.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+class My_Navigation_Page extends Zend_Navigation_Page
+{
+    private $_foo;
+    private $_fooBar;
+
+    public function setFoo($foo)
+    {
+        $this->_foo = $foo;
+    }
+
+    public function getFoo()
+    {
+        return $this->_foo;
+    }
+
+    public function setFooBar($fooBar)
+    {
+        $this->_fooBar = $fooBar;
+    }
+
+    public function getFooBar()
+    {
+        return $this->_fooBar;
+    }
+
+    public function getHref()
+    {
+        return $this->foo . '/' . $this->fooBar;
+    }
+}
+
+// can now construct using
+$page = new My_Navigation_Page(array(
+    'label'   => 'Les noms des propriétés sont dirigés vers les setters',
+    'foo'     => 'bar',
+    'foo_bar' => 'baz'
+));
+
+// ...or
+$page = Zend_Navigation_Page::factory(array(
+    'type'    => 'My_Navigation_Page',
+    'label'   => 'Les noms des propriétés sont dirigés vers les setters',
+    'foo'     => 'bar',
+    'foo_bar' => 'baz'
+));
+]]></programlisting>
+    </example>
+</sect2>

+ 109 - 0
documentation/manual/fr/module_specs/Zend_Navigation-Pages-Factory.xml

@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect2 id="zend.navigation.pages.factory">
+    <title>Créer des pages avec la fabrique</title>
+
+    <para>
+        Toute les pages (même les personnalisées) peuvent petre créer via la fabrique
+        <methodname>Zend_Navigation_Page::factory()</methodname>. Celle-ci peut prendre un
+        tableau d'options ou un objet <classname>Zend_Config</classname>. Chaque clé
+        correspondant à une option de l'obet page à créer comme l'indique la section concernant
+        les <link linkend="zend.navigation.pages">Pages</link>. Si le paramètre
+        <code>uri</code> est passé et qu'aucun paramètre concernant <acronym>MVC</acronym> ne
+        sont présents (<code>action, controller, module, route</code>), une page de type
+        <acronym>URI</acronym> sera créee. Si un ou plusieurs paramètres concernant
+        <acronym>MVC</acronym> sont passés, une page de type <acronym>MVC</acronym> sera
+        retournée.
+    </para>
+
+    <para>
+        Si le paramètre <code>type</code> est passé, la fabrique l'utilisera pour déterminer
+        le nom de la classe à utiliser. Les valeurs <code>mvc</code> ou <code>uri</code>
+        créeront des pages de types <acronym>MVC</acronym>/URI.
+    </para>
+
+    <example id="zend.navigation.pages.factory.example.mvc">
+        <title>Créer une page MVC avec la fabrique</title>
+
+        <programlisting language="php"><![CDATA[
+$page = Zend_Navigation_Page::factory(array(
+    'label'  => 'My MVC page',
+    'action' => 'index'
+));
+
+$page = Zend_Navigation_Page::factory(array(
+    'label'      => 'Search blog',
+    'action'     => 'index',
+    'controller' => 'search',
+    'module'     => 'blog'
+));
+
+$page = Zend_Navigation_Page::factory(array(
+    'label'      => 'Home',
+    'action'     => 'index',
+    'controller' => 'index',
+    'module'     => 'index',
+    'route'      => 'home'
+));
+
+$page = Zend_Navigation_Page::factory(array(
+    'type'   => 'mvc',
+    'label'  => 'My MVC page'
+));
+]]></programlisting>
+    </example>
+
+    <example id="zend.navigation.pages.factory.example.uri">
+        <title>Créer une page URI avec la fabrique</title>
+
+        <programlisting language="php"><![CDATA[
+$page = Zend_Navigation_Page::factory(array(
+    'label' => 'My URI page',
+    'uri'   => 'http://www.example.com/'
+));
+
+$page = Zend_Navigation_Page::factory(array(
+    'label'  => 'Search',
+    'uri'    => 'http://www.example.com/search',
+    'active' => true
+));
+
+$page = Zend_Navigation_Page::factory(array(
+    'label' => 'My URI page',
+    'uri'   => '#'
+));
+
+$page = Zend_Navigation_Page::factory(array(
+    'type'   => 'uri',
+    'label'  => 'My URI page'
+));
+]]></programlisting>
+    </example>
+
+    <example id="zend.navigation.pages.factory.example.custom">
+        <title>Créer une page personnalisée avec la fabrique</title>
+
+     <para>
+         Utilisez l'option <code>type</code> afin de nommer la classe à
+         utiliser.
+     </para>
+
+        <programlisting language="php"><![CDATA[
+class My_Navigation_Page extends Zend_Navigation_Page
+{
+    protected $_fooBar = 'ok';
+
+    public function setFooBar($fooBar)
+    {
+        $this->_fooBar = $fooBar;
+    }
+}
+
+$page = Zend_Navigation_Page::factory(array(
+    'type'    => 'My_Navigation_Page',
+    'label'   => 'My custom page',
+    'foo_bar' => 'foo bar'
+));
+]]></programlisting>
+    </example>
+</sect2>

+ 241 - 0
documentation/manual/fr/module_specs/Zend_Navigation-Pages-MVC.xml

@@ -0,0 +1,241 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect2 id="zend.navigation.pages.mvc">
+    <title>Zend_Navigation_Page_Mvc</title>
+
+    <para>
+        Les pages de type <acronym>MVC</acronym> utilisent des paramètres <acronym>MVC</acronym>
+        issus du composant <classname>Zend_Controller</classname>. Une page <acronym>MVC</acronym> utilisera
+        en interne <classname>Zend_Controller_Action_Helper_Url</classname> dans la méthode
+        <methodname>getHref()</methodname> pour générer des cibles (hrefs), et la méthode
+        <methodname>isActive()</methodname> utilisera les paramètres issus de
+        <classname>Zend_Controller_Request_Abstract</classname> et les comparera aux paramètres
+        internes à la page.
+    </para>
+
+    <table id="zend.navigation.pages.mvc.options">
+        <title>Options des pages de type MV</title>
+        <tgroup cols="4">
+            <thead>
+                <row>
+                    <entry>Clé</entry>
+                    <entry>Type</entry>
+                    <entry>Valeur par défaut</entry>
+                    <entry>Description</entry>
+                </row>
+            </thead>
+            <tbody>
+                <row>
+                    <entry><code>action</code></entry>
+                    <entry><type>chaine</type></entry>
+                    <entry><constant>NULL</constant></entry>
+                    <entry>
+                        Nom de l'action pour générer des cibles vers la page.
+                    </entry>
+                </row>
+                <row>
+                    <entry><code>controller</code></entry>
+                    <entry><type>chaine</type></entry>
+                    <entry><constant>NULL</constant></entry>
+                    <entry>
+                        Nom du contrôleur pour générer des cibles vers la page.
+                    </entry>
+                </row>
+                <row>
+                    <entry><code>module</code></entry>
+                    <entry><type>chaine</type></entry>
+                    <entry><constant>NULL</constant></entry>
+                    <entry>
+                        Nom du module pour générer des cibles vers la page.
+                    </entry>
+                </row>
+                <row>
+                    <entry><code>params</code></entry>
+                    <entry><type>Array</type></entry>
+                    <entry><methodname>array()</methodname></entry>
+                    <entry>
+                        Paramètres utilisateurs pour générer des cibles vers la page.
+                    </entry>
+                </row>
+                <row>
+                    <entry><code>route</code></entry>
+                    <entry><type>chaine</type></entry>
+                    <entry><constant>NULL</constant></entry>
+                    <entry>
+                        Nom de la route à utiliser pour générer des cibles vers la page.
+                    </entry>
+                </row>
+                <row>
+                    <entry><code>reset_params</code></entry>
+                    <entry><code>bool</code></entry>
+                    <entry><constant>TRUE</constant></entry>
+                    <entry>
+                        Remettre à zéro les paramètres de la route ou non.
+                    </entry>
+                </row>
+            </tbody>
+        </tgroup>
+    </table>
+
+    <note>
+        <para>
+            Les trois exemples qui suivent supposent une configuration <acronym>MVC</acronym> par défaut,
+            avec une route <code>default</code>.
+        </para>
+
+        <para>
+            L'<acronym>URI</acronym> retournée est relative au <code>baseUrl</code> de
+            <classname>Zend_Controller_Front</classname>. Dans nos exemples, le baseUrl vaut
+            '/' pour simplifier.
+        </para>
+    </note>
+
+    <example id="zend.navigation.pages.mvc.example.getHref">
+        <title>getHref() génères les URI de la page</title>
+
+        <para>
+            Cet exemple montre que les pages de type <acronym>MVC</acronym> utilisent
+            <classname>Zend_Controller_Action_Helper_Url</classname> en interne pour générer
+            les <acronym>URI</acronym>s suite à l'appel à <code>$page->getHref()</code>.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+// getHref() retourne /
+$page = new Zend_Navigation_Page_Mvc(array(
+    'action'     => 'index',
+    'controller' => 'index'
+));
+
+// getHref() retourne /blog/post/view
+$page = new Zend_Navigation_Page_Mvc(array(
+    'action'     => 'view',
+    'controller' => 'post',
+    'module'     => 'blog'
+));
+
+// getHref() retourne /blog/post/view/id/1337
+$page = new Zend_Navigation_Page_Mvc(array(
+    'action'     => 'view',
+    'controller' => 'post',
+    'module'     => 'blog',
+    'params'     => array('id' => 1337)
+));
+]]></programlisting>
+    </example>
+
+    <example id="zend.navigation.pages.mvc.example.isActive">
+        <title>isActive() détermine si la page est active</title>
+
+        <para>
+            Cet exemple montre que les pages de type <acronym>MVC</acronym> utilisent l'objet de
+            requête afin de déterminer si elles sont actives ou non.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+/*
+ * Requête dispatchée:
+ * - module:     default
+ * - controller: index
+ * - action:     index
+ */
+$page1 = new Zend_Navigation_Page_Mvc(array(
+    'action'     => 'index',
+    'controller' => 'index'
+));
+
+$page2 = new Zend_Navigation_Page_Mvc(array(
+    'action'     => 'bar',
+    'controller' => 'index'
+));
+
+$page1->isActive(); // retourne true
+$page2->isActive(); // retourne false
+
+/*
+ * Requête dispatchée:
+ * - module:     blog
+ * - controller: post
+ * - action:     view
+ * - id:         1337
+ */
+$page = new Zend_Navigation_Page_Mvc(array(
+    'action'     => 'view',
+    'controller' => 'post',
+    'module'     => 'blog'
+));
+
+// retourne true, car la requpete a le même trio module/controller/action
+$page->isActive();
+
+/*
+ * Requête dispatchée:
+ * - module:     blog
+ * - controller: post
+ * - action:     view
+ */
+$page = new Zend_Navigation_Page_Mvc(array(
+    'action'     => 'view',
+    'controller' => 'post',
+    'module'     => 'blog',
+    'params'     => array('id' => null)
+));
+
+// retourne false, car page a besoin du paramètre id dans la requête
+$page->isActive(); // retourne false
+]]></programlisting>
+    </example>
+
+    <example id="zend.navigation.pages.mvc.example.routes">
+        <title>Utiliser les routes</title>
+
+        <para>
+            Les routes sont utilisables dans les pages de type <acronym>MVC</acronym>. Si une page a une route,
+            elle sera utilisée par <methodname>getHref()</methodname> pour générer l'<acronym>URL</acronym>
+            de la page.
+        </para>
+
+        <para>
+            <note>
+                <para>
+                    Notez que si vous utilisez le paramètre <code>route</code>, vous devrez
+                    préciser les paramètres par défaut de la route
+                    (module, controller, action, etc.), autremant <methodname>isActive()</methodname>
+                    ne pourra déterminer si la page est active ou pas. La raison est qu'il n'existe
+                    actuellement aucune méthode permettant de récupérer les paramètres par défaut
+                    d'une route un objet <classname>Zend_Controller_Router_Route_Interface</classname>,
+                    ni même de récupérer la route courante depuis un objet
+                    <classname>Zend_Controller_Router_Interface</classname>.
+                </para>
+            </note>
+        </para>
+
+        <programlisting language="php"><![CDATA[
+// La route suivante est ajoutée au routeur de ZF
+Zend_Controller_Front::getInstance()->getRouter()->addRoute(
+    'article_view', // nom de la route
+    new Zend_Controller_Router_Route(
+        'a/:id',
+        array(
+            'module'     => 'news',
+            'controller' => 'article',
+            'action'     => 'view',
+            'id'         => null
+        )
+    )
+);
+
+// Une page est créee avec un paramètre 'route'
+$page = new Zend_Navigation_Page_Mvc(array(
+    'label'      => 'A news article',
+    'route'      => 'article_view',
+    'module'     => 'news',    // requis pour isActive(), voyez les notes ci-dessus
+    'controller' => 'article', // requis pour isActive(), voyez les notes ci-dessus
+    'action'     => 'view',    // requis pour isActive(), voyez les notes ci-dessus
+    'params'     => array('id' => 42)
+));
+
+// retourne: /a/42
+$page->getHref();
+]]></programlisting>
+    </example>
+</sect2>

+ 50 - 0
documentation/manual/fr/module_specs/Zend_Navigation-Pages-URI.xml

@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect2 id="zend.navigation.pages.uri">
+    <title>Zend_Navigation_Page_Uri</title>
+
+    <para>
+        Les pages de type <classname>Zend_Navigation_Page_Uri</classname> peuvent être utilisées
+        pour pointer vers des sites externes, ou des pages internes personnalisées. Les pages
+        <acronym>URI</acronym> sont simples, en plus des options classiques des pages, les pages
+        <acronym>URI</acronym> utilisent une seule option : <code>uri</code>. L'
+        <code>uri</code> sera retourné à l'appel de <code>$page->getHref()</code> et retournera
+        une <type>chaine</type> ou <constant>NULL</constant>.
+    </para>
+
+    <note>
+        <para>
+            <classname>Zend_Navigation_Page_Uri</classname> ne pourra pas calculer
+            elle même si elle est active ou pas suite à un appel à
+            <code>$page->isActive()</code>. L'appel retournera la valeur que vous aurez
+            spécifier vous-mêmes grâce à <code>$page->setActive()</code> ou via l'option
+            de constructeur <code>active</code>.
+        </para>
+    </note>
+
+    <table id="zend.navigation.pages.uri.options">
+        <title>URI page options</title>
+        <tgroup cols="4">
+            <thead>
+                <row>
+                    <entry>Clé</entry>
+                    <entry>Type</entry>
+                    <entry>Valeur par défaut</entry>
+                    <entry>Description</entry>
+                </row>
+            </thead>
+            <tbody>
+                <row>
+                    <entry><code>uri</code></entry>
+                    <entry><type>chaine</type></entry>
+                    <entry><constant>NULL</constant></entry>
+
+                    <entry>
+                        <acronym>URI</acronym> vers la page. Une chaine, ou
+                        <constant>NULL</constant>.
+                    </entry>
+                </row>
+            </tbody>
+        </tgroup>
+    </table>
+</sect2>

+ 37 - 0
documentation/manual/fr/module_specs/Zend_Navigation-Pages.xml

@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect1 id="zend.navigation.pages" xmlns:xi="http://www.w3.org/2001/XInclude">
+    <title>Pages</title>
+
+    <para>
+        <classname>Zend_Navigation</classname> est fournie par défaut avec deux types de page:
+
+        <itemizedlist>
+            <listitem>
+                <para>
+                    <link linkend="zend.navigation.pages.mvc">Pages MVC</link>
+                     – utilisant la classe <classname>Zend_Navigation_Page_Mvc</classname>
+                </para>
+            </listitem>
+            <listitem>
+                <para>
+                    <link linkend="zend.navigation.pages.uri">Pages URI</link>
+                     – utilisant la classe <classname>Zend_Navigation_Page_Uri</classname>
+                </para>
+            </listitem>
+        </itemizedlist>
+
+        Les pages MVC proposeront des liens pour l'application courante et utilisent les paramètres MVC
+        (<code>action</code>, <code>controller</code>, <code>module</code>, <code>route</code>,
+        <code>params</code>). Les pages URI utilisent elles une seule option,<code>uri</code>,
+        ce qui vous offre la possibilité de créer des liens vers des sites externes ou encore
+        de créer des liens personnalisés comme par exemple <code>&lt;a href="#"&gt;foo&lt;a&gt;</code>.
+    </para>
+
+    <xi:include href="Zend_Navigation-Pages-Common.xml" />
+    <xi:include href="Zend_Navigation-Pages-MVC.xml" />
+    <xi:include href="Zend_Navigation-Pages-URI.xml" />
+    <xi:include href="Zend_Navigation-Pages-Custom.xml" />
+    <xi:include href="Zend_Navigation-Pages-Factory.xml" />
+
+</sect1>