ソースを参照

[DOCUMENTATION] German:

- sync up to r16897

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@16955 44c647ce-9c0f-0410-b52a-842ac1e357ba
thomas 16 年 前
コミット
3ca157908d

+ 5 - 1
documentation/manual/de/manual.xml.in

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 16790 -->
+<!-- EN-Revision: 16883 -->
 <!-- Reviewed: no -->
 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
     "@DOCBOOK_DTD@"
@@ -253,6 +253,7 @@
         <xi:include href="module_specs/Zend_Http_Client-Adapters.xml" />
         <xi:include href="module_specs/Zend_Http_Cookie-Handling.xml" />
         <xi:include href="module_specs/Zend_Http_Response.xml" />
+        <xi:include href="module_specs/Zend_Http_Client-Migration.xml" />
     </chapter>
 
     <chapter id="zend.infocard">
@@ -538,6 +539,9 @@
         <xi:include href="module_specs/Zend_Translate-Introduction.xml" />
         <xi:include href="module_specs/Zend_Translate-Adapters.xml" />
         <xi:include href="module_specs/Zend_Translate-Using.xml" />
+        <xi:include href="module_specs/Zend_Translate-SourceCreation.xml" />
+        <xi:include href="module_specs/Zend_Translate-Additional.xml" />
+        <xi:include href="module_specs/Zend_Translate-Plurals.xml" />
         <xi:include href="module_specs/Zend_Translate-Migration.xml" />
     </chapter>
 

+ 100 - 0
documentation/manual/de/module_specs/Zend_Http_Client-Migration.xml

@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 16882 -->
+<!-- Reviewed: no -->
+<sect1 id="zend.http.client.migration">
+
+    <title>Migrating from previous versions</title>
+
+    <para>
+        While the external API of <classname>Zend_Http_Client</classname> has remained
+        consistent throughout the 1.x brach of Zend Framework, some changes were introduced
+        to the internal structure of <classname>Zend_Http_Client</classname> and its related
+        classes.
+    </para>
+
+    <para>
+        These changes should have no affect on code using <classname>Zend_Http_Client</classname>
+        - but may have an effect on PHP classes overloading or extending it. If your application
+        subclasses <classname>Zend_Http_Client</classname>, it is highly recommended to review
+        the following changes before upgrading Zend Framework.
+    </para>
+
+    <sect2 id="zend.http.client.migration.tozf19">
+        <title>Migrating from 1.8 or older to 1.9 or newer</title>
+        <sect3 id="zend.http.client.migration.tozf19.fileuploadsarray">
+            <title>Changes to internal uploaded file information storage</title>
+
+            <para>
+                In version 1.9 of Zend Framework, there has been a change in the way
+                <classname>Zend_Http_Client</classname> internally stores information about
+                files to be uploaded, set using the <classname>Zend_Http_Client::setFileUpload()</classname>
+                method.
+            </para>
+
+            <para>
+                This change was introduced in order to allow multiple files to be uploaded
+                with the same form name, as an array of files. More information about this issue
+                can be found in <ulink url="http://framework.zend.com/issues/browse/ZF-5744">this bug report</ulink>.
+            </para>
+
+            <example id="zend.http.client.migration.tozf19.fileuploadsarray.example">
+                <title>Internal storage of uploaded file information</title>
+
+                <programlisting language="php"><![CDATA[
+// Upload two files with the same form element name, as an array
+$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');
+
+// In Zend Framework 1.8 or older, the value of the protected member $client->files is:
+// $client->files = array(
+//     'userfile[]' => array('file2.txt', 'application/octet-stream', 'some other data')
+// );
+
+// In Zend Framework 1.9 or newer, the value of $client->files is:
+// $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>
+                As you can see this change permits the usage of the same form element name with
+                more than one file - however, it introduces a subtle backwards-compatibility change
+                and as such should be noted.
+            </para>
+        </sect3>
+
+        <sect3 id="zend.http.client.migration.tozf19.getparamsrecursize">
+            <title>Deprecation of Zend_Http_Client::_getParametersRecursive()</title>
+
+            <para>
+                Starting from version 1.9, the protected method <classname>_getParametersRecursive()</classname>
+                is no longer used by <classname>Zend_Http_Client</classname> and is deprecated.
+                Using it will cause an E_NOTICE message to be emitted by PHP.
+            </para>
+
+            <para>
+                If you subclass <classname>Zend_Http_Client</classname> and call this method, you
+                should look into using the <classname>Zend_Http_Client::_flattenParametersArray()</classname>
+                static method instead.
+            </para>
+
+            <para>
+                Again, since this <classname>_getParametersRecursive</classname> is a protected method,
+                this change will only affect users who subclass <classname>Zend_Http_Client</classname>.
+            </para>
+        </sect3>
+    </sect2>
+</sect1>

+ 802 - 0
documentation/manual/de/module_specs/Zend_Translate-Additional.xml

@@ -0,0 +1,802 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 16883 -->
+<!-- Reviewed: no -->
+<sect1 id="zend.translate.additional">
+
+    <title>Zusätzliche Features für Übersetzungen</title>
+
+    <para>
+        Es gibt verschiedene zusätzliche Features welche von <classname>Zend_Translate</classname>
+        unterstützt werden. Lesen Sie hier für zusätzliche Informationen.
+    </para>
+
+    <sect2 id="zend.translate.additional.options">
+
+        <title>Optionen für Adapter</title>
+
+        <para>
+            Optionen können bei allen Adaptern verwendet werden. Natürlich sind die Optionen für
+            alle Adaptoren verschieden. Die Optionen können bei Erstellung des Objekts miterstellt
+            werden. Zur Zeit gibt es nur eine Option die für alle Adaptoren verfügbar ist:
+            '<code>clear</code>' setzt, ob die neuen Übersetzungsdaten zu den bestehenden
+            hinzugefügt werden sollen oder ob Sie diese überschreiben. Das Standardverhalten ist
+            das Hinzufügen von neuen Übersetzungsdaten zu den Bestehenden. Aber das wird immer nur
+            für die aktuelle Sprache gemacht. Anderen Sprachen bleiben davon unberührt.
+        </para>
+
+        <para>
+            Man kann Optionen temporär setzen indem man die Funktion
+            <code>addTranslation($data, $locale, array $options = array())</code> als dritten und
+            optionalen Parameter benutzt. Ausserdem kann die Methode <code>setOptions()</code>
+            benutzt werden um Optionen permanent zu setzen.
+        </para>
+
+        <example id="zend.translate..additional.options.example">
+            <title>Benutzen von Übersetzungsoptionen</title>
+            <programlisting role="php"><![CDATA[
+// Definiere ':' als Trenner für die Quelldatei der Übersetzung
+$options = array('delimiter' => ':');
+$translate = new Zend_Translate(
+    'csv',
+    '/path/to/mytranslation.csv',
+    'de',
+    $options);
+
+...
+
+// Lösche die definierte Sprache und verwende die neuen Übersetzungsdaten
+$options = array('clear' => true);
+$translate->addTranslation('/path/to/new.csv', 'fr', $options);
+]]></programlisting>
+        </example>
+
+        <para>
+            Hier können alle vorhandenen Optionen für die verschiedenen Adapter mit einer
+            Beschreibung Ihrer Verwendung gefunden werden:
+        </para>
+
+        <table id="zend.translate.additional.options.alloptions">
+            <title>Optionen für Übersetzungs-Adapter</title>
+            <tgroup cols="4">
+                <thead>
+                    <row>
+                        <entry>Option</entry>
+                        <entry>Adapter</entry>
+                        <entry>Beschreibung</entry>
+                        <entry>Standardwert</entry>
+                    </row>
+                </thead>
+                <tbody>
+                    <row>
+                        <entry>clear</entry>
+                        <entry>all</entry>
+                        <entry>
+                            Wenn true gesetzt wird, werden bereits gelesene Übersetzungen entfernt.
+                            Das kann statt dem Erstellen einer neuen Instanz verwendet werden wenn
+                            neue Übersetzungsdaten gelesen werden
+                        </entry>
+                        <entry><emphasis role="strong">false</emphasis></entry>
+                    </row>
+                    <row>
+                        <entry>disableNotices</entry>
+                        <entry>all</entry>
+                        <entry>
+                            Wenn es auf true gesetzt wird, werden alle Notizen betreffend nicht
+                            vorhandenen Übersetzungen ausgeschaltet. Man sollte diese Option in
+                            einer Produktionsumgebung auf true setzen
+                        </entry>
+                        <entry><emphasis role="strong">false</emphasis></entry>
+                    </row>
+                    <row>
+                        <entry>ignore</entry>
+                        <entry>all</entry>
+                        <entry>
+                            Alle Verzeichnisse und Dateien die mit diesem Präfix beginnen werden
+                            bei der Suche nach Dateien ignoriert. Der Standardwert ist
+                            <emphasis>'.'</emphasis> was zu dem Verhalten führt das
+                            alle versteckten Dateien ignoriert werden. Wenn dieser Wert auf
+                            <code>'tmp'</code> gesetzt wird, bedeutet das, Verzeichnisse und
+                            Dateien wie z.B. <code>'tmpImages'</code> und <code>'tmpFiles'</code>,
+                            sowie alle darunter liegenden Verzeichnisse, werden ignoriert.
+                        </entry>
+                        <entry><emphasis role="strong">.</emphasis></entry>
+                    </row>
+                    <row>
+                        <entry>log</entry>
+                        <entry>all</entry>
+                        <entry>
+                            Eine Instanz von <classname>Zend_Log</classname> wohin nicht
+                            übersetzbare Meldungen und Notizen geschrieben werden
+                        </entry>
+                        <entry><emphasis role="strong">null</emphasis></entry>
+                    </row>
+                    <row>
+                        <entry>logMessage</entry>
+                        <entry>all</entry>
+                        <entry>
+                            Die Nachricht die in das Log geschrieben werden soll
+                        </entry>
+                        <entry><emphasis role="strong">Untranslated message within '%locale%': %message%</emphasis></entry>
+                    </row>
+                    <row>
+                        <entry>logUntranslated</entry>
+                        <entry>all</entry>
+                        <entry>
+                            Wenn diese Option auf true gesetzt wird, werden alle Nachrichten Id's
+                            die nicht übersetzt werden können in das angehängte Log geschrieben
+                        </entry>
+                        <entry><emphasis role="strong">false</emphasis></entry>
+                    </row>
+                    <row>
+                        <entry>scan</entry>
+                        <entry>all</entry>
+                        <entry>
+                            Wenn null gesetzt wird, wird die Verzechnisstruktur nicht gescannt. Wenn
+                            <classname>Zend_Translate::LOCALE_DIRECTORY</classname> gesetzt wird,
+                            wird das Gebietsschema im Verzeichnis gesucht. Wenn
+                            <classname>Zend_Translate::LOCALE_FILENAME</classname> gesetzt wird,
+                            wird das Gebietsschema im Dateinamen gesucht. Siehe
+                            <xref linkend="zend.translate.using.detection" /> für Details
+                        </entry>
+                        <entry><emphasis role="strong">null</emphasis></entry>
+                    </row>
+                    <row>
+                        <entry>delimiter</entry>
+                        <entry>Csv</entry>
+                        <entry>
+                            Definiert welches Zeichen als Trenner für Quelle und Übersetzung
+                            verwendet wird
+                        </entry>
+                        <entry><emphasis role="strong">;</emphasis></entry>
+                    </row>
+                    <row>
+                        <entry>enclosure</entry>
+                        <entry>Csv</entry>
+                        <entry>
+                            Definiert die maximale Länge einer CSV Zeile. Auf 0 gesetzt wird sie
+                            automatisch erkannt
+                        </entry>
+                        <entry><emphasis role="strong">"</emphasis></entry>
+                    </row>
+                    <row>
+                        <entry>length</entry>
+                        <entry>Csv</entry>
+                        <entry>
+                            Definiert das zu verwendende Einschließungszeichen. Standard ist das
+                            doppelte Hochkomma
+                        </entry>
+                        <entry><emphasis role="strong">0</emphasis></entry>
+                    </row>
+                </tbody>
+            </tgroup>
+        </table>
+
+        <para>
+            Wenn man selbstdefinierte Optionen haben will, können diese auch in allen Adaptern
+            verwendet werden. Die <code>setOptions()</code> Methode kann verwendet werden um die
+            eigene Option zu definieren. <code>setOptions()</code> benötigt ein Array mit den
+            Optionen die gesetzt werden sollen. Wenn eine angegebene Option bereits existiert wird
+            diese überschrieben. Es können beliebig viele Optionen definiert werden da diese nicht
+            vom Adapter geprüft werden. Man muß nur Sicherstellen das keine existierende Option
+            überschrieben werden die von einem Adapter verwendet wird.
+        </para>
+
+        <para>
+            Um die Option zurückzugeben kann die Methode <code>getOptions()</code> verwendet
+            werden. Wenn <code>getOptions()</code> ohne einen Parameter aufgerufen wird, gibt Sie
+            alle Optionen zurück. Wenn der optionale Parameter angegeben wird, wird nur die
+            spezifizierte Option zurückgegeben.
+        </para>
+
+    </sect2>
+
+    <sect2 id="zend.translate.additional.languages">
+
+        <title>Mit Sprachen arbeiten</title>
+
+        <para>
+            Wenn mit verschiedenen Sprachen gearbeitet wird gibt es ein paar Methoden die nützlich
+            sind.
+        </para>
+
+        <para>
+            Die <code>getLocale()</code> Methode kann verwendet werden um die aktuell gesetzte
+            Sprache zu erhalten. Sie kann entweder eine Instanz von
+            <classname>Zend_Locale</classname> oder den Bezeichner des Gebietsschemas enthalten.
+        </para>
+
+        <para>
+            Die <code>setLocale()</code> Methode setzt eine neue Standardsprache für Übersetzungen.
+            Das verhindert das der optionale Sprachparameter der <code>translate()</code> Methode
+            mehr als einmal gesetzt werden muß. Wenn die angegebene Sprache nicht existiert, oder
+            keine Übersetzten Daten für diese Sprache vorhanden sind, versucht
+            <code>setLocale()</code> auf die Sprache ohne Region downzugraden wenn diese angegeben
+            wurde. Die Sprache <code>en_US</code> würde zum Beispiel zu <code>en</code>
+            downgegradet werden. Wenn sogar nach dem Downgraden die Sprache nicht gefunden werden
+            konnte, wird eine Ausnahme geworfen.
+        </para>
+
+        <para>
+            Die <code>isAvailable()</code> Methode prüft ob eine angegebene Sprache bereits
+            vorhanden ist. Es wird <constant>TRUE</constant> zurückgegeben wenn Daten für die
+            angegebene Sprache existieren.
+        </para>
+
+        <para>
+            Und letztendlich kann die <code>getList()</code> Methode verwendet werden um alle
+            aktuell gesetzten Sprachen für einen Adapter als Array zu erhalten.
+        </para>
+
+        <example id="zend.translate.additional.languages.example">
+            <title>Handhabung von Sprachen mit Adaptern</title>
+            <programlisting role="php"><![CDATA[
+// gibt die aktuell gesetzte Sprache zurück
+$actual = $translate->getLocale();
+
+// der optionale Parameter kann wärend der Übersetzung verwendet werden
+echo $translate->_("my_text", "fr");
+// oder setze eine neue Standardsprache
+$translate->setLocale("fr");
+echo $translate->_("my_text");
+// zur Basissprache referieren
+// fr_CH wird zu fr downgegradet
+$translate->setLocale("fr_CH");
+echo $translate->_("my_text");
+
+// Prüft ob die Sprache existiert
+if ($translate->isAvailable("fr")) {
+    // Sprache existiert
+}
+]]></programlisting>
+        </example>
+
+        <sect3 id="zend.translate.additional.languages.automatic">
+
+            <title>Automatische Handhabung von Sprachen</title>
+
+            <para>
+                Es gilt zu beachten das, solange man neue Sprachquellen mit der
+                <code>addTranslation()</code> Methode hinzufügt,
+                <classname>Zend_Translate</classname> automatisch die am besten passende Sprache für
+                die eigene Umgebung auswählt wenn man eine der automatischen Gebietsschemata
+                verwendet die '<code>auto</code>' oder '<code>browser</code>' sein können. Man muß
+                normalerweise also <code>setLocale()</code> nicht aufrufen. Das sollte nur in
+                Verbindung mit der automatischen Erkennung von Quellen verwendet werden.
+            </para>
+
+            <para>
+                Der Algorithmus sucht nach dem am besten passenden Gebietsschema abhängig vom
+                Browser des Benutzers und der eigenen Umgebung. Siehe das folgende Beispiel für
+                Details:
+            </para>
+
+            <example id="zend.translate.additional.languages.automatic.example">
+                <title>Automatische Erkennen der Sprache</title>
+                <programlisting role="php"><![CDATA[
+// Angenommen der Browser gibt folgende Spracheneinstellungen zurück:
+// HTTP_ACCEPT_LANGUAGE = "de_AT=1;fr=1;en_US=0.8";
+
+// Beispiel 1:
+// Wenn keine passende Sprache gefunden wird, wird die MessageID zurückgegeben
+$translate = new Zend_Translate(
+    'gettext',
+    'my_it.mo',
+    'auto',
+    array('scan' => Zend_Translate::LOCALE_FILENAME));
+
+// Beispiel 2:
+// Die am besten passende Sprache ist 'fr'
+$translate = new Zend_Translate(
+    'gettext',
+    'my_fr.mo',
+    'auto',
+    array('scan' => Zend_Translate::LOCALE_FILENAME));
+
+// Beispiel 3:
+// Die am besten passende Sprache ist 'de' ('de_AT' wird degradiert)
+$translate = new Zend_Translate(
+    'gettext',
+    'my_de.mo',
+    'auto',
+    array('scan' => Zend_Translate::LOCALE_FILENAME));
+
+// Beispiel 4:
+// Gibt 'it' als Übersetzungsquelle zurück und überschreibt
+// die automatischen Eigenschaften
+$translate = new Zend_Translate(
+    'gettext',
+    'my_it.mo',
+    'auto',
+    array('scan' => Zend_Translate::LOCALE_FILENAME));
+
+$translate->addTranslation('my_ru.mo', 'ru');
+$translate->setLocale('it_IT');
+]]></programlisting>
+            </example>
+
+            <para>
+                Nachdem eine Sprache per Hand mit der <code>setLocale()</code> Methode gesetzt
+                wurde, wird die automatische Erkennung ausgeschaltet und übergangen.
+            </para>
+
+            <para>
+                Wenn man Sie wieder verwenden will, kann die Sprache
+                <emphasis>auto</emphasis> mit <code>setLocale()</code> gesetzt
+                werden, was die automatische Erkennung für <classname>Zend_Translate</classname>
+                wieder reaktiviert.
+            </para>
+
+            <para>
+                Seit dem Zend Framework 1.7.0 unterstützt <classname>Zend_Translate</classname> auch
+                die Verwendung eines Anwendungsweiten Gebietsschemas. Man kann einfach eine
+                <classname>Zend_Locale</classname> Instanz in der Registry setzen wie unten gezeigt.
+                Mit dieser Schreibweise kann man das manuelle Setzen eines Gebietsschemas mit jeder
+                Instanz komplett vergessen wenn man das gleiche Gebietsschema mehrere Male
+                verwenden will.
+            </para>
+
+            <programlisting role="php"><![CDATA[
+// In der Bootstrap Datei
+$locale = new Zend_Locale();
+Zend_Registry::set('Zend_Locale', $locale);
+
+// Standardsprache wenn die angefragte Sprache nicht vorhanden ist
+$defaultlanguage = 'en';
+
+// Irgendwo in der Anwendung
+$translate = new Zend_Translate('gettext', 'my_de.mo');
+
+if (!$translate->isAvailable($locale->getLanguage())) {
+    // Nicht vorhandene Sprache werden auf eine andere Sprache geroutet
+    $translate->setLocale($defaultlanguage);
+}
+
+$translate->getLocale();
+]]></programlisting>
+
+        </sect3>
+
+    </sect2>
+
+    <sect2 id="zend.translate.additional.detection">
+
+        <title>Automatische Erkennung von Quellen</title>
+
+        <para>
+            <classname>Zend_Translate</classname> kann Übersetzungsquellen automatisch erkennen. Es
+            muß also nicht jede Quelldatei manuell deklariert werden. Man kann diesen Job
+            <classname>Zend_Translate</classname> überlassen welches die komplette
+            Verzeichnisstruktur nach Quelldateien durchsucht.
+        </para>
+
+        <note>
+            <para>
+                Automatische Erkennung der Quellen ist seit Zend Framework Version 1.5 vorhanden.
+            </para>
+        </note>
+
+        <para>
+            Die Verwendung ist fast die selbe wie bei der Initiierung einer einzelnen
+            Übersetzungsquelle mit einem Unterschied. Es darf nur ein Verzeichnis angegeben werden,
+            statt einer Datei, welches gescannt werden soll.
+        </para>
+
+        <example id="zend.translate.additional.languages.directory.example">
+            <title>Scannen nach Quellen in einer Verzeichnisstruktur</title>
+            <programlisting role="php"><![CDATA[
+// Angenommen wir haben die folgende Struktur
+//  /language/
+//  /language/login/login.tmx
+//  /language/logout/logout.tmx
+//  /language/error/loginerror.tmx
+//  /language/error/logouterror.tmx
+
+$translate = new Zend_Translate('tmx', '/language');
+]]></programlisting>
+        </example>
+
+        <para>
+            <classname>Zend_Translate</classname> muß also nicht nur das angegebene Verzeichnis
+            durchsuchen, sondern auch alle Unterverzeichnisse nach Dateien für Übersetzungen. Das
+            macht die Verwendung sehr einfach. Aber <classname>Zend_Translate</classname> wird alle
+            Dateien ignorieren, welche keine Quellen sind, oder wärend des Einlesens der
+            Übersetzungsdaten Fehler produzieren. Man sollte also sicherstellen das alle
+            Übersetzungsquellen korrekt sind und gelesen werden können weil man keinen Fehler erhält
+            wenn eine Datei fehlerhaft ist oder nicht gelesen werden kann.
+        </para>
+
+        <note>
+            <para>
+                Abhängig davon wie tief die Verzeichnisstruktur ist und wieviele Dateien innerhalb
+                dieser Struktur vorhanden sind, kann es eine sehr lange Zeit dauern bis
+                <classname>Zend_Translate</classname> fertig ist.
+            </para>
+        </note>
+
+        <para>
+            In unserem Beispiel haben wir das TMX Format verwendet welches die Sprache enthält die
+            innerhalb der Quelle verwendet wird. Aber viele der anderen Quellformate sind nicht
+            dazu fähig die Sprache in der Datei selbst zu inkludieren. Aber auch diese quellen
+            können mit der automatischen Erkennung verwendet werden wenn ein paar Dinge
+            berücksichtigt werden die anbei beschrieben sind:
+        </para>
+
+        <sect3 id="zend.translate.additional.detection.directory">
+
+            <title>Sprachen durch die Benennung von Verzeichnissen</title>
+
+            <para>
+                Ein Weg, die automatische Spracherkennung zu inkludieren, ist es die Verzeichnisse
+                relativ zur Sprache zu benennen, welche in den Quellen des betreffenden
+                Verzeichnisses verwendet wird. Das ist der einfachste Weg und wird zum Beispiel in
+                Standard Gettext Implementationen verwendet.
+            </para>
+
+            <para>
+                <classname>Zend_Translate</classname> benötigt die '<code>scan</code>' Option um zu
+                wissen das es die Namen aller Verzeichnisse nach Sprachen durchsuchen soll. Siehe
+                das folgende Beispiel für Details:
+            </para>
+
+            <example id="zend.translate.additional.detection.directory.example">
+                <title>Verzeichnisse nach Sprachen durchsuchen</title>
+                <programlisting role="php"><![CDATA[
+// Angenommen wir haben die folgende Struktur
+//  /language/
+//  /language/de/login/login.mo
+//  /language/de/error/loginerror.mo
+//  /language/en/login/login.mo
+//  /language/en/error/loginerror.mo
+
+$translate = new Zend_Translate(
+    'gettext',
+    '/language',
+    null,
+    array('scan' => Zend_Translate::LOCALE_DIRECTORY));
+]]></programlisting>
+            </example>
+
+            <note>
+                <para>
+                    Das funktioniert nur für Adapter die die Sprache nicht in der Quelldatei
+                    enthalten. Die Verwendung dieser Option wird zum Beispiel mit TMX ignoriert.
+                    Sprachdefinitionen im Dateinamen werden bei der Verwendung dieser Option
+                    ignoriert.
+                </para>
+            </note>
+
+            <note>
+                <para>
+                    Man sollte acht geben wenn man verschiedenen Unterverzeichnisse in der gleichen
+                    Struktur hat. Angenommen wir haben eine Struktur wie
+                    <code>/language/module/de/en/file.mo</code>. In diesem Fall enthält der Pfad
+                    mehrere Strings die als Gebietsschema erkannt werden würden. Das könnte
+                    entweder <code>de</code> oder <code>en</code> sein. In solch einem Fall ist das
+                    Verhalten nicht definiert und es wird empfohlen die Dateierkennung zu
+                    verwenden.
+                </para>
+            </note>
+
+        </sect3>
+
+        <sect3 id="zend.translate.additional.detection.filename">
+
+            <title>Sprache durch Dateinamen</title>
+
+            <para>
+                Ein anderer Weg um die Sprache automatisch zu erkennen ist die Verwendung von
+                speziellen Dateienamen. Man kann entweder die komplette Datei oder Teile der
+                Datei nach der verwendeten Sprache benennen. Um diese Option zu Verwenden muß die
+                '<code>scan</code>' Option bei der Initiierung gesetzt werden. Es gibt verschiedene
+                Wege die Quelldateien zu benennen welche im folgenden beschrieben werden:
+            </para>
+
+            <example id="zend.translate.additional.detection.filename.example">
+                <title>Suchen nach Sprachen im Dateinamen</title>
+                <programlisting role="php"><![CDATA[
+// Angenommen wir haben die folgende Struktur
+//  /language/
+//  /language/login/login_en.mo
+//  /language/login/login_de.mo
+//  /language/error/loginerror_en.mo
+//  /language/error/loginerror_de.mo
+
+$translate = new Zend_Translate(
+    'gettext',
+    '/language',
+    null,
+    array('scan' => Zend_Translate::LOCALE_FILENAME));
+]]></programlisting>
+            </example>
+
+            <sect4 id="zend.translate.additional.detection.filename.complete">
+
+                <title>Komplette Dateinamen</title>
+
+                <para>
+                    Die komplette Datei nach der Sprache zu benennen ist der einfachste Weg, aber
+                    nur praktikabel wenn man nur eine Datei pro Verzeichnis verwendet.
+                </para>
+
+                <programlisting><![CDATA[
+/languages/
+/languages/en.mo
+/languages/de.mo
+/languages/es.mo
+]]></programlisting>
+
+            </sect4>
+
+            <sect4 id="zend.translate.additional.detection.filename.extension">
+
+                <title>Erweiterung der Datei</title>
+
+                <para>
+                    Ein anderer einfacher Weg ist die Verwendung der Dateiextension für die
+                    Spracherkennung. Aber das kann verwirrend sein weil man keine Idee mehr hat
+                    welche Erweiterung die Datei ursprünglich hatte.
+                </para>
+
+                <programlisting><![CDATA[
+/languages/
+/languages/view.en
+/languages/view.de
+/languages/view.es
+]]></programlisting>
+
+            </sect4>
+
+            <sect4 id="zend.translate.additional.detection.filename.token">
+
+                <title>Teile von Dateinamen</title>
+
+                <para>
+                    <classname>Zend_Translate</classname> kann die Sprache auch erkennen wenn Sie im
+                    Dateinamen enthalten ist. Aber wenn man diesen Weg nimmt, muß die Sprache mit
+                    einem Trennzeichen seperiert werden. Es gibt drei unterstützte Trennzeichen
+                    welche verwendet werden können. Ein Punkt '.', ein Unterstrich '_', oder ein
+                    Bindestrich '-'.
+                </para>
+
+                <programlisting><![CDATA[
+/languages/
+/languages/view_en.mo -> erkennt englisch
+/languages/view_de.mo -> erkennt deutsch
+/languages/view_it.mo -> erkennt italienisch
+]]></programlisting>
+
+                <para>
+                    Das erste gefundene String der von einem Trennzeichen getrennt wird das als
+                    Gebietsschema interpretiert werden kann, wird verwendet. Siehe das folgende
+                    Beispiel für Details.
+                </para>
+
+                <programlisting><![CDATA[
+/languages/
+/languages/view_en_de.mo -> erkennt englisch
+/languages/view_en_es.mo -> erkennt englisch und überschreibt die erste Datei
+/languages/view_it_it.mo -> erkennt italienisch
+]]></programlisting>
+
+                <para>
+                    Alle drei Trennzeichen werden verwendet um das Gebietsschema zu erkennen. Wenn
+                    der Dateiname mehrere Trennzeichen enthält, hängt das erste gefundene
+                    Trennzeichen von der Reihenfolge der Trennzeichen ab die verwendet werden.
+                    Siehe das folgende Beispiel für Details.
+                </para>
+
+                <programlisting><![CDATA[
+/languages/
+/languages/view_en-it.mo -> erkennt englisch weil '_' vor '-' verwendet wird
+/languages/view-en_it.mo -> erkennt italienisch weil '_' vor '-' verwendet wird
+/languages/view_en.it.mo -> erkennt italienisch weil '.' vor '_' verwendet wird
+]]></programlisting>
+
+            </sect4>
+
+        </sect3>
+
+    </sect2>
+
+    <sect2 id="zend.translate.additional.istranslated">
+
+        <title>Prüfen von Übersetzungen</title>
+
+        <para>
+            Normalerweise wird Text ohne Berechnungen übersetzt. Aber manchmal ist es notwendig
+            zu wissen, ob ein Text in der Quelle übersetzt ist oder nicht, und hierfür kann die
+            Methode <code>isTranslated()</code> verwendet werden.
+        </para>
+
+        <para>
+            <code>isTranslated($messageId, $original = false, $locale = null)</code> nimmt den Text
+            bzw die Id von der man wissen will ob sie Übersetzbar ist, als ersten Parameter, und
+            als optionalen dritten Parameter das Gebietsschema für das man die Prüfung durchführen
+            will. Der optionale zweite Parameter definiert ob die Übersetzung fix für die
+            definierte Sprache ist oder ob ein kleineres Set von Übersetzungen verwendet werden
+            kann. Wenn ein Text, welcher für 'en' zurückgegeben werden kann, aber nicht für
+            'en_US', dann wird die Übersetzung normalerweise zurückgegeben, aber wenn
+            <code>$original</code> auf true gesetzt ist, gibt die <code>isTranslated()</code>
+            Methode in solche Fällen false zurück.
+        </para>
+
+        <example id="zend.translate.additional.istranslated.example">
+            <title>Prüfen ob ein Text übersetzbar ist</title>
+            <programlisting role="php"><![CDATA[
+$english = array(
+    'message1' => 'Nachricht 1',
+    'message2' => 'Nachricht 2',
+    'message3' => 'Nachricht 3');
+
+$translate = new Zend_Translate('array', $english, 'de_AT');
+
+if ($translate->isTranslated('message1')) {
+    print "'message1' kann übersetzt werden";
+}
+
+if (!($translate->isTranslated('message1', true, 'de'))) {
+    print "'message1' kann nicht in 'de' übersetzt werden da es "
+        . "nur in 'de_AT' vorhanden ist";
+}
+
+if ($translate->isTranslated('message1', false, 'de')) {
+    print "'message1' kann in 'de_AT' übersetzt werden "
+        . "da es zu 'de' zurückfällt";
+}
+]]></programlisting>
+        </example>
+
+    </sect2>
+
+    <sect2 id="zend.translate.additional.logging">
+
+        <title>Wie können nicht gefundene Übersetzungen geloggt werden</title>
+
+        <para>
+            Wenn man eine größere Site hat, oder man die Übersetzungsdateien manuell erstellt hat
+            man oft das Problem das einige Meldungen nicht übersetzt werden. Aber es gibt eine
+            einfache Lösung wenn man <classname>Zend_Translate</classname> verwendet.
+        </para>
+
+        <para>
+            Man muß den folgenden zwei oder drei einfachen Schritten folgen. Erstens, muß man eine
+            Instanz von <classname>Zend_Log</classname> erstellen. Und dann muß man diese Instanz an
+            <classname>Zend_Translate</classname> übergeben. Siehe das folgende Beispiel:
+        </para>
+
+        <example id="zend.translate.additional.logging.example">
+            <title>Übersetzungen loggen</title>
+            <programlisting role="php"><![CDATA[
+$translate = new Zend_Translate('gettext', $path, 'de');
+
+// Eine Log Instanz erstellen
+$writer = new Zend_Log_Writer_Stream('/path/to/file.log');
+$log    = new Zend_Log($writer);
+
+// Diese der Übersetzungs-Instanz hinzufügen
+$translate->setOptions(array(
+    'log'             => $log,
+    'logUntranslated' => true));
+
+$translate->translate('unbekannter String');
+]]></programlisting>
+        </example>
+
+        <para>
+            Jetzt steht im Log eine neue Notiz:
+            <code>Untranslated message within 'de': unbekannter String</code>.
+        </para>
+
+        <note>
+            <para>
+                Man sollte beachten das jede Übersetzung die nicht gefunden wird mitgeloggt wird.
+                Das bedeutet alle Übersetzungen wenn ein Benutzer eine nicht unterstützte Sprache
+                anfragt. Aber auch jede Anfrage für eine Nachricht die nicht übersetzt werden kann
+                wird mitgeloggt. Es ist zu beachten das, 100 Personen die die gleiche Übersetzung
+                anfragen, auch zu 100 geloggten Notizen führen.
+            </para>
+        </note>
+
+        <para>
+            Dieses Feature kann nicht nur verwendet werden um Nachrichten zu Loggen sondern auch um
+            diese nicht übersetzen Nachrichten in eine leere Übersetzungsdatei zu schreiben. Um das
+            zu ermöglichen muß man seinen eigenen Log Writer erstellen der das Format schreibt das
+            man haben will und das führende "Untranslated message" herausschneidet.
+        </para>
+
+        <para>
+            Wenn man seine eigene Logmeldung haben will, kann man auch die Option
+            '<code>logMessage</code>' setzen. Das '<code>%message%</code>' Token ist für die
+            Platzierung der messageId in der eigenen Logmeldung zu verwenden, und das
+            '<code>%locale%</code>' Token für das angefragte Gebietsschema. Siehe das folgende
+            Beispiel für ein Beispiel einer selbst definierten Logmeldung:
+        </para>
+
+        <example id="zend.translate.additional.logging.example2">
+            <title>Selbstdefinierte Logmeldungen</title>
+            <programlisting role="php"><![CDATA[
+$translate = new Zend_Translate('gettext', $path, 'de');
+
+// Eine Loginstanz erstellen
+$writer = new Zend_Log_Writer_Stream('/path/to/file.log');
+$log    = new Zend_Log($writer);
+
+// Diese der Übersetzungsinstanz hinzufügen
+$translate->setOptions(array(
+    'log'             => $log,
+    'logMessage'      => "Fehlende '%message%' im Gebietsschema '%locale%'",
+    'logUntranslated' => true));
+
+$translate->translate('unknown string');
+]]></programlisting>
+        </example>
+
+    </sect2>
+
+    <sect2 id="zend.translate.additional.sourcedata">
+
+        <title>Zugang zu Quelldaten</title>
+
+        <para>
+            Manchmal ist es nützlich, Zugang zu den übersetzten Quelldaten zu erhalten. Hierfür
+            werden die folgenden zwei Methoden angeboten.
+        </para>
+
+        <para>
+            Die <code>getMessageIds($locale = null)</code> Methode gibt alle bekannten Ids für
+            Übersetzungen als Array zurück.
+        </para>
+
+        <para>
+            Die <code>getMessages($locale = null)</code> Methode gibt die komplette
+            Übersetzungs-Quelle als Array zurück. Die Ids der Übersetzungen werden als Schlüssel
+            und die Übersetzten Daten als Wert verwendet.
+        </para>
+
+        <para>
+            Beide Methoden akzeptieren einen optionalen Parameter <code>$locale</code> welcher,
+            wenn er gesetzt wird, die Übersetzungsdaten für die spezifizierte Sprache, zurückgibt.
+            Wenn dieser Parameter nicht angegeben wird, wird die aktuell gesetzte Sprache
+            verwendet. Es ist zu beachten das normalerweise alle Übersetzungen in allen Sprachen
+            vorhanden sein sollten. Das bedeutet das man in einer normalen Situation diesen
+            Parameter nicht angeben muß.
+        </para>
+
+        <para>
+            Zusätzlich kann die <code>getMessages()</code> Methode verwendet werden um das
+            komplette Übersetzungsverzeichnis, mit dem Pseudo-Gebietsschema 'all', zurückgeben.
+            Das gibt alle vorhandenen Übersetzungsdaten für jedes hinzugefügte Gebietsschema
+            zurück.
+        </para>
+
+        <note>
+            <para>
+                Achtung: Das zurückgegebene Array kann
+                <emphasis>sehr groß</emphasis> sein, abhängig von der Anzahl an
+                hinzugefügten Gebietsschemata und der Anzahl an Übersetzungsdaten.
+            </para>
+        </note>
+
+        <example id="zend.translate.additional.sourcedata.example">
+            <title>Handhabung von Quelldaten</title>
+            <programlisting role="php"><![CDATA[
+// gibt alle bekannten Übersetzungs Ids zurück
+$messageIds = $translate->getMessageIds();
+print_r($messageIds);
+
+// oder nur die spezifizierte Sprache
+$messageIds = $translate->getMessageIds('en_US');
+print_r($messageIds);
+
+// gibt die kompletten Übersetzungs Daten zurück
+$source = $translate->getMessages();
+print_r($source);
+]]></programlisting>
+        </example>
+
+    </sect2>
+
+</sect1>
+<!--
+vim:se ts=4 sw=4 et:
+-->

+ 293 - 0
documentation/manual/de/module_specs/Zend_Translate-Plurals.xml

@@ -0,0 +1,293 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 16883 -->
+<!-- Reviewed: no -->
+<sect1 id="zend.translate.plurals">
+
+    <title>Plural notations for Translation</title>
+
+    <para>
+        As of Zend Framework 1.9, <classname>Zend_Translate</classname> is able to provide plural
+        support. Professional translation will always have the need to use plurals as they are
+        native in almost all languages.
+    </para>
+
+    <para>
+        So what are plurals? Generally spoken plurals are words which take into account numeric
+        meanings. But as you may imaging each language has it's own definition of plurals.
+        English, for example, supports one plural. We have a singular definition, for example
+        "car", which means implicit one car, and we have the plural definition, "cars" which could
+        mean more than one car but also zero cars. Other languages like russian or polish have
+        more plurals and also the rules for plurals are different.
+    </para>
+
+    <para>
+        When you want to use plurals with <classname>Zend_Translate</classname> you must not need
+        to know how the plurals are defined, only the translator must know as he does the
+        translation. The only information you need to have is the language.
+    </para>
+
+    <para>
+        There are two way for using plurals... the traditional one, which means that you use a own
+        method, and a modern one, which allows you to do plural translations with the same method
+        as normal translations.
+    </para>
+
+    <sect2 id="zend.translate.plurals.traditional">
+
+        <title>Traditional plural translations</title>
+
+        <para>
+            People who worked with gettext in past will be more common with traditional plural
+            translations. There is a own <methodname>plural()</methodname> method which can be
+            used for plural translations.
+        </para>
+
+        <example id="zend.translate.plurals.traditional.example1">
+
+            <title>Example of traditional plural translations</title>
+
+            <para>
+                The <methodname>plural()</methodname> method accepts 4 parameters. The first
+                parameter is the singular messageId, the second is the plural messageId and the
+                third is the number or amount.
+            </para>
+
+            <para>
+                The number will be used to detect the plural which has to be returned. A optional
+                forth parameter can be used to give a locale which will be used to return the
+                translation.
+            </para>
+
+            <programlisting role="php"><![CDATA[
+$translate = new Zend_Translate('gettext', '/path/to/german.mo', 'de');
+$translate->plural('Car', 'Cars', $number);
+]]></programlisting>
+
+        </example>
+
+    </sect2>
+
+    <sect2 id="zend.translate.plurals.modern">
+
+        <title>Modern plural translations</title>
+
+        <para>
+            As traditional plural translations are restricted to source code using english plurals
+            we added a new way for plural translations. It allows to use the same
+            <methodname>translate()</methodname> for standard and for plural translations.
+        </para>
+
+        <para>
+            To use plural translations with <methodname>translate()</methodname> you need to give
+            an array as messageId instead of an string. This array must have the original plural
+            messageId's, then the amount and at last an optional locale when your given messageId's
+            are not in english notation.
+        </para>
+
+        <example id="zend.translate.plurals.modern.example1">
+
+            <title>Example of modern plural translations</title>
+
+            <para>
+                When we want to translate the same plural definitions like in the previous our
+                example would have to be defined like below.
+            </para>
+
+            <programlisting role="php"><![CDATA[
+$translate = new Zend_Translate('gettext', '/path/to/german.mo', 'de');
+$translate->translate(array('Car', 'Cars', $number));
+]]></programlisting>
+
+        </example>
+
+        <para>
+            Using modern plural translations it is also possible to use any language as source
+            for messageId's.
+        </para>
+
+        <example id="zend.translate.plurals.modern.example2">
+
+            <title>Example of modern plural translations using a different source language</title>
+
+            <para>
+                Let's expect we want to use russian and let's also expect that the given
+                messageId's are russian and not english.
+            </para>
+
+            <programlisting role="php"><![CDATA[
+$translate = new Zend_Translate('gettext', '/path/to/german.mo', 'de');
+$translate->translate(array('Car', 'Cars first plural', 'Cars second plural', $number, 'ru'));
+]]></programlisting>
+
+        </example>
+
+        <para>
+            As you can see you can give more than just the one english plural. But you must give
+            the source language in this case so <classname>Zend_Translate</classname> knows which
+            plural rules it has to apply.
+        </para>
+
+        <para>
+            When you omit the plural language then english will be used per default and any
+            additional plural definition will be ignored.
+        </para>
+
+    </sect2>
+
+    <sect2 id="zend.translate.plurals.source">
+
+        <title>Plural source files</title>
+
+        <para>
+            Not all source formats support plural forms. Look into this list for details:
+        </para>
+
+        <table id="zend.translate.plurals.source.supportedadapters">
+            <title>Plural support</title>
+            <tgroup cols="4">
+                <thead>
+                    <row>
+                        <entry>Adapter</entry>
+                        <entry>Plurals supported</entry>
+                    </row>
+                </thead>
+                <tbody>
+                    <row>
+                        <entry>Array</entry>
+                        <entry><emphasis>yes</emphasis></entry>
+                    </row>
+                    <row>
+                        <entry>Csv</entry>
+                        <entry><emphasis>yes</emphasis></entry>
+                    </row>
+                    <row>
+                        <entry>Gettext</entry>
+                        <entry><emphasis>yes</emphasis></entry>
+                    </row>
+                    <row>
+                        <entry>Ini</entry>
+                        <entry><emphasis>no</emphasis></entry>
+                    </row>
+                    <row>
+                        <entry>Qt</entry>
+                        <entry><emphasis>no</emphasis></entry>
+                    </row>
+                    <row>
+                        <entry>Tbx</entry>
+                        <entry><emphasis>no</emphasis></entry>
+                    </row>
+                    <row>
+                        <entry>Tmx</entry>
+                        <entry><emphasis>no</emphasis></entry>
+                    </row>
+                    <row>
+                        <entry>Xliff</entry>
+                        <entry><emphasis>no</emphasis></entry>
+                    </row>
+                    <row>
+                        <entry>XmlTm</entry>
+                        <entry><emphasis>no</emphasis></entry>
+                    </row>
+                </tbody>
+            </tgroup>
+        </table>
+
+        <para>
+            Below you can find examples of plural defined source files.
+        </para>
+
+        <sect3 id="zend.translate.plurals.source.array">
+
+            <title>Array source with plural definitions</title>
+
+            <para>
+                An array with plural definitions has to look like the following example.
+            </para>
+
+            <programlisting role="php"><![CDATA[
+array(
+    'plural_0' => array(
+        'plural_0 (ru)',
+        'plural_1 (ru)',
+        'plural_2 (ru)',
+        'plural_3 (ru)'
+    ),
+    'plural_1' => ''
+);
+]]></programlisting>
+
+            <para>
+                In the above example <code>plural_0</code> and <code>plural_1</code> are the
+                plural definitions from the source code. And the array at <code>plural_0</code>
+                has all translated plural forms available. Take a look at the following example
+                with real content and translation from english source to german.
+            </para>
+
+            <programlisting role="php"><![CDATA[
+array(
+    'Car' => array(
+        'Auto',
+        'Autos'
+    ),
+    'Cars' => ''
+);
+]]></programlisting>
+
+            <para>
+                When your translated language supports more plural forms then simply add them to
+                the array below the first plural form. When your source language suppors more
+                plural forms, than simply add a new empty translation.
+            </para>
+
+        </sect3>
+
+        <sect3 id="zend.translate.plurals.source.csv">
+
+            <title>Csv source with plural definitions</title>
+
+            <para>
+                A csv file with plural definitions has to look like the following example.
+            </para>
+
+            <programlisting role="php"><![CDATA[
+"plural_0";"plural_0 (ru)";"plural_1 (ru)";"plural_2 (ru)";"plural_3 (ru)"
+"plural_1";
+]]></programlisting>
+
+            <para>
+                All translated plural forms have to be added after the first plural of the source
+                language. And all further plural forms of the source language have to be added
+                below but without translation. Note that you must add a delimiter to empty
+                source plurals.
+            </para>
+
+        </sect3>
+
+        <sect3 id="zend.translate.plurals.source.gettext">
+
+            <title>Gettext source with plural definitions</title>
+
+            <para>
+                Gettext sources support plural forms out of the box. There is no need for adoption
+                as the <filename>*.mo</filename> file will contain all necessary data.
+            </para>
+
+            <note>
+
+                <para>
+                    Note that gettext does not support the usage of source languages which are not
+                    using english plural forms. When you plan to use a source language which
+                    supports other plural forms like russian for example, then you can not use
+                    gettext sources.
+                </para>
+
+            </note>
+
+        </sect3>
+
+    </sect2>
+
+</sect1>
+<!--
+vim:se ts=4 sw=4 et:
+-->

+ 100 - 105
documentation/manual/de/module_specs/Zend_Translate-SourceCreation.xml

@@ -3,32 +3,32 @@
 <!-- Reviewed: no -->
 <sect1 id="zend.translate.sourcecreation">
 
-    <title>Creating source files</title>
+    <title>Erstellen von Quelldateien</title>
 
     <para>
-        Below you will find a description of the different source formats
-        which can be used with <classname>Zend_Translate</classname>.
+        Anbei ist eine Beschreibung der unterschiedlichen Quellformate welche mit
+        <classname>Zend_Translate</classname> verwendet werden können.
     </para>
 
     <note>
         <para>
-            Note that most of the described formats should be created by using
-            a tool or a generation process. These Tools and processes are not part
-            of Zend Framework and for most of the described formats free tools
-            are available.
+            Es ist zu beachten das die meisten der beschriebenen Formate durch Verwendung eines
+            Tools oder eines Erstellungs Prozesses erstellt werden sollten. Diese Tools und
+            Prozesse sind nicht Teil vom Zend Framework und für die meisten der beschriebenen
+            Formate gibt es kostenlose Tools.
         </para>
     </note>
 
     <sect2 id="zend.translate.sourcecreation.array">
 
-        <title>Creating Array source files</title>
+        <title>Erstellung von Array Quelldateien</title>
 
         <para>
-            Array source files are plain arrays. But you have to define them
-            manually since there is no tool to aid this.
-            But because they are so simple, it's the fastest way to look up
-            messages if your code works as expected. It's generally the best
-            adapter to get started with translation business.
+            Array Quelldateien sind reine Arrays. Sie müssen aber manuell definiert werden, da
+            es hierfür keine Tools gibt die helfen könnten. Weil Sie so einfach zu handhaben sind,
+            ist Ihre Verwendung auch der schnellste Weg um zu testen ob Nachrichten innerhalb des
+            Codes wie erwartet arbeiten. Er ist generell der beste Adapter um mit Mehrsprachigkeit
+            zu beginnen wenn man keine diesbezüglichen Kenntnisse hat.
         </para>
 
         <programlisting role="php"><![CDATA[
@@ -47,9 +47,10 @@ $translate->addTranslation($deutsch, 'de');
 ]]></programlisting>
 
         <para>
-            Since release 1.5 it is also supported to have arrays included within an external file.
-            You just have to provide the filename and <classname>Zend_Translate</classname> will automatically
-            include it and look for the array. See the following example for details:
+            Seit Release 1.5 wird es auch unterstützt, Arrays die in externen Dateien vorhanden
+            sind einzubauen. Es ist der Dateiname anzugeben und
+            <classname>Zend_Translate</classname> wird diesen automatisch inkludieren und nach dem
+            Array schauen. Siehe das folgende Beispiel für Details:
         </para>
 
         <programlisting role="php"><![CDATA[
@@ -65,74 +66,67 @@ $translate = new Zend_Translate('array', '/path/to/myarray.php', 'de');
 
         <note>
             <para>
-                Files which do not return an array will fail to be included.
-                Also any output within this file will be ignored and suppressed.
+                Bei Dateien die kein Array zurückgeben wird das inkludieren fehlschlagen. Auch
+                jegliche Ausgabe innerhalb dieser Dateien wird ignoriert und unterdrückt.
             </para>
-
         </note>
-
     </sect2>
 
     <sect2 id="zend.translate.sourcecreation.gettext">
 
-        <title>Creating Gettext source files</title>
+        <title>Erstellung von Gettext Quellen</title>
 
         <para>
-            Gettext source files are created by GNU's gettext library.
-            There are several free tools available that can parse your
-            code files and create the needed gettext source files.
-            These have the extension <emphasis>*.mo</emphasis>
-            and they are binary files.
-            An open source tool for creating the files is
-            <ulink url="http://sourceforge.net/projects/poedit/">poEdit</ulink>.
-            This tool also supports you during the translation process itself.
+            Gettext Quellen werden durch GNU's Gettext Bibliothek erstellt. Es gibt einige
+            kostenlose Tools welche den Code parsen können und hierbei die gewünschten Gettext
+            Quellen erstellen. Diese haben die Endung <emphasis>*.mo</emphasis> und
+            sind binäre Dateien. Ein Open Source Tool für die Erstellung der Quellen ist
+            <ulink url="http://sourceforge.net/projects/poedit/">poEdit</ulink>. Dieses Tool
+            unterstützt auch beim Übersetzungs-Prozesses selbst.
         </para>
 
         <programlisting role="php"><![CDATA[
-// We accume that we have created the mo files and translated them
+// Wir nehmen an das die mo Datien erstellt und übersetzt wurden
 $translate = new Zend_Translate('gettext', '/path/to/english.mo', 'en');
 $translate->addTranslation('/path/to/german.mo', 'de');
 ]]></programlisting>
 
         <para>
-            As you can see the adapters are used exactly the same way,
-            with one small difference:
-            change <emphasis>array</emphasis> to <emphasis>gettext</emphasis>. All other usages are exactly
-            the same as with all other adapters.
-            With the gettext adapter you no longer have to be aware of
-            gettext's standard directory structure,
-            bindtextdomain and textdomain.
-            Just give the path and filename to the adapter.
+            Wie man sieht wird dieser Adapter auf exakt die gleiche Art und Weise verwendet mit
+            einer kleinen Änderung: dem Wechsel von <emphasis>array</emphasis> zu
+            <emphasis>gettext</emphasis>. Alle anderen Punkte werden in jedem anderen
+            Adapter auf exakt die gleiche Weise verwendet. Mit diesem Gettext Adapter muß nicht
+            mehr auf die geforderte Standard Verzeichnis Struktur von Gettext geachtet werden. Auch
+            nicht auf bindtextdomain und textdomain. Nur der Pfad und der Dateiname muß dem Adapter
+            übergeben werden.
         </para>
 
         <note>
             <para>
-                 You should always use UTF-8 as source encoding.
-                 Otherwise you will have problems when using two
-                 different source encodings.
-                 E.g. one of your source files is encoded
-                 with ISO-8815-11 and another one with CP815.
-                 You can set only one encoding for your source file,
-                 so one of your languages probably will not display correctly.
+                 Man sollte immer UTF-8 als Quell Encoding verwenden. Man könnte sonst Probleme
+                 bekommen wenn man zwei verschiedene Encodings verwendet. Wenn z.B. eine Quelldatei
+                 mit ISO-8815-11 und eine andere mit CP815 encoded ist. Man kann immer nur ein
+                 Encoding für alle Quell Dateien verwenden, und hierbei würde eine der gewünschten
+                 Sprachen nicht korrekt angezeigt werden.
             </para>
             <para>
-                 UTF-8 is a portable format which supports all languages.
-                 When using UTF-8 for all languages, you will eliminate
-                 the problem of incompatible encodings.
+                 UTF-8 ist ein portables Format welches alle Sprachen unterstützt. Wenn UTF-8 für
+                 alle Sprachen verwendet wird, eliminiert man die Probleme mit inkompatiblen
+                 Encodings.
             </para>
         </note>
 
         <para>
-            Many gettext editors add adapter informations as empty translation string.
-            This is the reason why empty strings are not translated when using the
-            gettext adapter. Instead they are erased from the translation table and
-            provided by the <code>getAdapterInfo()</code> method. It will return
-            the adapter informations for all added gettext files as array using the
-            filename as key.
+            Viele Gettext Editoren fügen Informationen über den Adapter als Übersetzung eines
+            leeren Strings hinzu. Das ist der Grund warum leere Strings nicht übersetzt werden wenn
+            der Gettext Adapter verwendet wird. Stattdessen wird er von der Übersetzungstabelle
+            gelöscht und von der <code>getAdapterInfo()</code> Methode angeboten. Sie gibt die
+            Adapterinformationen für alle hinzugefügten Gettextdateien als Array zurück wobei der
+            Dateiname als Schlüssel verwendet wird.
         </para>
 
         <programlisting role="php"><![CDATA[
-// Getting the adapter informations
+// Informationen des Adapters bekommen
 $translate = new Zend_Translate('gettext', '/path/to/english.mo', 'en');
 print_r($translate->getAdapterInfo());
 ]]></programlisting>
@@ -141,19 +135,18 @@ print_r($translate->getAdapterInfo());
 
     <sect2 id="zend.translate.sourcecreation.tmx">
 
-        <title>Creating TMX source files</title>
+        <title>Erstellung von TMX Quellen</title>
 
         <para>
-            TMX source files are a new industry standard.
-            They have the advantage of being XML files and so they are
-            readable by every editor and of course by humans.
-            You can either create TMX files manually with a text editor,
-            or you can use a special tool. But most tools currently available for
-            creating TMX source files are not freely available.
+            TMX Quellen sind der neue Industrie Standard. Sie haben den Vorteil das sie XML Dateien
+            sind und deswegen mit jedem Texteditor lesbar und natürlich auch von Menschen. Man kann
+            TMX Dateien entweder per Hand erstellen oder man verwendet spezielle Tools dafür.
+            Allerdings sind die meisten erhältlichen Tools die Erstellung von TMX Quellen nicht
+            frei erhältlich.
         </para>
 
         <example id="zend.translate.sourcecreation.tmx.example">
-            <title>Example TMX file</title>
+            <title>Beispiel einer TMX Datei</title>
             <programlisting role="xml"><![CDATA[
 <?xml version="1.0" ?>
 <!DOCTYPE tmx SYSTEM "tmx14.dtd">
@@ -179,32 +172,30 @@ $translate = new Zend_Translate('tmx', 'path/to/mytranslation.tmx', 'en');
         </example>
 
         <para>
-            TMX files can have several languages within the same file.
-            All other included languages are added automatically,
-            so you do not have to call <code>addLanguage()</code>.
+            TMX Dateien können mehrere Sprachen in der selben Datei enthalten. Alle anderen in der
+            Quelle enthaltenen Sprachen werden automatisch hinzugefügt und müssen nicht durch einen
+            extra Aufruf von <code>addLanguage()</code> ergänzt werden.
         </para>
 
         <para>
-            If you want to have only specified languages from the source translated
-            you can set the option '<code>defined_language</code>' to <constant>TRUE</constant>.
-            With this option you can add the wished languages explicitly with
-            <code>addLanguage()</code>. The default value for this option is to add all
-            languages.
+            Wenn man nur spezielle Sprache aus der Quelle übersetzen will, kann die Option
+            '<code>defined_language</code>' auf <constant>TRUE</constant> gesetzt werden. Mit dieser
+            Option können gewünschte Sprachen explizit mit <code>addLanguage()</code>
+            hinzugefügt werden. Der Standardwert für diese Option fügt alle Sprachen hinzu.
         </para>
     </sect2>
 
     <sect2 id="zend.translate.sourcecreation.csv">
 
-        <title>Creating CSV source files</title>
+        <title>Erstellung von CSV Quellen</title>
 
         <para>
-            CSV source files are small and human readable.
-            If your customers want to translate their own,
-            you will probably use the CSV adapter.
+            CSV Quellen sind sehr klein und von Menschen lesbar. Wenn ein Kunde selbst übersetzen
+            will, ist die Verwendung des CSV Adapters warscheinlich die beste Wahl.
         </para>
 
         <example id="zend.translate.sourcecreation.csv.example">
-            <title>Example CSV file</title>
+            <title>Beispiel CSV Datei</title>
             <programlisting language="txt"><![CDATA[
 #Example csv file
 message1;Nachricht1
@@ -218,31 +209,32 @@ $translate->addTranslation('path/to/other.csv', 'fr');
         </example>
 
         <para>
-            There are three different options for the CSV adapter.
-            You can set '<code>delimiter</code>', '<code>limit</code>' and
-            '<code>enclosure</code>'.
+            Es gibt drei verschiedene Optionen für den CSV Adapter. Es können
+            '<code>delimiter</code>', '<code>limit</code>' und '<code>enclosure</code>' gesetzt
+            werden.
         </para>
 
         <para>
-            The default delimiter for CSV string is '<code>;</code>', but
-            with the option '<code>delimiter</code>'
-            you can decide to use another one.
+            Das Standard Trennzeichen für CSV Strings ist '<code>;</code>, aber es muß nicht dieses
+            Zeichen sein. Mit der Option '<code>delimiter</code>' kann ein anderes verwendet
+            werden.
         </para>
 
         <para>
-            The default limit for a line within a CSV file is '<code>0</code>'. This means
-            that the end of a CSV line is searched automatically. If you set
-            '<code>limit</code>' to any value, then the CSV file will be
-            read faster, but any line exceeding this limit will be truncated.
+            Das Standardlimit für eine Zeile in einer CSV Datei ist '<code>0</code>'. Das bedeutet
+            dass das Ende der CSV Zeile automatisch gesucht wird. Wenn '<code>limit</code>' auf
+            irgendeinen Wert gesetzt wird, dann wird die CSV Datei schneller gelesen, aber jede
+            Zeile die dieses Limit überschreitet wird abgeschnitten.
         </para>
 
         <para>
-            The default enclosure to use for CSV files is '<code>"</code>'. You can
-            set a different one using the option '<code>enclosure</code>'.
+            Das standardmäßige Anführungszeichen für die Verwendung mit CSV Dateien ist
+            '<code>"</code>'. Man kann ein anderes Setzen indem die Option '<code>enclosure</code>'
+            verwendet wird.
         </para>
 
         <example id="zend.translate.sourcecreation.csv.example2">
-            <title>Second CSV file example</title>
+            <title>Zweites Beispiel für CSV Dateien</title>
             <programlisting language="txt"><![CDATA[
 # Example CSV file
 "message,1",Nachricht1
@@ -264,9 +256,9 @@ $translate->addTranslation('/path/to/other.csv', 'fr');
         <note>
 
             <para>
-                When you are using non-ASCII characters within your CSV file, like umlauts or UTF-8
-                chars, then you should always use enclosure. Omitting the enclosure can lead to
-                missing characters in your translation.
+                Wenn nicht-ASCII Zeichen in der CSV Datei verwendet werden, wie z.B. Umlaute oder
+                UTF-8 Zeichen, dann sollte man immer Hochkommas verwenden. Das Weglassen der
+                Hochkommas kann zu fehlenden Zeichen in der Übersetzung führen.
             </para>
 
         </note>
@@ -275,16 +267,16 @@ $translate->addTranslation('/path/to/other.csv', 'fr');
 
     <sect2 id="zend.translate.sourcecreation.ini">
 
-        <title>Creating INI source files</title>
+        <title>Erstellung von INI Quelldateien</title>
 
         <para>
-            INI source files are human readable but normally not very small as they also
-            include other data beside translations. If you have data which shall be
-            editable by your customers you can use the INI adapter.
+            INI Quelldateien sind menschlich lesbar aber normalerweise nicht sehr klein da Sie
+            neben der Übersetzung auch andere Daten enthalten. Wenn Sie Daten haben die von
+            Ihrem Kunden zu bearbeitet sind, verwenden Sie den INI Adapter.
         </para>
 
         <example id="zend.translate.sourcecreation.ini.example">
-            <title>Example INI file</title>
+            <title>Beispiel einer INI Datei</title>
             <programlisting language="txt"><![CDATA[
 [Test]
 ;TestPage Comment
@@ -300,14 +292,17 @@ $translate->addTranslation('/path/to/other.ini', 'it');
         </example>
 
         <para>
-            INI files have several restrictions. If a value in the ini file contains any
-            non-alphanumeric characters it needs to be enclosed in double-quotes (<code>"</code>).
-            There are also reserved words which must not be used as keys for ini files.
-            These include: <constant>NULL</constant>, <code>yes</code>, <code>no</code>, <constant>TRUE</constant>,
-            and <constant>FALSE</constant>. Values <constant>NULL</constant>, <code>no</code> and <constant>FALSE</constant> results
-            in <code>""</code>, <code>yes</code> and <constant>TRUE</constant> results in <code>1</code>. Characters <code>{}|&amp;~![()"</code> must not be used anywhere
-            in the key and have a special meaning in the value. Do not use them as it will
-            produce unexpected behaviour.
+            INI Dateien haben diverse Einschränkungen. Wenn ein Wert in einer INI Datei irgendein
+            nicht alphanummerisches Zeichen enthält, muß er in doppelte Anführungszeichen
+            (<code>"</code>) eingeklammert werden. Es gibt auch reservierte Wörter welche nicht als
+            Schlüssel für INI Dateien verwendet werden dürfen. Diese enthalten:
+            <constant>NULL</constant>, <code>yes</code>, <code>no</code>, <constant>TRUE</constant>
+            und <constant>FALSE</constant>. Die Werte <constant>NULL</constant>, <code>no</code>
+            und <constant>FALSE</constant> führen zu <code>""</code>, <code>yes</code> und
+            <constant>TRUE</constant> resultieren in <code>1</code>. Die Zeichen
+            <code>{}|&amp;~![()"</code> dürfen nirgendwo im Schlüssel verwendet werden und haben im
+            Wert eine spezielle Bedeutung. Diese sollten nicht verwendet werden da Sie zu
+            unerwartetem Verhalten führen.
         </para>
 
     </sect2>

+ 2 - 1072
documentation/manual/de/module_specs/Zend_Translate-Using.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 16458 -->
+<!-- EN-Revision: 16883 -->
 <!-- Reviewed: no -->
 <sect1 id="zend.translate.using">
 
@@ -272,7 +272,7 @@ print $translate->_(2) . "\n";
 /library/
 ]]></programlisting>
                 <para>
-                    Positiv: Übersetzungsdateien sind in der Nähr Ihrer Quelle zu finden.
+                    Positiv: Übersetzungsdateien sind in der Nähe Ihrer Quelle zu finden.
                 </para>
 
                 <para>
@@ -294,1074 +294,4 @@ print $translate->_(2) . "\n";
         </para>
 
     </sect2>
-
-    <sect2 id="zend.translate.using.source.array">
-
-        <title>Erstellung von Array Quelldateien</title>
-
-        <para>
-            Array Quelldateien sind einfache Arrays. Sie müssen aber per Hand definiert werden, da
-            es hierfür keine Tools gibt die helfen könnten. Weil Sie so einfach zu handhaben sind,
-            ist Ihre Verwendung auch der schnellste Weg um zu testen ob Nachrichten innerhalb des
-            Codes wie erwartet arbeiten. Er ist generell der beste Adapter um mit Mehrsprachigkeit
-            zu beginnen wenn man keine diesbezüglichen Kenntnisse hat.
-        </para>
-
-        <programlisting language="php"><![CDATA[
-$english = array(
-    'message1' => 'message1',
-    'message2' => 'message2',
-    'message3' => 'message3');
-
-$german = array(
-    'message1' => 'Nachricht1',
-    'message2' => 'Nachricht2',
-    'message3' => 'Nachricht3');
-
-$translate = new Zend_Translate('array', $english, 'en');
-$translate->addTranslation($deutsch, 'de');
-]]></programlisting>
-
-        <para>
-            Seit Release 1.5 wird es auch unterstützt, Arrays die in externen Dateien vorhanden
-            sind einzubauen. Es ist der Dateiname anzugeben und
-            <classname>Zend_Translate</classname> wird diesen automatisch einbauen und nach dem
-            Array schauen. Siehe das folgende Beispiel für Details:
-        </para>
-
-        <programlisting language="php"><![CDATA[
-// myarray.php
-<?php
-return array(
-    'message1' => 'Nachricht1',
-    'message2' => 'Nachricht2',
-    'message3' => 'Nachricht3');
-
-// controller
-$translate = new Zend_Translate('array', '/path/to/myarray.php', 'de');
-]]></programlisting>
-
-        <note>
-            <para>
-                Bei Dateien die kein Array zurückgeben wird das inkludieren fehlschlagen. Auch
-                jegliche Ausgabe innerhalb dieser Dateien wird ignoriert und unterdrückt.
-            </para>
-
-        </note>
-
-    </sect2>
-
-    <sect2 id="zend.translate.using.source.gettext">
-
-        <title>Erstellung von Gettext Quellen</title>
-
-        <para>
-            Gettext Quellen werden durch GNU's Gettext Bibliothek erstellt. Es gibt einige
-            kostenlose Tools welche den Code parsen können und hierbei die gewünschten Gettext
-            Quellen erstellen. Diese haben die Endung <emphasis>*.mo</emphasis> und
-            sind binäre Dateien. Ein Open Source Tool für die Erstellung der Quellen ist
-            <ulink url="http://sourceforge.net/projects/poedit/">poEdit</ulink>. Dieses Tool
-            unterstützt auch beim Übersetzungs-Prozesses selbst.
-        </para>
-
-        <programlisting language="php"><![CDATA[
-// Wir nehmen an das die mo Datien erstellt und übersetzt wurden
-$translate = new Zend_Translate('gettext', '/path/to/english.mo', 'en');
-$translate->addTranslation('/path/to/german.mo', 'de');
-]]></programlisting>
-
-        <para>
-            Wie man sieht wird dieser Adapter auf exakt die gleiche Art und Weise verwendet mit
-            einer kleinen Änderung: dem Wechsel von <emphasis>array</emphasis> zu
-            <emphasis>gettext</emphasis>. Alle anderen Punkte werden in jedem anderen
-            Adapter auf exakt die gleiche Weise verwendet. Mit diesem Gettext Adapter muß nicht
-            mehr auf die geforderte Standard Verzeichnis Struktur von Gettext geachtet werden. Auch
-            nicht auf bindtextdomain und textdomain. Nur der Pfad und der Dateiname muß dem Adapter
-            übergeben werden.
-        </para>
-
-        <note>
-            <para>
-                 Man sollte immer UTF-8 als Quell Encoding verwenden. Man könnte sonst Probleme
-                 bekommen wenn man zwei verschiedene Encodings verwendet. Wenn z.B. eine Quelldatei
-                 mit ISO-8815-11 und eine andere mit CP815 encoded ist. Man kann immer nur ein
-                 Encoding für alle Quell Dateien verwenden, und hierbei würde eine der gewünschten
-                 Sprachen nicht korrekt angezeigt werden.
-            </para>
-            <para>
-                 UTF-8 ist ein portables Format welches alle Sprachen unterstützt. Wenn UTF-8 für
-                 alle Sprachen verwendet wird, eliminiert man die Probleme mit inkompatiblen
-                 Encodings.
-            </para>
-        </note>
-
-        <para>
-            Viele Gettext Editoren fügen Informationen über den Adapter als Übersetzung eines
-            leeren Strings hinzu. Das ist der Grund warum leere Strings nicht übersetzt werden wenn
-            der Gettext Adapter verwendet wird. Stattdessen wird er von der Übersetzungstabelle
-            gelöscht und von der <code>getAdapterInfo()</code> Methode angeboten. Sie gibt die
-            Adapterinformationen für alle hinzugefügten Gettextdateien als Array zurück wobei der
-            Dateiname als Schlüssel verwendet wird.
-        </para>
-
-        <programlisting language="php"><![CDATA[
-// Informationen des Adapters bekommen
-$translate = new Zend_Translate('gettext', '/path/to/english.mo', 'en');
-print_r($translate->getAdapterInfo());
-]]></programlisting>
-
-    </sect2>
-
-    <sect2 id="zend.translate.using.source.tmx">
-
-        <title>Erstellung von TMX Quellen</title>
-
-        <para>
-            TMX Quellen sind der neue Industrie Standard. Sie haben den Vorteil das sie XML Dateien
-            sind und deswegen mit jedem Texteditor lesbar und natürlich auch von Menschen. Man kann
-            TMX Dateien entweder per Hand erstellen oder man verwendet spezielle Tools dafür.
-            Allerdings sind die meisten erhältlichen Tools die Erstellung von TMX Quellen nicht
-            frei erhältlich.
-        </para>
-
-        <example id="zend.translate.using.source.tmx.example">
-            <title>Beispiel einer TMX Datei</title>
-            <programlisting language="xml"><![CDATA[
-<?xml version="1.0" ?>
-<!DOCTYPE tmx SYSTEM "tmx14.dtd">
-<tmx version="1.4">
- <header creationtoolversion="1.0.0" datatype="winres" segtype="sentence"
-         adminlang="en-us" srclang="de-at" o-tmf="abc"
-         creationtool="XYZTool" >
- </header>
- <body>
-  <tu tuid='message1'>
-   <tuv xml:lang="de"><seg>Nachricht1</seg></tuv>
-   <tuv xml:lang="en"><seg>message1</seg></tuv>
-  </tu>
-  <tu tuid='message2'>
-   <tuv xml:lang="en"><seg>message2</seg></tuv>
-   <tuv xml:lang="de"><seg>Nachricht2</seg></tuv>
-  </tu>
-]]></programlisting>
-
-            <programlisting language="php"><![CDATA[
-$translate = new Zend_Translate('tmx', 'path/to/mytranslation.tmx', 'en');
-]]></programlisting>
-        </example>
-
-        <para>
-            TMX Dateien können mehrere Sprachen in der selben Datei enthalten. Alle anderen in der
-            Quelle enthaltenen Sprachen werden automatisch hinzugefügt und müssen nicht durch einen
-            extra Aufruf von <code>addLanguage()</code> ergänzt werden.
-        </para>
-
-        <para>
-            Wenn man nur spezielle Sprache aus der Quelle übersetzen will, kann die Option
-            '<code>defined_language</code>' auf <constant>TRUE</constant> gesetzt werden. Mit dieser
-            Option können gewünschte Sprachen explizit mit <code>addLanguage()</code>
-            hinzugefügt werden. Der Standardwert für diese Option fügt alle Sprachen hinzu.
-        </para>
-    </sect2>
-
-    <sect2 id="zend.translate.using.source.csv">
-
-        <title>Erstellung von CSV Quellen</title>
-
-        <para>
-            CSV Quellen sind sehr klein und von Menschen lesbar. Wenn ein Kunde selbst übersetzen
-            will, ist die Verwendung des CSV Adapters warscheinlich die beste Wahl.
-        </para>
-
-        <example id="zend.translate.using.source.csv.example">
-            <title>Beispiel CSV Datei</title>
-            <programlisting language="txt"><![CDATA[
-#Example csv file
-message1;Nachricht1
-message2;Nachricht2
-]]></programlisting>
-
-            <programlisting language="php"><![CDATA[
-$translate = new Zend_Translate('csv', '/path/to/mytranslation.csv', 'de');
-$translate->addTranslation('/path/to/other.csv', 'fr');
-]]></programlisting>
-        </example>
-
-        <para>
-            Es gibt drei verschiedene Optionen für den CSV Adapter. Es können
-            '<code>delimiter</code>', '<code>limit</code>' und '<code>enclosure</code>' gesetzt
-            werden.
-        </para>
-
-        <para>
-            Das Standard Trennzeichen für CSV Strings ist '<code>;</code>, aber es muß nicht dieses
-            Zeichen sein. Mit der Option '<code>delimiter</code>' kann ein anderes verwendet
-            werden.
-        </para>
-
-        <para>
-            Das Standardlimit für eine Zeile in einer CSV Datei ist '<code>0</code>'. Das bedeutet
-            dass das Ende der CSV Zeile automatisch gesucht wird. Wenn '<code>limit</code>' auf
-            irgendeinen Wert gesetzt wird, dann wird die CSV Datei schneller gelesen, aber jede
-            Zeile die dieses Limit überschreitet wird abgeschnitten.
-        </para>
-
-        <para>
-            Das standardmäßige Anführungszeichen für die Verwendung mit CSV Dateien ist
-            '<code>"</code>'. Man kann ein anderes Setzen indem die Option '<code>enclosure</code>'
-            verwendet wird.
-        </para>
-
-        <example id="zend.translate.using.source.csv.example2">
-            <title>Zweites Beispiel für CSV Dateien</title>
-            <programlisting language="txt"><![CDATA[
-# Example CSV file
-"message,1",Nachricht1
-message2,"Nachricht,2"
-"message3,",Nachricht3
-]]></programlisting>
-
-            <programlisting language="php"><![CDATA[
-$translate = new Zend_Translate(
-    'csv',
-    '/path/to/mytranslation.csv',
-    'de',
-    array('delimiter' => ','));
-
-$translate->addTranslation('/path/to/other.csv', 'fr');
-]]></programlisting>
-        </example>
-
-    </sect2>
-
-    <sect2 id="zend.translate.using.source.ini">
-
-        <title>Erstellung von INI Quelldateien</title>
-
-        <para>
-            INI Quelldateien sind menschlich lesbar aber normalerweise nicht sehr klein da Sie
-            neben der Übersetzung auch andere Daten enthalten. Wenn Sie Daten haben die von
-            Ihrem Kunden zu bearbeitet sind, verwenden Sie den INI Adapter.
-        </para>
-
-        <example id="zend.translate.using.source.ini.example">
-            <title>Beispiel einer INI Datei</title>
-            <programlisting language="txt"><![CDATA[
-[Test]
-;TestPage Comment
-Message_1="Nachricht 1 (de)"
-Message_2="Nachricht 2 (de)"
-Message_3="Nachricht :3 (de)"
-]]></programlisting>
-
-            <programlisting language="php"><![CDATA[
-$translate = new Zend_Translate('ini', '/path/to/mytranslation.ini', 'de');
-$translate->addTranslation('/path/to/other.ini', 'it');
-]]></programlisting>
-        </example>
-
-        <para>
-            INI Dateien haben diverse Einschränkungen. Wenn ein Wert in einer INI Datei irgendein
-            nicht alphanummerisches Zeichen enthält, muß er in doppelte Anführungszeichen
-            (<code>"</code>) eingeklammert werden. Es gibt auch reservierte Wörter welche nicht als
-            Schlüssel für INI Dateien verwendet werden dürfen. Diese enthalten:
-            <constant>NULL</constant>, <code>yes</code>, <code>no</code>, <constant>TRUE</constant>
-            und <constant>FALSE</constant>. Die Werte <constant>NULL</constant>, <code>no</code>
-            und <constant>FALSE</constant> führen zu <code>""</code>, <code>yes</code> und
-            <constant>TRUE</constant> resultieren in <code>1</code>. Die Zeichen
-            <code>{}|&amp;~![()"</code> dürfen nirgendwo im Schlüssel verwendet werden und haben im
-            Wert eine spezielle Bedeutung. Diese sollten nicht verwendet werden da Sie zu
-            unerwartetem Verhalten führen.
-        </para>
-
-    </sect2>
-
-    <sect2 id="zend.translate.using.options">
-
-        <title>Optionen für Adapter</title>
-
-        <para>
-            Optionen können bei allen Adaptoren verwendet werden. Natürlich sind die Optionen für
-            alle Adaptoren verschieden. Die Optionen können bei Erstellung des Objekts miterstellt
-            werden. Zur Zeit gibt es nur eine Option die für alle Adaptoren verfügbar ist:
-            '<code>clear</code>' setzt, ob die neuen Übersetzungsdaten zu den bestehenden
-            hinzugefügt werden sollen oder ob Sie diese überschreiben. Das Standardverhalten ist
-            das Hinzufügen von neuen Übersetzungsdaten zu den Bestehenden. Aber das wird immer nur
-            für die aktuelle Sprache gemacht. Anderen Sprachen bleiben davon unberührt.
-        </para>
-
-        <para>
-            Man kann Optionen temporär setzen indem man die Funktion
-            <code>addTranslation($data, $locale, array $options = array())</code> als dritten und
-            optionalen Parameter benutzt. Ausserdem kann die Methode <code>setOptions()</code>
-            benutzt werden um Optionen permanent zu setzen.
-        </para>
-
-        <example id="zend.translate.using.options.example">
-            <title>Benutzen von Übersetzungsoptionen</title>
-            <programlisting language="php"><![CDATA[
-// Definiere ':' als Trenner für die Quelldatei der Übersetzung
-$options = array('delimiter' => ':');
-$translate = new Zend_Translate(
-    'csv',
-    '/path/to/mytranslation.csv',
-    'de',
-    $options);
-
-...
-
-// Lösche die definierte Sprache und verwende die neuen Übersetzungsdaten
-$options = array('clear' => true);
-$translate->addTranslation('/path/to/new.csv', 'fr', $options);
-]]></programlisting>
-        </example>
-
-        <para>
-            Hier können alle vorhandenen Optionen für die verschiedenen Adapter gefunden werden mit
-            einer Beschreibung Ihrer Verwendung:
-        </para>
-
-        <table id="zend.translate.using.options.alloptions">
-            <title>Optionen für Übersetzungs-Adapter</title>
-            <tgroup cols="4">
-                <thead>
-                    <row>
-                        <entry>Option</entry>
-                        <entry>Adapter</entry>
-                        <entry>Beschreibung</entry>
-                        <entry>Standardwert</entry>
-                    </row>
-                </thead>
-                <tbody>
-                    <row>
-                        <entry>clear</entry>
-                        <entry>all</entry>
-                        <entry>
-                            Wenn true gesetzt wird, werden bereits gelesene Übersetzungen entfernt.
-                            Das kann statt dem Erstellen einer neuen Instanz verwendet werden wenn
-                            neue Übersetzungsdaten gelesen werden
-                        </entry>
-                        <entry><emphasis>false</emphasis></entry>
-                    </row>
-                    <row>
-                        <entry>disableNotices</entry>
-                        <entry>all</entry>
-                        <entry>
-                            Wenn es auf true gesetzt wird, werden alle Notizen betreffend nicht
-                            vorhandenen Übersetzungen ausgeschaltet. Man sollte diese Option in
-                            einer Produktionsumgebung auf true setzen
-                        </entry>
-                        <entry><emphasis>false</emphasis></entry>
-                    </row>
-                    <row>
-                        <entry>ignore</entry>
-                        <entry>all</entry>
-                        <entry>
-                            Alle Verzeichnisse und Dateien die mit diesem Präfix beginnen werden
-                            bei der Suche nach Dateien ignoriert. Der Standardwert ist
-                            <emphasis>'.'</emphasis> was zu dem Verhalten führt das
-                            alle versteckten Dateien ignoriert werden. Wenn dieser Wert auf
-                            <code>'tmp'</code> gesetzt wird, bedeutet das, Verzeichnisse und
-                            Dateien wie z.B. <code>'tmpImages'</code> und <code>'tmpFiles'</code>,
-                            sowie alle darunter liegenden Verzeichnisse, werden ignoriert.
-                        </entry>
-                        <entry><emphasis>.</emphasis></entry>
-                    </row>
-                    <row>
-                        <entry>log</entry>
-                        <entry>all</entry>
-                        <entry>
-                            Eine Instanz von <classname>Zend_Log</classname> wohin nicht
-                            übersetzbare Meldungen und Notizen geschrieben werden
-                        </entry>
-                        <entry><emphasis>null</emphasis></entry>
-                    </row>
-                    <row>
-                        <entry>logMessage</entry>
-                        <entry>all</entry>
-                        <entry>
-                            Die Nachricht die in das Log geschrieben werden soll
-                        </entry>
-                        <entry>
-                            <emphasis>Untranslated message within '%locale%': %message%</emphasis>
-                        </entry>
-                    </row>
-                    <row>
-                        <entry>logUntranslated</entry>
-                        <entry>all</entry>
-                        <entry>
-                            Wenn diese Option auf true gesetzt wird, werden alle Nachrichten Id's
-                            die nicht übersetzt werden können in das angehängte Log geschrieben
-                        </entry>
-                        <entry><emphasis>false</emphasis></entry>
-                    </row>
-                    <row>
-                        <entry>scan</entry>
-                        <entry>all</entry>
-                        <entry>
-                            Wenn null gesetzt wird, wird die Verzechnisstruktur nicht gescannt. Wenn
-                            <classname>Zend_Translate::LOCALE_DIRECTORY</classname> gesetzt wird,
-                            wird das Gebietsschema im Verzeichnis gesucht. Wenn
-                            <classname>Zend_Translate::LOCALE_FILENAME</classname> gesetzt wird,
-                            wird das Gebietsschema im Dateinamen gesucht. Siehe
-                            <xref linkend="zend.translate.using.detection" /> für Details
-                        </entry>
-                        <entry><emphasis>null</emphasis></entry>
-                    </row>
-                    <row>
-                        <entry>delimiter</entry>
-                        <entry>Csv</entry>
-                        <entry>
-                            Definiert welches Zeichen als Trenner für Quelle und Übersetzung
-                            verwendet wird
-                        </entry>
-                        <entry><emphasis>;</emphasis></entry>
-                    </row>
-                    <row>
-                        <entry>length</entry>
-                        <entry>Csv</entry>
-                        <entry>
-                            Definiert die maximale Länge einer CSV Zeile. Auf 0 gesetzt wird sie
-                            automatisch erkannt
-                        </entry>
-                        <entry><emphasis>0</emphasis></entry>
-                    </row>
-                    <row>
-                        <entry>enclosure</entry>
-                        <entry>Csv</entry>
-                        <entry>
-                            Definiert das zu verwendende Einschließungszeichen. Standard ist das
-                            doppelte Hochkomma
-                        </entry>
-                        <entry><emphasis>"</emphasis></entry>
-                    </row>
-                </tbody>
-            </tgroup>
-        </table>
-
-        <para>
-            Wenn man selbstdefinierte Optionen haben will, können diese auch in allen Adaptern
-            verwendet werden. Die <code>setOptions()</code> Methode kann verwendet werden um die
-            eigene Option zu definieren. <code>setOptions()</code> benötigt ein Array mit den
-            Optionen die gesetzt werden sollen. Wenn eine angegebene Option bereits existiert wird
-            diese überschrieben. Es können beliebig viele Optionen definiert werden da diese nicht
-            vom Adapter geprüft werden. Man muß nur Sicherstellen das keine existierende Option
-            überschrieben werden die von einem Adapter verwendet wird.
-        </para>
-
-        <para>
-            Um die Option zurückzugeben kann die Methode <code>getOptions()</code> verwendet
-            werden. Wenn <code>getOptions()</code> ohne einen Parameter aufgerufen wird, gibt Sie
-            alle Optionen zurück. Wenn der optionale Parameter angegeben wird, wird nur die
-            spezifizierte Option zurückgegeben.
-        </para>
-
-    </sect2>
-
-    <sect2 id="zend.translate.using.languages">
-
-        <title>Mit Sprachen arbeiten</title>
-
-        <para>
-            Wenn mit verschiedenen Sprachen gearbeitet wird gibt es ein paar Methoden die nützlich
-            sind.
-        </para>
-
-        <para>
-            Die <code>getLocale()</code> Methode kann verwendet werden um die aktuell gesetzte
-            Sprache zu erhalten. Sie kann entweder eine Instanz von
-            <classname>Zend_Locale</classname> oder den Bezeichner des Gebietsschemas enthalten.
-        </para>
-
-        <para>
-            Die <code>setLocale()</code> Methode setzt eine neue Standardsprache für Übersetzungen.
-            Das verhindert das der optionale Sprachparameter der <code>translate()</code> Methode
-            mehr als einmal gesetzt werden muß. Wenn die angegebene Sprache nicht existiert, oder
-            keine Übersetzten Daten für diese Sprache vorhanden sind, versucht
-            <code>setLocale()</code> auf die Sprache ohne Region downzugraden wenn diese angegeben
-            wurde. Die Sprache <code>en_US</code> würde zum Beispiel zu <code>en</code>
-            downgegradet werden. Wenn sogar nach dem Downgraden die Sprache nicht gefunden werden
-            konnte, wird eine Ausnahme geworfen.
-        </para>
-
-        <para>
-            Die <code>isAvailable()</code> Methode prüft ob eine angegebene Sprache bereits
-            vorhanden ist. Es wird <constant>TRUE</constant> zurückgegeben wenn Daten für die
-            angegebene Sprache existieren.
-        </para>
-
-        <para>
-            Und letztendlich kann die <code>getList()</code> Methode verwendet werden um alle
-            aktuell gesetzten Sprachen für einen Adapter als Array zu erhalten.
-        </para>
-
-        <example id="zend.translate.using.languages.example">
-            <title>Handhabung von Sprachen mit Adaptern</title>
-            <programlisting language="php"><![CDATA[
-// gibt die aktuell gesetzte Sprache zurück
-$actual = $translate->getLocale();
-
-// der optionale Parameter kann wärend der Übersetzung verwendet werden
-echo $translate->_("mein_Text", "fr");
-// oder setze eine neue Standardsprache
-$translate->setLocale("fr");
-echo $translate->_("mein_Text");
-// zur Basissprache referieren
-// fr_CH wird zu fr downgegradet
-$translate->setLocale("fr_CH");
-echo $translate->_("mein_Text");
-
-// Prüft ob die Sprache existiert
-if ($translate->isAvailable("fr")) {
-    // Sprache existiert
-}
-]]></programlisting>
-        </example>
-
-        <sect3 id="zend.translate.using.languages.automatic">
-
-            <title>Automatische Handhabung von Sprachen</title>
-
-            <para>
-                Es gilt zu beachten das, solange man neue Sprachquellen mit der
-                <code>addTranslation()</code> Methode hinzufügt,
-                <classname>Zend_Translate</classname> automatisch die am besten passende Sprache für
-                die eigene Umgebung auswählt wenn man eine der automatischen Gebietsschemata
-                verwendet die '<code>auto</code>' oder '<code>browser</code>' sein können. Man muß
-                normalerweise also <code>setLocale()</code> nicht aufrufen. Das sollte nur in
-                Verbindung mit der automatischen Erkennung von Quellen verwendet werden.
-            </para>
-
-            <para>
-                Der Algorithmus sucht nach dem am besten passenden Gebietsschema abhängig vom
-                Browser des Benutzers und der eigenen Umgebung. Siehe das folgende Beispiel für
-                Details:
-            </para>
-
-            <example id="zend.translate.using.languages.automatic.example">
-                <title>Automatische Erkennen der Sprache</title>
-                <programlisting language="php"><![CDATA[
-// Angenommen der Browser gibt folgende Spracheneinstellungen zurück:
-// HTTP_ACCEPT_LANGUAGE = "de_AT=1;fr=1;en_US=0.8";
-
-// Beispiel 1:
-// Wenn keine passende Sprache gefunden wird, wird die MessageID zurückgegeben
-$translate = new Zend_Translate(
-    'gettext',
-    '\my_it.mo',
-    'auto',
-    array('scan' => Zend_Translate::LOCALE_FILENAME));
-
-// Beispiel 2:
-// Die am besten passende Sprache ist 'fr'
-$translate = new Zend_Translate(
-    'gettext',
-    '\my_fr.mo',
-    'auto',
-    array('scan' => Zend_Translate::LOCALE_FILENAME));
-
-// Beispiel 3:
-// Die am besten passende Sprache ist 'de' ('de_AT' wird degradiert)
-$translate = new Zend_Translate(
-    'gettext',
-    '\my_de.mo',
-    'auto',
-    array('scan' => Zend_Translate::LOCALE_FILENAME));
-
-// Beispiel 4:
-// Gibt 'it' als Übersetzungsquelle zurück und überschreibt
-// die automatischen Eigenschaften
-$translate = new Zend_Translate(
-    'gettext',
-    '\my_it.mo',
-    'auto',
-    array('scan' => Zend_Translate::LOCALE_FILENAME)
-);
-$translate->addTranslation('\my_ru.mo', 'ru');
-$translate->setLocale('it_IT');
-]]></programlisting>
-            </example>
-
-            <para>
-                Nachdem eine Sprache per Hand mit der <code>setLocale()</code> Methode gesetzt
-                wurde, wird die automatische Erkennung ausgeschaltet und übergangen.
-            </para>
-
-            <para>
-                Wenn man Sie wieder verwenden will, kann die Sprache
-                <emphasis>auto</emphasis> mit <code>setLocale()</code> gesetzt
-                werden, was die automatische Erkennung für <classname>Zend_Translate</classname>
-                wieder reaktiviert.
-            </para>
-
-            <para>
-                Seit dem Zend Framework 1.7.0 unterstützt <classname>Zend_Translate</classname> auch
-                die Verwendung eines Anwendungsweiten Gebietsschemas. Man kann einfach eine
-                <classname>Zend_Locale</classname> Instanz in der Registry setzen wie unten gezeigt.
-                Mit dieser Schreibweise kann man das manuelle Setzen eines Gebietsschemas mit jeder
-                Instanz komplett vergessen wenn man das gleiche Gebietsschema mehrere Male
-                verwenden will.
-            </para>
-
-            <programlisting language="php"><![CDATA[
-// In der Bootstrap Datei
-$locale = new Zend_Locale();
-Zend_Registry::set('Zend_Locale', $locale);
-
-// Standardsprache wenn die angefragte Sprache nicht vorhanden ist
-$defaultlanguage = 'en';
-
-// Irgendwo in der Anwendung
-$translate = new Zend_Translate('gettext', 'my_de.mo');
-
-if (!$translate->isAvailable($locale->getLanguage())) {
-    // Nicht vorhandene Sprache werden auf eine andere Sprache geroutet
-    $translate->setLocale($defaultlanguage);
-}
-
-$translate->getLocale();
-]]></programlisting>
-
-        </sect3>
-
-    </sect2>
-
-    <sect2 id="zend.translate.using.detection">
-
-        <title>Automatische Erkennung von Quellen</title>
-
-        <para>
-            <classname>Zend_Translate</classname> kann Übersetzungsquellen automatisch erkennen. Es
-            muß also nicht jede Quelldatei manuell deklariert werden. Man kann diesen Job
-            <classname>Zend_Translate</classname> überlassen welches die komplette
-            Verzeichnisstruktur nach Quelldateien durchsucht.
-        </para>
-
-        <note>
-            <para>
-                Automatische Erkennung der Quellen ist seit Zend Framework Version 1.5 vorhanden.
-            </para>
-        </note>
-
-        <para>
-            Die Verwendung ist fast die selbe wie bei der Initiierung einer einzelnen
-            Übersetzungsquelle mit einem Unterschied. Es darf nur ein Verzeichnis angegeben werden,
-            statt einer Datei, welches gescannt werden soll.
-        </para>
-
-        <example id="zend.translate.using.languages.directory.example">
-            <title>Scannen nach Quellen in einer Verzeichnisstruktur</title>
-            <programlisting language="php"><![CDATA[
-// Angenommen wir haben die folgende Struktur
-//  /language/
-//  /language/login/login.tmx
-//  /language/logout/logout.tmx
-//  /language/error/loginerror.tmx
-//  /language/error/logouterror.tmx
-
-$translate = new Zend_Translate('tmx', '/language');
-]]></programlisting>
-        </example>
-
-        <para>
-            <classname>Zend_Translate</classname> muß also nicht nur das angegebene Verzeichnis
-            durchsuchen, sondern auch alle Unterverzeichnisse nach Dateien für Übersetzungen. Das
-            macht die Verwendung sehr einfach. Aber <classname>Zend_Translate</classname> wird alle
-            Dateien ignorieren, welche keine Quellen sind, oder wärend des Einlesens der
-            Übersetzungsdaten Fehler produzieren. Man sollte also sicherstellen das alle
-            Übersetzungsquellen korrekt sind und gelesen werden können weil man keinen Fehler erhält
-            wenn eine Datei fehlerhaft ist oder nicht gelesen werden kann.
-        </para>
-
-        <note>
-            <para>
-                Abhängig davon wie tief die Verzeichnisstruktur ist und wieviele Dateien innerhalb
-                dieser Struktur vorhanden sind, kann es eine sehr lange Zeit dauern bis
-                <classname>Zend_Translate</classname> fertig ist.
-            </para>
-        </note>
-
-        <para>
-            In unserem Beispiel haben wir das TMX Format verwendet welches die Sprache enthält die
-            innerhalb der Quelle verwendet wird. Aber viele der anderen Quellformate sind nicht
-            dazu fähig die Sprache in der Datei selbst zu inkludieren. Aber auch diese quellen
-            können mit der automatischen Erkennung verwendet werden wenn ein paar Dinge
-            berücksichtigt werden die anbei beschrieben sind:
-        </para>
-
-        <sect3 id="zend.translate.using.detection.directory">
-
-            <title>Sprachen durch die Benennung von Verzeichnissen</title>
-
-            <para>
-                Ein Weg, die automatische Spracherkennung zu inkludieren, ist es die Verzeichnisse
-                relativ zur Sprache zu benennen, welche in den Quellen des betreffenden
-                Verzeichnisses verwendet wird. Das ist der einfachste Weg und wird zum Beispiel in
-                Standard Gettext Implementationen verwendet.
-            </para>
-
-            <para>
-                <classname>Zend_Translate</classname> benötigt die '<code>scan</code>' Option um zu
-                wissen das es die Namen aller Verzeichnisse nach Sprachen durchsuchen soll. Siehe
-                das folgende Beispiel für Details:
-            </para>
-
-            <example id="zend.translate.using.detection.directory.example">
-                <title>Verzeichnisse nach Sprachen durchsuchen</title>
-                <programlisting language="php"><![CDATA[
-// Angenommen wir haben die folgende Struktur
-//  /language/
-//  /language/de/login/login.mo
-//  /language/de/error/loginerror.mo
-//  /language/en/login/login.mo
-//  /language/en/error/loginerror.mo
-
-$translate = new Zend_Translate(
-    'gettext',
-    '/language',
-    null,
-    array('scan' => Zend_Translate::LOCALE_DIRECTORY));
-]]></programlisting>
-            </example>
-
-            <note>
-                <para>
-                    Das funktioniert nur für Adapter die die Sprache nicht in der Quelldatei
-                    enthalten. Die Verwendung dieser Option wird zum Beispiel mit TMX ignoriert.
-                    Sprachdefinitionen im Dateinamen werden bei der Verwendung dieser Option
-                    ignoriert.
-                </para>
-            </note>
-
-            <note>
-                <para>
-                    Man sollte acht geben wenn man verschiedenen Unterverzeichnisse in der gleichen
-                    Struktur hat. Angenommen wir haben eine Struktur wie
-                    <code>/language/module/de/en/file.mo</code>. In diesem Fall enthält der Pfad
-                    mehrere Strings die als Gebietsschema erkannt werden würden. Das könnte
-                    entweder <code>de</code> oder <code>en</code> sein. In solch einem Fall ist das
-                    Verhalten nicht definiert und es wird empfohlen die Dateierkennung zu
-                    verwenden.
-                </para>
-            </note>
-
-        </sect3>
-
-        <sect3 id="zend.translate.using.detection.filename">
-
-            <title>Sprache durch Dateinamen</title>
-
-            <para>
-                Ein anderer Weg um die Sprache automatisch zu erkennen ist die Verwendung von
-                speziellen Dateienamen. Man kann entweder die komplette Datei oder Teile der
-                Datei nach der verwendeten Sprache benennen. Um diese Option zu Verwenden muß die
-                '<code>scan</code>' Option bei der Initiierung gesetzt werden. Es gibt verschiedene
-                Wege die Quelldateien zu benennen welche im folgenden beschrieben werden:
-            </para>
-
-            <example id="zend.translate.using.detection.filename.example">
-                <title>Suchen nach Sprachen im Dateinamen</title>
-                <programlisting language="php"><![CDATA[
-// Angenommen wir haben die folgende Struktur
-//  /language/
-//  /language/login/login_en.mo
-//  /language/login/login_de.mo
-//  /language/error/loginerror_en.mo
-//  /language/error/loginerror_de.mo
-
-$translate = new Zend_Translate(
-    'gettext',
-    '/language',
-    null,
-    array('scan' => Zend_Translate::LOCALE_FILENAME));
-]]></programlisting>
-            </example>
-
-            <sect4 id="zend.translate.using.detection.filename.complete">
-
-                <title>Komplette Dateinamen</title>
-
-                <para>
-                    Die komplette Datei nach der Sprache zu benennen ist der einfachste Weg, aber
-                    nur praktikabel wenn man nur eine Datei pro Verzeichnis verwendet.
-                </para>
-
-                <programlisting language="txt"><![CDATA[
-/languages/
-/languages/en.mo
-/languages/de.mo
-/languages/es.mo
-]]></programlisting>
-
-            </sect4>
-
-            <sect4 id="zend.translate.using.detection.filename.extension">
-
-                <title>Erweiterung der Datei</title>
-
-                <para>
-                    Ein anderer einfacher Weg ist die Verwendung der Dateiextension für die
-                    Spracherkennung. Aber das kann verwirrend sein weil man keine Idee mehr hat
-                    welche Erweiterung die Datei ursprünglich hatte.
-                </para>
-
-                <programlisting language="txt"><![CDATA[
-/languages/
-/languages/view.en
-/languages/view.de
-/languages/view.es
-]]></programlisting>
-
-            </sect4>
-
-            <sect4 id="zend.translate.using.detection.filename.token">
-
-                <title>Teile von Dateinamen</title>
-
-                <para>
-                    <classname>Zend_Translate</classname> kann die Sprache auch erkennen wenn Sie im
-                    Dateinamen enthalten ist. Aber wenn man diesen Weg nimmt, muß die Sprache mit
-                    einem Trennzeichen seperiert werden. Es gibt drei unterstützte Trennzeichen
-                    welche verwendet werden können. Ein Punkt '.', ein Unterstrich '_', oder ein
-                    Bindestrich '-'.
-                </para>
-
-                <programlisting language="txt"><![CDATA[
-/languages/
-/languages/view_en.mo -> erkennt englisch
-/languages/view_de.mo -> erkennt deutsch
-/languages/view_it.mo -> erkennt italienisch
-]]></programlisting>
-
-                <para>
-                    Das erste gefundene String der von einem Trennzeichen getrennt wird das als
-                    Gebietsschema interpretiert werden kann, wird verwendet. Siehe das folgende
-                    Beispiel für Details.
-                </para>
-
-                <programlisting language="txt"><![CDATA[
-/languages/
-/languages/view_en_de.mo -> erkennt englisch
-/languages/view_en_es.mo -> erkennt englisch und überschreibt die erste Datei
-/languages/view_it_it.mo -> erkennt italienisch
-]]></programlisting>
-
-                <para>
-                    Alle drei Trennzeichen werden verwendet um das Gebietsschema zu erkennen. Wenn
-                    der Dateiname mehrere Trennzeichen enthält, hängt das erste gefundene
-                    Trennzeichen von der Reihenfolge der Trennzeichen ab die verwendet werden.
-                    Siehe das folgende Beispiel für Details.
-                </para>
-
-                <programlisting language="txt"><![CDATA[
-/languages/
-/languages/view_en-it.mo -> erkennt englisch weil '_' vor '-' verwendet wird
-/languages/view-en_it.mo -> erkennt italienisch weil '_' vor '-' verwendet wird
-/languages/view_en.it.mo -> erkennt italienisch weil '.' vor '_' verwendet wird
-]]></programlisting>
-
-            </sect4>
-
-        </sect3>
-
-    </sect2>
-
-    <sect2 id="zend.translate.using.istranslated">
-
-        <title>Prüfen von Übersetzungen</title>
-
-        <para>
-            Normalerweise wird Text ohne Berechnungen übersetzt. Aber manchmal ist es notwendig
-            zu wissen, ob ein Text in der Quelle übersetzt ist oder nicht, und hierfür kann die
-            Methode <code>isTranslated()</code> verwendet werden.
-        </para>
-
-        <para>
-            <code>isTranslated($messageId, $original = false, $locale = null)</code> nimmt den Text
-            bzw die Id von der man wissen will ob sie Übersetzbar ist, als ersten Parameter, und
-            als optionalen dritten Parameter das Gebietsschema für das man die Prüfung durchführen
-            will. Der optionale zweite Parameter definiert ob die Übersetzung fix für die
-            definierte Sprache ist oder ob ein kleineres Set von Übersetzungen verwendet werden
-            kann. Wenn ein Text, welcher für 'en' zurückgegeben werden kann, aber nicht für
-            'en_US', dann wird die Übersetzung normalerweise zurückgegeben, aber wenn
-            <code>$original</code> auf true gesetzt ist, gibt die <code>isTranslated()</code>
-            Methode in solche Fällen false zurück.
-        </para>
-
-        <example id="zend.translate.using.istranslated.example">
-            <title>Prüfen ob ein Text übersetzbar ist</title>
-            <programlisting language="php"><![CDATA[
-$english = array(
-    'message1' => 'Nachricht 1',
-    'message2' => 'Nachricht 2',
-    'message3' => 'Nachricht 3');
-
-$translate = new Zend_Translate('array', $english, 'de_AT');
-
-if ($translate->isTranslated('message1')) {
-    print "'message1' kann übersetzt werden";
-}
-
-if (!($translate->isTranslated('message1', true, 'de'))) {
-    print "'message1' kann nicht in 'de' übersetzt werden da es "
-        . "nur in 'de_AT' vorhanden ist";
-}
-
-if ($translate->isTranslated('message1', false, 'de')) {
-    print "'message1' kann in 'de_AT' übersetzt werden " .
-    "da es zu 'de' zurückfällt";
-}
-]]></programlisting>
-        </example>
-
-    </sect2>
-
-    <sect2 id="zend.translate.using.logging">
-
-        <title>Wie können nicht gefundene Übersetzungen geloggt werden</title>
-
-        <para>
-            Wenn man eine größere Site hat, oder man die Übersetzungsdateien manuell erstellt hat
-            man oft das Problem das einige Meldungen nicht übersetzt werden. Aber es gibt eine
-            einfache Lösung wenn man <classname>Zend_Translate</classname> verwendet.
-        </para>
-
-        <para>
-            Man muß den folgenden zwei oder drei einfachen Schritten folgen. Erstens, muß man eine
-            Instanz von <classname>Zend_Log</classname> erstellen. Und dann muß man diese Instanz an
-            <classname>Zend_Translate</classname> übergeben. Siehe das folgende Beispiel:
-        </para>
-
-        <example id="zend.translate.using.logging.example">
-            <title>Übersetzungen loggen</title>
-            <programlisting language="php"><![CDATA[
-$translate = new Zend_Translate('gettext', $path, 'de');
-
-// Eine Log Instanz erstellen
-$writer = new Zend_Log_Writer_Stream('/path/to/file.log');
-$log    = new Zend_Log($writer);
-
-// Diese der Übersetzungs-Instanz hinzufügen
-$translate->setOptions(array(
-    'log'             => $log,
-    'logUntranslated' => true));
-
-$translate->translate('unbekannter String');
-]]></programlisting>
-        </example>
-
-        <para>
-            Jetzt steht im Log eine neue Notiz:
-            <code>Untranslated message within 'de': unbekannter String</code>.
-        </para>
-
-        <note>
-            <para>
-                Man sollte beachten das jede Übersetzung die nicht gefunden wird mitgeloggt wird.
-                Das bedeutet alle Übersetzungen wenn ein Benutzer eine nicht unterstützte Sprache
-                anfragt. Aber auch jede Anfrage für eine Nachricht die nicht übersetzt werden kann
-                wird mitgeloggt. Es ist zu beachten das, 100 Personen die die gleiche Übersetzung
-                anfragen, auch zu 100 geloggten Notizen führen.
-            </para>
-        </note>
-
-        <para>
-            Dieses Feature kann nicht nur verwendet werden um Nachrichten zu Loggen sondern auch um
-            diese nicht übersetzen Nachrichten in eine leere Übersetzungsdatei zu schreiben. Um das
-            zu ermöglichen muß man seinen eigenen Log Writer erstellen der das Format schreibt das
-            man haben will und das führende "Untranslated message" herausschneidet.
-        </para>
-
-        <para>
-            Wenn man seine eigene Logmeldung haben will, kann man auch die Option
-            '<code>logMessage</code>' setzen. Das '<code>%message%</code>' Token ist für die
-            Platzierung der messageId in der eigenen Logmeldung zu verwenden, und das
-            '<code>%locale%</code>' Token für das angefragte Gebietsschema. Siehe das folgende
-            Beispiel für ein Beispiel einer selbst definierten Logmeldung:
-        </para>
-
-        <example id="zend.translate.using.logging.example2">
-            <title>Selbstdefinierte Logmeldungen</title>
-            <programlisting language="php"><![CDATA[
-$translate = new Zend_Translate('gettext', $path, 'de');
-
-// Eine Loginstanz erstellen
-$writer = new Zend_Log_Writer_Stream('/path/to/file.log');
-$log    = new Zend_Log($writer);
-
-// Diese der Übersetzungsinstanz hinzufügen
-$translate->setOptions(array(
-    'log'             => $log,
-    'logMessage'      => "Fehlende '%message%' im Gebietsschema '%locale%'",
-    'logUntranslated' => true));
-
-$translate->translate('unknown string');
-]]></programlisting>
-        </example>
-
-    </sect2>
-
-    <sect2 id="zend.translate.using.sourcedata">
-
-        <title>Zugang zu Quelldaten</title>
-
-        <para>
-            Manchmal ist es nützlich, Zugang zu den übersetzten Quelldaten zu erhalten. Hierfür
-            werden die folgenden zwei Methoden angeboten.
-        </para>
-
-        <para>
-            Die <code>getMessageIds($locale = null)</code> Methode gibt alle bekannten Ids für
-            Übersetzungen als Array zurück.
-        </para>
-
-        <para>
-            Die <code>getMessages($locale = null)</code> Methode gibt die komplette
-            Übersetzungs-Quelle als Array zurück. Die Ids der Übersetzungen werden als Schlüssel
-            und die Übersetzten Daten als Wert verwendet.
-        </para>
-
-        <para>
-            Beide Methoden akzeptieren einen optionalen Parameter <code>$locale</code> welcher,
-            wenn er gesetzt wird, die Übersetzungsdaten für die spezifizierte Sprache, zurückgibt.
-            Wenn dieser Parameter nicht angegeben wird, wird die aktuell gesetzte Sprache
-            verwendet. Es ist zu beachten das normalerweise alle Übersetzungen in allen Sprachen
-            vorhanden sein sollten. Das bedeutet das man in einer normalen Situation diesen
-            Parameter nicht angeben muß.
-        </para>
-
-        <para>
-            Zusätzlich kann die <code>getMessages()</code> Methode verwendet werden um das
-            komplette Übersetzungsverzeichnis, mit dem Pseudo-Gebietsschema 'all', zurückgeben.
-            Das gibt alle vorhandenen Übersetzungsdaten für jedes hinzugefügte Gebietsschema
-            zurück.
-        </para>
-
-        <note>
-            <para>
-                Achtung: Das zurückgegebene Array kann
-                <emphasis>sehr groß</emphasis> sein, abhängig von der Anzahl an
-                hinzugefügten Gebietsschemata und der Anzahl an Übersetzungsdaten.
-            </para>
-        </note>
-
-        <example id="zend.translate.using.sourcedata.example">
-            <title>Handhabung von Quelldaten</title>
-            <programlisting language="php"><![CDATA[
-// gibt alle bekannten Übersetzungs Ids zurück
-$messageIds = $translate->getMessageIds();
-print_r($messageIds);
-
-// oder nur die spezifizierte Sprache
-$messageIds = $translate->getMessageIds('en_US');
-print_r($messageIds);
-
-// gibt die kompletten Übersetzungs Daten zurück
-$source = $translate->getMessages();
-print_r($source);
-]]></programlisting>
-        </example>
-
-    </sect2>
-
 </sect1>

+ 42 - 1
documentation/manual/de/ref/coding_standard.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 16831 -->
+<!-- EN-Revision: 16885 -->
 <!-- Reviewed: no -->
 <appendix id="coding-standard">
   <title>Zend Framework Coding Standard für PHP</title>
@@ -1058,6 +1058,9 @@ switch ($numPeople) {
  *
  * LICENSE: Einige Lizenz Informationen
  *
+ * @category   Zend
+ * @package    Zend_Magic
+ * @subpackage Wand
  * @copyright  2008 Zend Technologies
  * @license    http://framework.zend.com/license   BSD License
  * @version    $Id:$
@@ -1065,6 +1068,24 @@ switch ($numPeople) {
  * @since      Datei vorhanden seit Release 1.2.0
 */
 ]]></programlisting>
+
+                <para>
+                    Das <property>@category</property> Tag muß den Wert "Zend" haben.
+                </para>
+
+                <para>
+                    Das <property>@package</property> Tag muß hinzugefügt sein, und sollte mit
+                    dem Namen der Komponente identisch sein dessen Klasse in der Datei enthalten
+                    ist; typischerweise wird dieser zwei Segmente haben, den Präfix "Zend", und
+                    den Namen der Komponente.
+                </para>
+
+                <para>
+                    Das <property>@subpackage</property> Tag ist optional. Wenn es angegeben wird,
+                    sollte es der Name der Subkomponente sein, ohne den Präfix der Klasse. Im
+                    obigen Beispiel ist die Annahme das die Klasse in der Datei entweder
+                    "Zend_Magic_Wand" ist oder den Klassennamen als Teil seines Präfixes verwendet.
+                </para>
             </sect3>
 
             <sect3 id="coding-standards.inline-documentation.classes">
@@ -1081,6 +1102,9 @@ switch ($numPeople) {
  *
  * Lange Beschreibung für die Klasse (wenn vorhanden)...
  *
+ * @category   Zend
+ * @package    Zend_Magic
+ * @subpackage Wand
  * @copyright  2008 Zend Technologies
  * @license    http://framework.zend.com/license   BSD License
  * @version    Release: @package_version@
@@ -1089,6 +1113,23 @@ switch ($numPeople) {
  * @deprecated Klasse abgeraten ab Release 2.0.0
  */
 ]]></programlisting>
+
+                <para>
+                    Das <property>@category</property> Tag muß den Wert "Zend" haben.
+                </para>
+
+                <para>
+                    Das <property>@package</property> Tag muß hinzugefügt sein, und sollte mit
+                    der Komponente identisch sein der die Klasse gehört; typischerweise wird
+                    dieser zwei Segmente haben, den Präfix "Zend", und den Namen der Komponente.
+                </para>
+
+                <para>
+                    Das <property>@subpackage</property> Tag ist optional. Wenn es angegeben wird,
+                    sollte es der Name der Subkomponente sein, ohne den Präfix der Klasse. Im
+                    obigen Beispiel ist die Annahme das die Klasse in der Datei entweder
+                    "Zend_Magic_Wand" ist oder den Klassennamen als Teil seines Präfixes verwendet.
+                </para>
             </sect3>
 
             <sect3 id="coding-standards.inline-documentation.functions">