Parcourir la source

Added some french doc translations

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@16932 44c647ce-9c0f-0410-b52a-842ac1e357ba
doctorrock83 il y a 16 ans
Parent
commit
b9ed0f38b1

+ 196 - 0
documentation/manual/fr/module_specs/Zend_Db_Table_Definition.xml

@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect1 id="zend.db.table.row">
+
+    <title>Zend_Db_Table_Definition</title>
+
+    <sect2 id="zend.db.table.definition.introduction">
+
+        <title>Introduction</title>
+
+        <para>
+            <classname>Zend_Db_Table_Definition</classname> est une classe qui peut être utilisée pour
+            décrire les relations et les options de configuration qui devraient être utilisées lorsque
+            <classname>Zend_Db_Table</classname> est manipulée par instantiation concrête.
+        </para>
+
+    </sect2>
+    
+    <sect2 id="zend.db.table.definition.usage">
+
+        <title>Utilisation de base</title>
+
+        <para>
+            Les options décrites dans un objet de définition sont les mêmes que celles
+            qu'utilisent les classes étendant Zend_Db_Table_Asbtract. Votre objet de définition
+            peut alors être passé à la classe à l'instanciation, celle-ci connaitra alors la
+            définition de toutes les tables concernées.
+        </para>
+
+        <para>
+            Voici un exemple d'objet de définition qui va décrire les noms des tables
+            et les relations entre les objets supports de ces tables.
+            Note: Si 'name' n'est pas précisé, la clé servira alors de nom à la table, c'est
+            le cas dans notre exemple avec 'genre'.
+        </para>
+
+        <example id="zend.db.table.definition.example1">
+
+            <title>Décrire un modèle de base de données</title>
+
+            <programlisting language="php"><![CDATA[
+$definition = new Zend_Db_Table_Definition(array(
+    'author' => array(
+        'name' => 'author',
+        'dependentTables' => array('book')
+        ),
+    'book' => array(
+        'name' => 'book',
+        'referenceMap' => array(
+            'author' => array(
+                'columns' => 'author_id',
+                'refTableClass' => 'author',
+                'refColumns' => 'id'
+                )
+            )
+        ),
+    'genre' => null,
+    'book_to_genre' => array(
+        'referenceMap' => array(
+            'book' => array(
+                'columns' => 'book_id',
+                'refTableClass' => 'book',
+                'refColumns' => 'id'
+                ),
+            'genre' => array(
+                'columns' => 'genre_id',
+                'refTableClass' => 'genre',
+                'refColumns' => 'id'
+                )
+            )
+        )
+    ));
+]]></programlisting>
+
+        </example>
+
+        <para>
+            Comme vous le voyez, les mêmes options que vous utilisez en général en étendant
+            Zend_Db_Table_Abstract sont présentes dans ce tableau. Cette définition va
+            <strong>persister</strong> vers toutes les tables qui seront créees par votre
+            objet, ceci assure une isolation et un bon fonctionnement.
+        </para>
+
+        <para>
+            Ci-après un exemple d'instanciation d'une table et de l'utilisation de
+            findDependentRowset() et findManyToManyRowset() qui vont correspondre au modèle
+            de données:
+        </para>
+
+
+        <example id="zend.db.table.definition.example2">
+        
+            <title>Intéragir avec la définition utilisée</title>
+        
+            <programlisting language="php"><![CDATA[
+$authorTable = new Zend_Db_Table('author', $definition);
+$authors = $authorTable->fetchAll();
+
+foreach ($authors as $author) {
+    echo $author->id . ': ' . $author->first_name . ' ' . $author->last_name . PHP_EOL;
+    $books = $author->findDependentRowset('book');
+    foreach ($books as $book) {
+        echo '    Book: ' . $book->title . PHP_EOL;
+        $genreOutputArray = array();
+        foreach ($book->findManyToManyRowset('genre', 'book_to_genre') as $genreRow) {
+            $genreOutputArray[] = $genreRow->name;
+        }
+        echo '        Genre: ' . implode(', ', $genreOutputArray) . PHP_EOL;
+    }
+}
+]]></programlisting>
+
+        </example>
+
+
+    </sect2>
+
+    <sect2 id="zend.db.table.definition.advanced-usage">
+    
+        <title>Utilisation avancée</title>
+        
+        <para>
+            Quelques fois vous voudriez mixer les utilisations, via la définition et
+            une extension concrête de Zend_Db_Table_Abstract. Pour ce faire, omettez
+            de spécifier une définition concernant la classe concrête. 
+            Zend_Db_Table utiisera alors l'instance que vous lui passerez.
+        </para>
+    
+        <para>
+            Dans l'exemple d'après, nous allons placer une des tables sous forme de classe concrête,
+            et laisser les autres sous forme de définitions. Nous allons voir alors comment les faire
+            intéragir.
+        </para>
+    
+        <example id="zend.db.table.definition.example3">
+        
+            <title>Mixer la définition et l'extension concrête</title>
+        
+            <programlisting language="php"><![CDATA[
+class MyBook extends Zend_Db_Table_Abstract
+{
+    protected $_name = 'book';
+    protected $_referenceMap = array(
+        'author' => array(
+            'columns' => 'author_id',
+            'refTableClass' => 'author',
+            'refColumns' => 'id'
+            )
+        );
+}
+
+$definition = new Zend_Db_Table_Definition(array(
+    'author' => array(
+        'name' => 'author',
+        'dependentTables' => array('MyBook')
+        ),
+    'genre' => null,
+    'book_to_genre' => array(
+        'referenceMap' => array(
+            'book' => array(
+                'columns' => 'book_id',
+                'refTableClass' => 'MyBook',
+                'refColumns' => 'id'
+                ),
+            'genre' => array(
+                'columns' => 'genre_id',
+                'refTableClass' => 'genre',
+                'refColumns' => 'id'
+                )
+            )
+        )
+    ));
+
+$authorTable = new Zend_Db_Table('author', $definition);
+$authors = $authorTable->fetchAll();
+
+foreach ($authors as $author) {
+    echo $author->id . ': ' . $author->first_name . ' ' . $author->last_name . PHP_EOL;
+    $books = $author->findDependentRowset(new MyBook());
+    foreach ($books as $book) {
+        echo '    Book: ' . $book->title . PHP_EOL;
+        $genreOutputArray = array();
+        foreach ($book->findManyToManyRowset('genre', 'book_to_genre') as $genreRow) {
+            $genreOutputArray[] = $genreRow->name;
+        }
+        echo '        Genre: ' . implode(', ', $genreOutputArray) . PHP_EOL;
+    }
+}
+
+]]></programlisting>    
+    
+        </example>
+    
+    </sect2>
+
+</sect1>

+ 71 - 0
documentation/manual/fr/module_specs/Zend_Filter-Callback.xml

@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect2 id="zend.filter.set.callback">
+    <title>Callback</title>
+    <para>
+        Ce filtre vous permet d'utiliser votre propre fonction en tant que filtre de
+        <classname>Zend_Filter</classname>. Nul besoin de créer un filtre si une fonction ou méthode
+        fait déja le travail.
+    </para>
+
+    <para>
+        Par exemple un filtre qui inverse une chaine.
+    </para>
+
+    <programlisting language="php"><![CDATA[
+$filter = new Zend_Filter_Callback('strrev');
+
+print $filter->filter('Hello!');
+// retourne "!olleH"
+]]></programlisting>
+
+    <para>
+        C'est très simple de passer une fonction à appliquer comme filtre. Dans le cas de méthodes de classes, 
+        passez un tableau comme callback.
+    </para>
+
+    <programlisting language="php"><![CDATA[
+// Notre classe
+class MyClass
+{
+    public function Reverse($param);
+}
+
+// La définition du filtre
+$filter = new Zend_Filter_Callback(array('MyClass', 'Reverse'));
+print $filter->filter('Hello!');
+]]></programlisting>
+
+    <para>
+        Pour récupérer la fonction de filtrage actuelle, utilisez <code>getCallback()</code> et pour en
+        affecter une nouvelle, utilisez <code>setCallback()</code>.
+    </para>
+
+    <para>
+        Il est aussi possible de définir des paramètres par défaut qui sont alors passés à la
+        méthode appelée lorsque le filtre est exécuté.
+    </para>
+
+    <programlisting language="php"><![CDATA[
+$filter = new Zend_Filter_Callback(
+    'MyMethod',
+    array('key' => 'param1', 'key2' => 'param2')
+);
+$filter->filter(array('value' => 'Hello'));
+]]></programlisting>
+
+    <para>
+        L'appel manuel à une telle fonction se serait fait comme cela:
+    </para>
+
+    <programlisting language="php"><![CDATA[
+$value = MyMethod('Hello', 'param1', 'param2');
+]]></programlisting>
+
+    <note>
+        <para>
+            Notez que passer une fonction qui ne peut être appelée mènera à une exception.
+        </para>
+    </note>
+
+</sect2>

+ 151 - 0
documentation/manual/fr/module_specs/Zend_Filter-Decryption.xml

@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect2 id="zend.filter.set.decrypt">
+    <title>Decrypt</title>
+    <para>
+        Ce filtre va décrypter toute chaine grâce aux paramètres utilisés. Des adaptateurs sont utilisés.
+        Actuellement des aptateurs existent pour les extensions <code>Mcrypt</code> et <code>OpenSSL</code>
+        de php.
+    </para>
+
+    <para>
+        Pour plus de détails sur l'encryptage de contenu, voyez le filtre <code>Encrypt</code>. La 
+        documentation de celui-ci couvre les bases en matière de cryptage, nous n'aborderons ici que
+        les méthodes utilisées pour le décryptage.
+    </para>
+
+    <sect3 id="zend.filter.set.decrypt.mcrypt">
+        <title>Décryptage avec Mcrypt</title>
+        <para>
+            Pour décrypter une données cryptées avec <code>Mcrypt</code>, vous avez besoin des paramètres
+            utilisés pour encrypter, ainsi que du vecteur.
+        </para>
+
+        <para>
+            Si vous n'aviez pas passé de vecteur spécifique à l'encryptage, alors vous devriez récupérer
+            le vecteur utilisé grâce à la méthode <code>getVector()</code>. Sans ce vecteur, aucun décryptage
+            de la données originale n'est possible.
+        </para>
+
+        <para>
+            Le décryptage s'effectue aussi simplement que l'encryptage.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+// Utilisation des paramètres blowfish par défaut
+$filter = new Zend_Filter_Decrypt('myencryptionkey');
+
+// Utilisation du vecteur utilisé lors de l'encryptage
+$filter->setVector('myvector');
+
+$decrypted = $filter->filter('texte_encodé_non_lisible');
+print $decrypted;
+]]></programlisting>
+
+        <note>
+            <para>
+                Si l'extension mcrypt n'est pas présente dans votre environement, une exception sera levée.
+            </para>
+        </note>
+
+        <note>
+            <para>
+                Vos paramètres sont vérifiés à la création de l'instance ou à l'appel de setEncryption().
+                Si mcrypt détecte des problèmes avec ces paramètres, une exception sera levée.
+            </para>
+        </note>
+    </sect3>
+
+    <sect3 id="zend.filter.set.decrypt.openssl">
+        <title>Decryptage avec OpenSSL</title>
+        <para>
+            Le décryptage avec <code>OpenSSL</code> est aussi simple que l'encryptage. Mais vous aurez besoin de toutes 
+            les données concernant la personne ayant crypté la donnée de référence.
+        </para>
+
+        <para>
+            Pour décrypter avec <code>OpenSSL</code> vous devez posséder:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>
+                    <emphasis>private</emphasis>: Votre clé privée. Ce peut être un nom de fichier
+                    ou juste le contenu de ce fichier : la clé.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>envelope</emphasis>: La clé enveloppe cryptée de l'utilisateur qui
+                    a crypté le document. Un chemin de fichier ou une chaine peuvent être utilisés.
+                </para>
+            </listitem>
+        </itemizedlist>
+
+        <programlisting language="php"><![CDATA[
+// Utilise OpenSSL avec une clé spécifiée
+$filter = new Zend_Filter_Decrypt(array(
+    'adapter' => 'openssl',
+    'private' => '/path/to/mykey/private.pem'
+));
+
+// Passage des clés enveloppe
+$filter->setEnvelopeKey(array(
+    '/key/from/encoder/first.pem',
+    '/key/from/encoder/second.pem'
+));
+]]></programlisting>
+
+        <note>
+            <para>
+                L'adaptateur <code>OpenSSL</code> ne fonctionnera pas avec des clés non valides.
+            </para>
+        </note>
+
+        <para>
+            Optionnellement il peut être nécessaire de passer la passphrase pour décrypter les clés
+            elles-mêmes. Utilisez alors <code>setPassphrase()</code>.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+// Utilise OpenSSL avec une clé spécifiée
+$filter = new Zend_Filter_Decrypt(array(
+    'adapter' => 'openssl',
+    'private' => '/path/to/mykey/private.pem'
+));
+
+// Passage des clés enveloppe
+$filter->setEnvelopeKey(array(
+    '/key/from/encoder/first.pem',
+    '/key/from/encoder/second.pem'
+));
+$filter->setPassphrase('mypassphrase');
+]]></programlisting>
+
+        <para>
+            Enfin, décryptez le contenu. Voici l'exemple complet:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+// Utilise OpenSSL avec une clé spécifiée
+$filter = new Zend_Filter_Decrypt(array(
+    'adapter' => 'openssl',
+    'private' => '/path/to/mykey/private.pem'
+));
+
+// Passage des clés enveloppe
+$filter->setEnvelopeKey(array(
+    '/key/from/encoder/first.pem',
+    '/key/from/encoder/second.pem'
+));
+$filter->setPassphrase('mypassphrase');
+
+$decrypted = $filter->filter('texte_encodé_illisible');
+print $decrypted;
+]]></programlisting>
+    </sect3>
+</sect2>
+<!--
+vim:se ts=4 sw=4 et:
+-->

+ 42 - 0
documentation/manual/fr/module_specs/Zend_Filter-RealPath.xml

@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect2 id="zend.filter.set.realpath">
+    <title>RealPath</title>
+
+    <para>
+        Ce filtre va résoudre un lien ou un chemin en chemin absolu canonique. Toutes références à
+        <filename>'/./'</filename>, <filename>'/../'</filename> et tout ajout supplémentaire de
+        <filename>'/'</filename> sera résolu ou supprimé. Aucun caractère de lien symbolique ne sera
+        présent dans le résultat (<filename>'/./'</filename> ou <filename>'/../'</filename>)
+    </para>
+
+    <para>
+        <classname>Zend_Filter_RealPath</classname> retourne <constant>FALSE</constant> en cas d'echec
+        par exemple si le fichier n'existe pas. Sur les systems BSD, 
+        <classname>Zend_Filter_RealPath</classname> n'échoue pas si seule la dernière partie du chemin 
+        n'existe pas, les autres systèmes retourneront <constant>FALSE</constant>.
+    </para>
+
+    <programlisting language="php"><![CDATA[
+$filter = new Zend_Filter_RealPath();
+$path   = '/www/var/path/../../mypath';
+$filtered = $filter->filter($path);
+
+// retourne '/www/mypath'
+]]></programlisting>
+
+    <para>
+        Il peut être nécessaire quelques fois de vouloir utiliser ce filtre sur des chemins inexistants.
+        Par exemple récupérer le realpath d'un chemin à créer. Dans ce cas vous pouvez passer
+        <constant>FALSE</constant> au constructeur, ou utiliser <methodname>setExists()</methodname>.
+    </para>
+
+    <programlisting language="php"><![CDATA[
+$filter = new Zend_Filter_RealPath(false);
+$path   = '/www/var/path/../../non/existing/path';
+$filtered = $filter->filter($path);
+
+// retourne '/www/non/existing/path' même si file_exists ou realpath retourneraient false
+]]></programlisting>
+
+</sect2>

+ 75 - 0
documentation/manual/fr/module_specs/Zend_Http_Client-Migration.xml

@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect1 id="zend.http.client.migration">
+
+    <title>Migrer depuis les versions précédentes</title>
+
+    <para>
+        Alors que l'API externe de <classname>Zend_Http_Client</classname> n'a pas changé sur la branche
+        1.x de Zend Framework, des changements ont été opérés dans la structure interne de
+        <classname>Zend_Http_Client</classname>. 
+    </para>
+    
+    <para>
+        Ces changements ne devraient pas avoir de conséquence si vous utilisiez directement
+        <classname>Zend_Http_Client</classname>, mais des boulversements peuvent apparaitre dans le cas
+        où vous dériviez l'objet par surcharge. Voyez ainsi ce chapitre.
+    </para>
+
+    <sect2 id="zend.http.client.migration.tozf19">
+        <title>Migrer depuis 1.8 ou avant, vers 1.9 ou après</title>
+        <sect3 id="zend.http.client.migration.tozf19.fileuploadsarray">
+            <title>Changement dans le stockage interne des fichiers d'upload</title>
+
+            <para>
+                Dans la version 1.9 de Zend Framework, il y a eu un changement dans la manière dont
+                <classname>Zend_Http_Client</classname> stocke en interne les informations concernant les
+                fichiers ayant été uploadés, affectés grâce à <classname>Zend_Http_Client::setFileUpload()</classname> 
+            </para>
+            
+            <para>
+                Ce changement a été mis en place de manière à permettre l'envoi de plusieurs fichiers
+                avec le même nom dans le formulaire, en tant que tableau de fichiers. Plus d'informations à
+                ce sujet peuvent être trouvées dans ce
+                <ulink url="http://framework.zend.com/issues/browse/ZF-5744">rapport de bug</ulink>.
+            </para>
+
+            <example id="zend.http.client.migration.tozf19.fileuploadsarray.example">
+                <title>Stockage interne des informations sur les fichiers uploadés</title>
+                
+                <programlisting language="php"><![CDATA[
+// Uploade 2 fichiers avec le même nom d'élément de formulaire, en tant que tableau
+$client = new Zend_Http_Client();
+$client->setFileUpload('file1.txt', 'userfile[]', 'some raw data', 'text/plain');
+$client->setFileUpload('file2.txt', 'userfile[]', 'some other data', 'application/octet-stream');
+
+// Dans Zend Framework <=1.8, la valeur de l'attribut protégé $client->files est:
+// $client->files = array(
+//     'userfile[]' => array('file2.txt', 'application/octet-stream', 'some other data')
+// );
+
+// Dans Zend Framework >=1.9, la valeur de $client->files est:
+// $client->files = array(
+//     array(
+//         'formname' => 'userfile[]',
+//         'filename' => 'file1.txt,
+//         'ctype'    => 'text/plain',
+//         'data'     => 'some raw data'
+//     ),
+//     array(
+//         'formname' => 'userfile[]',
+//         'filename' => 'file2.txt',
+//         'formname' => 'application/octet-stream',
+//         'formname' => 'some other data'
+//     )
+// );
+]]></programlisting>
+            </example>
+            
+            <para>
+                Comme vous le voyez, ce changement permet l'utilisation du même élément de formulaire avec plusieurs
+                fichiers. Cependant ceci introduit un changement subtile dans l'API interne, il est donc signalé ici. 
+            </para>
+        </sect3>
+    </sect2>
+</sect1>