Explorar el Código

[MANUAL] German:

- sync to 20279

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@20294 44c647ce-9c0f-0410-b52a-842ac1e357ba
thomas hace 16 años
padre
commit
6d752df53f

+ 19 - 7
documentation/manual/de/module_specs/Zend_Controller-Plugins-ErrorHandler.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 17175 -->
+<!-- EN-Revision: 20249 -->
 <!-- Reviewed: no -->
 <sect3 id="zend.controller.plugins.standard.errorhandler">
     <title>Zend_Controller_Plugin_ErrorHandler</title>
@@ -18,6 +18,10 @@
 
     <itemizedlist>
         <listitem>
+            <para>Abfangen von Ausnahmen welche auftreten wenn keine passende Route existiert</para>
+        </listitem>
+
+        <listitem>
             <para>
                 Abfangen von Ausnahmen die durch fehlende Controller oder Aktionsmethoden auftreten
             </para>
@@ -31,8 +35,8 @@
     <para>
         Mit anderen Worten ist das <emphasis>ErrorHandler</emphasis> Plugin kreiert worden um
         <acronym>HTTP</acronym> 404 Fehler zu behandeln (fehlende Seite) und 500 Fehler (interner
-        Fehler). Es ist nicht dazu gedacht Ausnahmen zu fangen die in anderen Plugins oder durch das
-        Routen verursacht werden.
+        Fehler). Es ist nicht dazu gedacht Ausnahmen zu fangen die in anderen Plugins verursacht
+        werden.
     </para>
 
     <para>
@@ -125,6 +129,13 @@
         <itemizedlist>
             <listitem>
                 <para>
+                    <constant>Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE</constant>,
+                    zeigt das keine passende Route existiert.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
                     <constant>Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER</constant>,
                     zeigt das der Controller nicht gefunden wurde.
                 </para>
@@ -146,7 +157,8 @@
         </itemizedlist>
 
         <para>
-            Man kann auf eine der ersten Typen testen, und wenn dem so ist, eine 404 Seite anzeigen:
+            Man kann auf jeden der ersten drei Typen testen, und wenn dem so ist, eine 404 Seite
+            anzeigen:
         </para>
 
         <programlisting language="php"><![CDATA[
@@ -157,6 +169,7 @@ class ErrorController extends Zend_Controller_Action
         $errors = $this->_getParam('error_handler');
 
         switch ($errors->type) {
+            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
             case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
             case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
                 // 404 Fehler -- Controller oder Aktion nicht gefunden
@@ -186,6 +199,7 @@ public function errorAction()
         $errors = $this->_getParam('error_handler');
 
         switch ($errors->type) {
+            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
             case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
             case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
                 // 404 Fehler -- Controller oder Aktion nicht gefunden
@@ -289,6 +303,7 @@ class ErrorController extends Zend_Controller_Action
         $errors = $this->_getParam('error_handler');
 
         switch ($errors->type) {
+            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
             case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
             case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
                 // 404 Fehler -- Controller oder Aktion nicht gefunden
@@ -318,6 +333,3 @@ EOH;
 ]]></programlisting>
     </sect4>
 </sect3>
-<!--
-vim:se ts=4 sw=4 et:
--->

+ 332 - 0
documentation/manual/de/module_specs/Zend_Filter-Boolean.xml

@@ -0,0 +1,332 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 20223 -->
+<!-- Reviewed: no -->
+<sect2 id="zend.filter.set.boolean">
+    <title>Boolean</title>
+
+    <para>
+        This filter changes a given input to be a <constant>BOOLEAN</constant> value. This is often
+        useful when working with databases or when processing form values.
+    </para>
+
+    <sect3 id="zend.filter.set.boolean.default">
+        <title>Default behaviour for Zend_Filter_Boolean</title>
+
+        <para>
+            By default, this filter works by casting the input to a <constant>BOOLEAN</constant>
+            value; in other words, it operates in a similar fashion to calling <command>(boolean)
+            $value</command>.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$filter = new Zend_Filter_Boolean();
+$value  = '';
+$result = $filter->filter($value);
+// returns false
+]]></programlisting>
+
+        <para>
+            This means that without providing any configuration,
+            <classname>Zend_Filter_Boolean</classname> accepts all input types and returns a
+            <constant>BOOLEAN</constant> just as you would get by type casting to
+            <constant>BOOLEAN</constant>.
+        </para>
+    </sect3>
+
+    <sect3 id="zend.filter.set.boolean.types">
+        <title>Changing behaviour for Zend_Filter_Boolean</title>
+
+        <para>
+            Sometimes casting with <command>(boolean)</command> will not suffice.
+            <classname>Zend_Filter_Boolean</classname> allows you to configure specific types to
+            convert, as well as which to omit.
+        </para>
+
+        <para>
+            The following types can be handled:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>
+                    <emphasis>boolean</emphasis>: Returns a boolean value as is.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>integer</emphasis>: Converts an integer <emphasis>0</emphasis> value
+                    to <constant>FALSE</constant>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>float</emphasis>: Converts a float <emphasis>0.0</emphasis> value
+                    to <constant>FALSE</constant>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>string</emphasis>: Converts an empty string <emphasis>''</emphasis> to
+                    <constant>FALSE</constant>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>zero</emphasis>: Converts a string containing the single character
+                    zero (<emphasis>'0'</emphasis>) to <constant>FALSE</constant>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>empty_array</emphasis>: Converts an empty <emphasis>array</emphasis>
+                    to <constant>FALSE</constant>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>null</emphasis>: Converts a <constant>NULL</constant> value
+                    to <constant>FALSE</constant>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>php</emphasis>: Converts values according to <acronym>PHP</acronym>
+                    when casting them to <constant>BOOLEAN</constant>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>false_string</emphasis>: Converts a string containing the word "false"
+                    to a boolean <constant>FALSE</constant>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>yes</emphasis>: Converts a localized string which contains the word
+                    "no" to <constant>FALSE</constant>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>all</emphasis>: Converts all above types to
+                    <constant>BOOLEAN</constant>.
+                </para>
+            </listitem>
+        </itemizedlist>
+
+        <para>
+            All other given values will return <constant>TRUE</constant> by default.
+        </para>
+
+        <para>
+            There are several ways to select which of the above types are filtered. You can give one
+            or multiple types and add them, you can give an array, you can use constants, or you can
+            give a textual string. See the following examples:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+// converts 0 to false
+$filter = new Zend_Filter_Boolean(Zend_Filter_Boolean::INTEGER);
+
+// converts 0 and '0' to false
+$filter = new Zend_Filter_Boolean(
+    Zend_Filter_Boolean::INTEGER + Zend_Filter_Boolean::ZERO
+);
+
+// converts 0 and '0' to false
+$filter = new Zend_Filter_Boolean(array(
+    'type' => array(
+        Zend_Filter_Boolean::INTEGER,
+        Zend_Filter_Boolean::ZERO,
+    ),
+));
+
+// converts 0 and '0' to false
+$filter = new Zend_Filter_Boolean(array(
+    'type' => array(
+        'integer',
+        'zero',
+    ),
+));
+]]></programlisting>
+
+        <para>
+            You can also give an instance of <classname>Zend_Config</classname> to set the desired
+            types. To set types after instantiation, use the <methodname>setType()</methodname>
+            method.
+        </para>
+    </sect3>
+
+    <sect3 id="zend.filter.set.boolean.localized">
+        <title>Localized booleans</title>
+
+        <para>
+            As mentioned previously, <classname>Zend_Filter_Boolean</classname> can also recognise
+            localized "yes" and "no" strings. This means that you can ask your customer in a form
+            for "yes" or "no" within his native language and
+            <classname>Zend_Filter_Boolean</classname> will convert the response to the appropriate
+            boolean value.
+        </para>
+
+        <para>
+            To set the desired locale, you can either use the <property>locale</property> option, or
+            the method <methodname>setLocale()</methodname>.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$filter = new Zend_Filter_Boolean(array(
+    'type'   => Zend_Filter_Boolean::ALL,
+    'locale' => 'de',
+));
+
+// returns false
+echo $filter->filter('nein');
+
+$filter->setLocale('en');
+
+// returns true
+$filter->filter('yes');
+]]></programlisting>
+    </sect3>
+
+    <sect3 id="zend.filter.set.boolean.casting">
+        <title>Disable casting</title>
+
+        <para>
+            Sometimes it is necessary to recognise only <constant>TRUE</constant> or
+            <constant>FALSE</constant> and return all other values without changes.
+            <classname>Zend_Filter_Boolean</classname> allows you to do this by setting the
+            <property>casting</property> option to <constant>FALSE</constant>.
+        </para>
+
+        <para>
+            In this case <classname>Zend_Filter_Boolean</classname> will work as described in the
+            following table, which shows which values return true or false. All other given values
+            are returned without change when <property>casting</property> is set to
+            <constant>FALSE</constant>
+        </para>
+
+        <table id="zend.filter.set.boolean.casting.table">
+            <title>Usage without casting</title>
+            <tgroup cols="3">
+                <thead>
+                    <row>
+                        <entry>Type</entry>
+
+                        <entry>True</entry>
+
+                        <entry>False</entry>
+                    </row>
+                </thead>
+
+                <tbody>
+                    <row>
+                        <entry>Zend_Filter_Boolean::BOOLEAN</entry>
+
+                        <entry><constant>TRUE</constant></entry>
+
+                        <entry><constant>FALSE</constant></entry>
+                    </row>
+
+                    <row>
+                        <entry>Zend_Filter_Boolean::INTEGER</entry>
+
+                        <entry>0</entry>
+
+                        <entry>1</entry>
+                    </row>
+
+                    <row>
+                        <entry>Zend_Filter_Boolean::FLOAT</entry>
+
+                        <entry>0.0</entry>
+
+                        <entry>1.0</entry>
+                    </row>
+
+                    <row>
+                        <entry>Zend_Filter_Boolean::STRING</entry>
+
+                        <entry>""</entry>
+
+                        <entry />
+                    </row>
+
+                    <row>
+                        <entry>Zend_Filter_Boolean::ZERO</entry>
+
+                        <entry>"0"</entry>
+
+                        <entry>"1"</entry>
+                    </row>
+
+                    <row>
+                        <entry>Zend_Filter_Boolean::EMPTY_ARRAY</entry>
+
+                        <entry>array()</entry>
+
+                        <entry />
+                    </row>
+
+                    <row>
+                        <entry>Zend_Filter_Boolean::NULL</entry>
+
+                        <entry><constant>NULL</constant></entry>
+
+                        <entry />
+                    </row>
+
+                    <row>
+                        <entry>Zend_Filter_Boolean::FALSE_STRING</entry>
+
+                        <entry>"false"</entry>
+
+                        <entry>"true"</entry>
+                    </row>
+
+                    <row>
+                        <entry>Zend_Filter_Boolean::YES</entry>
+
+                        <entry>localized "yes"</entry>
+
+                        <entry>localized "no"</entry>
+                    </row>
+                </tbody>
+            </tgroup>
+        </table>
+
+        <para>
+            The following example shows the behaviour when changing the <property>casting</property>
+            option:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$filter = new Zend_Filter_Boolean(array(
+    'type'    => Zend_Filter_Boolean::ALL,
+    'casting' => false,
+));
+
+// returns false
+echo $filter->filter(0);
+
+// returns true
+echo $filter->filter(1);
+
+// returns the value
+echo $filter->filter(2);
+]]></programlisting>
+    </sect3>
+</sect2>
+<!--
+vim:se ts=4 sw=4 et:
+-->

+ 2 - 1
documentation/manual/de/module_specs/Zend_Filter-Set.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 20136 -->
+<!-- EN-Revision: 20223 -->
 <!-- Reviewed: no -->
 <sect1 id="zend.filter.set" xmlns:xi="http://www.w3.org/2001/XInclude">
 
@@ -45,6 +45,7 @@
         </para>
     </sect2>
 
+    <xi:include href="Zend_Filter-Boolean.xml" />
     <xi:include href="Zend_Filter-Callback.xml" />
     <xi:include href="Zend_Filter-Compress.xml" />
     <xi:include href="Zend_Filter-Decryption.xml" />

+ 6 - 2
documentation/manual/de/module_specs/Zend_Loader-Autoloader-Resource.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 17232 -->
+<!-- EN-Revision: 20250 -->
 <!-- Reviewed: no -->
 <sect1 id="zend.loader.autoloader-resource">
     <title>Ressource Autoloader</title>
@@ -148,11 +148,15 @@ $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
         </para>
 
         <programlisting language="text"><![CDATA[
-api/         => Api
 forms/       => Form
 models/      => Model
     DbTable/ => Model_DbTable
+    mappers/ => Model_Mapper
 plugins/     => Plugin
+services/    => Service
+views/
+    helpers  => View_Helper
+    filters  => View_Filter
 ]]></programlisting>
 
         <para>

+ 70 - 1
documentation/manual/de/module_specs/Zend_Loader-Autoloader.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 20115 -->
+<!-- EN-Revision: 20243 -->
 <!-- Reviewed: no -->
 <sect1 id="zend.loader.autoloader">
     <title>Der Autoloader</title>
@@ -124,6 +124,75 @@ $autoloader->suppressNotFoundWarnings(true);
         <programlisting language="php"><![CDATA[
 $autoloader->setFallbackAutoloader(true);
 ]]></programlisting>
+
+        <note>
+            <title>Klassen von PHP Namespaces laden</title>
+
+            <para>
+                Beginnend mit Version 1.10.0 erlaubt Zend Framework das Laden von Klassen aus PHP
+                Namespaces. Diese Unterstützung folgt den gleichen Richtlinien und Implementationen
+                wie Sie in der <ulink
+                    linkend="http://groups.google.com/group/php-standards/web/psr-0-final-proposal">PHP
+                Framework Interop Group PSR-0</ulink> Referenz Implementation gefunden werden
+                können.
+            </para>
+
+            <para>
+                Mit dieser Richtlinie werden die folgenden Regeln angewandt:
+            </para>
+
+            <itemizedlist>
+                <listitem>
+                    <para>
+                        Jeder Separator für Namespaces wird zu einem
+                        <constant>DIRECTORY_SEPARATOR</constant> konvertiert wenn er vom Dateisystem
+                        geladen wird.
+                    </para>
+                </listitem>
+
+                <listitem>
+                    <para>
+                        Jedes "_" Zeichen im <emphasis>CLASS NAME</emphasis> wird zu einem
+                        <constant>DIRECTORY_SEPARATOR</constant> konvertiert. Das "_" Zeichen hat
+                        keine spezielle Bedeutung im Namespace.
+                    </para>
+                </listitem>
+
+                <listitem>
+                    <para>
+                        Dem voll-qualifizierte Namespace und der Klasse wird ".php" angehängt wenn
+                        Sie vom Dateisystem geladen werden.
+                    </para>
+                </listitem>
+            </itemizedlist>
+
+            <para>
+                Als Beispiel:
+            </para>
+
+            <itemizedlist>
+                <listitem>
+                    <para>
+                        <classname>\Doctrine\Common\IsolatedClassLoader</classname> =&gt;
+                        <filename>/path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php</filename>
+                    </para>
+                </listitem>
+
+                <listitem>
+                    <para>
+                        <classname>\namespace\package\Class_Name</classname> =&gt;
+                        <filename>/path/to/project/lib/vendor/namespace/package/Class/Name.php</filename>
+                    </para>
+                </listitem>
+
+                <listitem>
+                    <para>
+                        <classname>\namespace\package_name\Class_Name</classname> =&gt;
+                        <filename>/path/to/project/lib/vendor/namespace/package_name/Class/Name.php</filename>
+                    </para>
+                </listitem>
+            </itemizedlist>
+        </note>
     </sect2>
 
     <sect2 id="zend.loader.autoloader.zf-version">

+ 69 - 1
documentation/manual/de/module_specs/Zend_Loader.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 20115 -->
+<!-- EN-Revision: 20243 -->
 <!-- Reviewed: no -->
 <sect1 id="zend.loader.load">
     <title>Dynamisches Laden von Dateien und Klassen</title>
@@ -120,6 +120,74 @@ Zend_Loader::loadClass('Container_Tree',
             den Unterstrich ('_') und den Punkt ('.') enthalten.
         </para>
 
+        <note>
+            <title>Klassen von PHP Namespaces laden</title>
+
+            <para>
+                Beginnend mit Version 1.10.0 erlaubt Zend Framework das Laden von Klassen aus PHP
+                Namespaces. Diese Unterstützung folgt den gleichen Richtlinien und Implementationen
+                wie Sie in der <ulink
+                    linkend="http://groups.google.com/group/php-standards/web/psr-0-final-proposal">PHP
+                Framework Interop Group PSR-0</ulink> Referenz Implementation gefunden werden
+                können.
+            </para>
+
+            <para>
+                Mit dieser Richtlinie werden die folgenden Regeln angewandt:
+            </para>
+
+            <itemizedlist>
+                <listitem>
+                    <para>
+                        Jeder Separator für Namespaces wird zu einem
+                        <constant>DIRECTORY_SEPARATOR</constant> konvertiert wenn er vom Dateisystem
+                        geladen wird.
+                    </para>
+                </listitem>
+
+                <listitem>
+                    <para>
+                        Jedes "_" Zeichen im <emphasis>CLASS NAME</emphasis> wird zu einem
+                        <constant>DIRECTORY_SEPARATOR</constant> konvertiert. Das "_" Zeichen hat
+                        keine spezielle Bedeutung im Namespace.
+                    </para>
+                </listitem>
+
+                <listitem>
+                    <para>
+                        Dem voll-qualifizierte Namespace und der Klasse wird ".php" angehängt wenn
+                        Sie vom Dateisystem geladen werden.
+                    </para>
+                </listitem>
+            </itemizedlist>
+
+            <para>
+                Als Beispiel:
+            </para>
+
+            <itemizedlist>
+                <listitem>
+                    <para>
+                        <classname>\Doctrine\Common\IsolatedClassLoader</classname> =&gt;
+                        <filename>/path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php</filename>
+                    </para>
+                </listitem>
+
+                <listitem>
+                    <para>
+                        <classname>\namespace\package\Class_Name</classname> =&gt;
+                        <filename>/path/to/project/lib/vendor/namespace/package/Class/Name.php</filename>
+                    </para>
+                </listitem>
+
+                <listitem>
+                    <para>
+                        <classname>\namespace\package_name\Class_Name</classname> =&gt;
+                        <filename>/path/to/project/lib/vendor/namespace/package_name/Class/Name.php</filename>
+                    </para>
+                </listitem>
+            </itemizedlist>
+        </note>
     </sect2>
 
     <sect2 id="zend.loader.load.isreadable">

+ 93 - 1
documentation/manual/de/module_specs/Zend_Markup-Renderers.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 19777 -->
+<!-- EN-Revision: 20275 -->
 <!-- Reviewed: no -->
 <sect1 id="zend.markup.renderers">
     <title>Zend_Markup Renderer</title>
@@ -50,4 +50,96 @@ echo $bbcode->render('my [foo]tag[/foo]');
             BBCode. Textile hat keine Unterstützung für eigene Tags.
         </para>
     </sect2>
+
+    <sect2 id="zend.markup.renderers.list">
+        <title>Liste der Tags</title>
+
+        <table id="zend.markup.renderers.list.tags">
+            <title>Liste der Tags</title>
+
+            <tgroup cols="2" align="left" colsep="1" rowsep="1">
+                <thead>
+                    <row>
+                        <entry>Beispiel Eingabe (BBCode)</entry>
+
+                        <entry>Beispiel Ausgabe</entry>
+                    </row>
+                </thead>
+
+                <tbody>
+                    <row>
+                        <entry>[b]foo[/b]</entry>
+
+                        <entry><![CDATA[<strong>foo</strong>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>[i]foo[/i]</entry>
+
+                        <entry><![CDATA[<em>foo</em>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>[cite]foo[/cite]</entry>
+
+                        <entry><![CDATA[<cite>foo</cite>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>[del]foo[/del]</entry>
+
+                        <entry><![CDATA[<del>foo</del>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>[ins]foo[/ins]</entry>
+
+                        <entry><![CDATA[<ins>foo</ins>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>[sup]foo[/sup]</entry>
+
+                        <entry><![CDATA[<sup>foo</sup>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>[sub]foo[/sub]</entry>
+
+                        <entry><![CDATA[<sub>foo</sub>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>[span]foo[/span]</entry>
+
+                        <entry><![CDATA[<span>foo</span>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>[acronym title="PHP Hypertext Preprocessor]PHP[/acronym]</entry>
+
+                        <entry><![CDATA[<acronym title="PHP Hypertext Preprocessor">PHP</acronym>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>[url=http://framework.zend.com/]Zend Framework[/url]</entry>
+
+                        <entry><![CDATA[<a href="http://framework.zend.com/">Zend Framework</a>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>[h1]foobar[/h1]</entry>
+
+                        <entry><![CDATA[<h1>foobar</h1>]]></entry>
+                    </row>
+
+                    <row>
+                        <entry>[img]http://framework.zend.com/images/logo.gif[/img]</entry>
+
+                        <entry><![CDATA[<img src="http://framework.zend.com/images/logo.gif" />]]></entry>
+                    </row>
+                </tbody>
+            </tgroup>
+        </table>
+    </sect2>
 </sect1>

+ 46 - 0
documentation/manual/de/module_specs/Zend_Oauth-Introduction.xml

@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 20232 -->
+<!-- Reviewed: no -->
+<sect1 id="zend.oauth.introduction" xmlns:xi="http://www.w3.org/2001/XInclude">
+    <title>Introduction to OAuth</title>
+
+    <para>
+        OAuth allows you to approve access by any application to your private data stored a website
+        without being forced to disclose your username or password. If you think about it, the
+        practice of handing over your username and password for sites like Yahoo Mail or Twitter has
+        been endemic for quite a while. This has raised some serious concerns because there's
+        nothing to prevent other applications from misusing this data.  Yes, some services may
+        appear trustworthy but that is never guaranteed.  OAuth resolves this problem by eliminating
+        the need for any username and password sharing, replacing it with a user controlled
+        authorization process.
+    </para>
+
+    <para>
+        This authorization process is token based. If you authorize an application (and by
+        application we can include any web based or desktop application) to access your data, it
+        will be in receipt of an Access Token associated with your account. Using this Access Token,
+        the application can access your private data without continually requiring your credentials.
+        In all this authorization delegation style of protocol is simply a more secure solution to
+        the problem of accessing private data via any web service API.
+    </para>
+
+    <para>
+        OAuth is not a completely new idea, rather it is a standardized protocol building on the
+        existing properties of protocols such as Google AuthSub, Yahoo BBAuth, Flickr API, etc.
+        These all to some extent operate on the basis of exchanging user credentials for an Access
+        Token of some description. The power of a standardized specification like OAuth is that it
+        only requires a single implementation as opposed to many disparate ones depending on the web
+        service. This standardization has not occurred independently of the major players, and
+        indeed many now support OAuth as an alternative and future replacement for their own
+        solutions.
+    </para>
+
+    <para>
+        Zend Framework's <classname>Zend_Oauth</classname> currently implements a full OAuth
+        Consumer conforming to the OAuth Core 1.0 Revision A Specification (24 June 2009) via the
+        <classname>Zend_Oauth_Consumer</classname> class.
+    </para>
+
+    <xi:include href="Zend_Oauth-ProtocolWorkflow.xml" />
+    <xi:include href="Zend_Oauth-SecurityArchitecture.xml" />
+</sect1>

+ 76 - 0
documentation/manual/de/module_specs/Zend_Oauth-ProtocolWorkflow.xml

@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 20232 -->
+<!-- Reviewed: no -->
+<sect2 id="zend.oauth.introduction.protocol-workflow">
+    <title>Protocol Workflow</title>
+
+    <para>
+        Before implementing OAuth it makes sense to understand how the protocol operates. To do so
+        we'll take the example of Twitter which currently implements OAuth based on the OAuth Core
+        1.0 Revision A Specification. This example looks at the protocol from the perspectives of
+        the User (who will approve access), the Consumer (who is seeking access) and the Provider
+        (who holds the User's private data). Access may be read-only or read and write.
+    </para>
+
+    <para>
+        By chance, our User has decided that they want to utilise a new service called TweetExpress
+        which claims to be capable of reposting your blog posts to Twitter in a manner of seconds.
+        TweetExpress is a registered application on Twitter meaning that it has access to a Consumer
+        Key and a Consumer Secret (all OAuth applications must have these from the Provider they
+        will be accessing) which identify its requests to Twitter and that ensure all requests can
+        be signed using the Consumer Secret to verify their origin.
+    </para>
+
+    <para>
+        To use TweetExpress you are asked to register for a new account, and after your registration
+        is confirmed you are informed that TweetExpress will seek to associate your Twitter account
+        with the service.
+    </para>
+
+    <para>
+        In the meantime TweetExpress has been busy. Before gaining your approval from Twitter, it
+        has sent a HTTP request to Twitter's service asking for a new unauthorized Request Token.
+        This token is not User specific from Twitter's perspective, but TweetExpress may use it
+        specifically for the current User and should associate it with their account and store it
+        for future use. TweetExpress now redirects the User to Twitter so they can approve
+        TweetExpress' access. The URL for this redirect will be signed using TweetExpress' Consumer
+        Secret and it will contain the unauthorized Request Token as a parameter.
+    </para>
+
+    <para>
+        At this point the User may be asked to log into Twitter and will now be faced with a Twitter
+        screen asking if they approve this request by TweetExpress to access Twitter's API on the
+        User's behalf. Twitter will record the response which we'll assume was positive. Based on
+        the User's approval, Twitter will record the current unauthorized Request Token as having
+        been approved by the User (thus making it User specific) and will generate a new value in
+        the form of a verification code. The User is now redirected back to a specific callback URL
+        used by TweetExpress (this callback URL may be registered with Twitter or dynamically set
+        using an oauth_callback parameter in requests). The redirect URL will contain the newly
+        generated verification code.
+    </para>
+
+    <para>
+        TweetExpress' callback URL will trigger an examination of the response to determine whether
+        the User has granted their approval to Twitter. Assuming so, it may now exchange it's
+        unauthorized Request Token for a fully authorized Access Token by sending a request back to
+        Twitter including the Request Token and the received verification code.  Twitter should now
+        send back a response containing this Access Token which must be used in all requests used to
+        access Twitter's API on behalf of the User. Twitter will only do this once they have
+        confirmed the attached Request Token has not already been used to retrieve another Access
+        Token. At this point, TweetExpress may confirm the receipt of the approval to the User and
+        delete the original Request Token which is no longer needed.
+    </para>
+
+    <para>
+        From this point forward, TweetExpress may use Twitter's API to post new tweets on the User's
+        behalf simply by accessing the API endpoints with a request that has been digitally signed
+        (via HMAC-SHA1) with a combination of TweetExpress' Consumer Secret and the Access Key being
+        used.
+    </para>
+
+    <para>
+        Although Twitter do not currently expire Access Tokens, the User is free to deauthorize
+        TweetExpress from their Twitter account settings.  Once deauthorized, TweetExpress' access
+        will be cut off and their Access Token rendered invalid.
+    </para>
+</sect2>

+ 80 - 0
documentation/manual/de/module_specs/Zend_Oauth-SecurityArchitecture.xml

@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 20232 -->
+<!-- Reviewed: no -->
+<sect2 id="zend.oauth.introduction.security-architecture">
+    <title>Security Architecture</title>
+
+    <para>
+        OAuth was designed specifically to operate over an insecure HTTP connection and so the use
+        of HTTPS is not required though obviously it would be desireable if available. Should a
+        HTTPS connection be feasible, OAuth offers a signature method implementation called
+        PLAINTEXT which may be utilised. Over a typical unsecured HTTP connection, the use of
+        PLAINTEXT must be avoided and an alternate scheme using. The OAuth specification defines two
+        such signature methods: HMAC-SHA1 and RSA-SHA1. Both are fully supported by
+        <classname>Zend_Oauth</classname>.
+    </para>
+
+    <para>
+        These signature methods are quite easy to understand. As you can imagine, a PLAINTEXT
+        signature method does nothing that bears mentioning since it relies on HTTPS. If you were to
+        use PLAINTEXT over HTTP, you are left with a significant problem: there's no way to be sure
+        that the content of any OAuth enabled request (which would include the OAuth Access Token)
+        was altered en route. This is because unsecured HTTP requests are always at risk of
+        eavesdropping, Man In The Middle (MITM) attacks, or other risks whereby a request can be
+        retooled so to speak to perform tasks on behalf of the attacker by masquerading as the
+        origin application without being noticed by the service provider.
+    </para>
+
+    <para>
+        HMAC-SHA1 and RSA-SHA1 alleviate this risk by digitally signing all OAuth requests with the
+        original application's registered Consumer Secret. Assuming only the Consumer and the
+        Provider know what this secret is, a middle-man can alter requests all they wish - but they
+        will not be able to validly sign them and unsigned or invalidly signed requests would be
+        discarded by both parties. Digital signatures therefore offer a guarantee that validly
+        signed requests do come from the expected party and have not been altered en route. This is
+        the core of why OAuth can operate over an unsecure connection.
+    </para>
+
+    <para>
+        How these digital signatures operate depends on the method used, i.e. HMAC-SHA1, RSA-SHA1 or
+        perhaps another method defined by the service provider. HMAC-SHA1 is a simple mechanism
+        which generates a Message Authentication Code (MAC) using a cryptographic hash function
+        (i.e. SHA1) in combination with a secret key known only to the message sender and receiver
+        (i.e. the OAuth Consumer Secret and the authorized Access Key combined). This hashing
+        mechanism is applied to the parameters and content of any OAuth requests which are
+        concatenated into a "base signature string" as defined by the OAuth specification.
+    </para>
+
+    <para>
+        RSA-SHA1 operates on similar principles except that the shared secret is, as you would
+        expect, each parties' RSA private key. Both sides would have the other's public key with
+        which to verify digital signatures. This does pose a level of risk compared to HMAC-SHA1
+        since the RSA method does not use the Access Key as part of the shared secret.  This means
+        that if the RSA private key of any Consumer is compromised, then all Access Tokens assigned
+        to that Consumer are also. RSA imposes an all or nothing scheme. In general, the majority of
+        service providers offering OAuth authorization have therefore tended to use HMAC-SHA1 by
+        default, and those who offer RSA-SHA1 may offer fallback support to HMAC-SHA1.
+    </para>
+
+    <para>
+        While digital signatures add to OAuth's security they are still vulnerable to other forms of
+        attack, such as replay attacks which copy earlier requests which were intercepted and
+        validly signed at that time.  An attacker can now resend the exact same request to a
+        Provider at will at any time and intercept its results. This poses a significant risk but it
+        is quiet simple to defend against - add a unique string (i.e. a nonce) to all requests which
+        changes per request (thus continually changing the signature string) but which can never be
+        reused because Providers actively track used nonces within the a certain window defined by
+        the timestamp also attached to a request. You might first suspect that once you stop
+        tracking a particular nonce, the replay could work but this ignore the timestamp which can
+        be used to determine a request's age at the time it was validly signed. One can assume that
+        a week old request used in an attempted replay should be summarily discarded!
+    </para>
+
+    <para>
+        As a final point, this is not an exhaustive look at the security architecture in OAuth. For
+        example, what if HTTP requests which contain both the Access Token and the Consumer Secret
+        are eavesdropped? The system relies on at one in the clear transmission of each unless HTTPS
+        is active, so the obvious conclusion is that where feasible HTTPS is to be preferred leaving
+        unsecured HTTP in place only where it is not possible or affordable to do so.
+    </para>
+</sect2>

+ 457 - 0
documentation/manual/de/module_specs/Zend_Serializer-Adapter.xml

@@ -0,0 +1,457 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 20234 -->
+<!-- Reviewed: no -->
+<sect1 id="zend.serializer.adapter">
+    <title>Zend_Serializer_Adapter</title>
+
+    <para>
+        <classname>Zend_Serializer</classname> adapters create a bridge for different methods of
+        serializing with very little effort.
+    </para>
+
+    <para>
+        Every adapter has different pros and cons. In some cases, not every PHP datatype (e.g.,
+        objects) can be converted to a string representation. In most such cases, the type will be
+        converted to a similar type that is serializable -- as an example, PHP objects will often be
+        cast to arrays.  If this fails, a <classname>Zend_Serializer_Exception</classname> will be
+        thrown.
+    </para>
+
+    <para>
+        Below is a list of available adapters.
+    </para>
+
+    <sect2 id="zend.serializer.adapter.phpserialize">
+        <title>Zend_Serializer_Adapter_PhpSerialize</title>
+
+        <para>
+            This adapter uses the built-in <methodname>un/serialize</methodname> PHP functions, and
+            is a good default adapter choice.
+        </para>
+
+        <para>
+            There are no configurable options for this adapter.
+        </para>
+    </sect2>
+
+    <sect2 id="zend.serializer.adapter.igbinary">
+        <title>Zend_Serializer_Adapter_Igbinary</title>
+
+        <para>
+            <ulink url="http://opensource.dynamoid.com">Igbinary</ulink> is Open Source Software
+            released by Sulake Dynamoid Oy. It's a drop-in replacement for the standard PHP
+            serializer. Instead of time and space consuming textual representation, igbinary stores
+            PHP data structures in a compact binary form. Savings are significant when using
+            memcached or similar memory based storages for serialized data.
+        </para>
+
+        <para>
+            You need the igbinary PHP extension installed on your system in order to use this
+            adapter.
+        </para>
+
+        <para>
+            There adapter takes no configuration options.
+        </para>
+    </sect2>
+
+    <sect2 id="zend.serializer.adapter.wddx">
+        <title>Zend_Serializer_Adapter_Wddx</title>
+
+        <para>
+            <ulink url="http://wikipedia.org/wiki/WDDX">WDDX</ulink> (Web Distributed Data eXchange)
+            is a programming-language-, platform-, and transport-neutral data interchange mechanism
+            for passing data between different environments and different computers.
+        </para>
+
+        <para>
+            The adapter simply uses the <ulink url="http://php.net/manual/book.wddx.php">wddx_*()</ulink>
+            PHP functions. Please read the php manual to determine how you may enable them in your
+            PHP installation.
+        </para>
+
+        <para>
+            Additionally, the <ulink
+                url="http://php.net/manual/book.simplexml.php">SimpleXML</ulink> PHP extension is
+            used to check if a returned <constant>NULL</constant> value from
+            <methodname>wddx_unserialize()</methodname> is based on a serialized
+            <constant>NULL</constant> or on invalid data.
+        </para>
+
+        <para>
+            Available options include:
+        </para>
+
+        <table>
+            <title>Zend_Serializer_Adapter_Wddx Options</title>
+
+            <tgroup cols="4">
+                 <thead>
+                      <row>
+                          <entry>Option</entry>
+
+                          <entry>Data Type</entry>
+
+                          <entry>Default Value</entry>
+
+                          <entry>Description</entry>
+                    </row>
+                 </thead>
+
+                 <tbody>
+                      <row>
+                          <entry><emphasis>comment</emphasis></entry>
+
+                          <entry><type>string</type></entry>
+
+                          <entry></entry>
+
+                          <entry>
+                            An optional comment that appears in the packet header.
+                          </entry>
+                      </row>
+                  </tbody>
+             </tgroup>
+        </table>
+    </sect2>
+
+    <sect2 id="zend.serializer.adapter.json">
+        <title>Zend_Serializer_Adapter_Json</title>
+
+        <para>
+            The <acronym>JSON</acronym> adapter provides a bridge to the
+            <classname>Zend_Json</classname> component and/or ext/json. Please read the <link
+                linkend= "zend.json.introduction">Zend_Json documentation</link> for further
+            information.
+        </para>
+
+        <para>
+            Available options include:
+        </para>
+
+        <table>
+            <title>Zend_Serializer_Adapter_Json Options</title>
+
+            <tgroup cols="4">
+                 <thead>
+                      <row>
+                        <entry>Option</entry>
+
+                        <entry>Data Type</entry>
+
+                        <entry>Default Value</entry>
+
+                        <entry>Description</entry>
+                    </row>
+                 </thead>
+
+                 <tbody>
+                      <row>
+                          <entry><emphasis>cycleCheck</emphasis></entry>
+
+                          <entry><type>boolean</type></entry>
+
+                          <entry>false</entry>
+
+                          <entry>
+                               See <xref linkend= "zend.json.advanced.objects1"/>
+                          </entry>
+                      </row>
+
+                      <row>
+                          <entry><emphasis>objectDecodeType</emphasis></entry>
+
+                          <entry><type>Zend_Json::TYPE_*</type></entry>
+
+                          <entry>Zend_Json::TYPE_ARRAY</entry>
+
+                          <entry>
+                               See <xref linkend= "zend.json.advanced.objects1"/>
+                          </entry>
+                      </row>
+
+                      <row>
+                          <entry><emphasis>enableJsonExprFinder</emphasis></entry>
+
+                          <entry><type>boolean</type></entry>
+
+                          <entry>false</entry>
+
+                          <entry>
+                               See <xref linkend= "zend.json.advanced.expr"/>
+                          </entry>
+                      </row>
+                  </tbody>
+             </tgroup>
+        </table>
+    </sect2>
+
+    <sect2 id="zend.serializer.adapter.amf03">
+        <title>Zend_Serializer_Adapter_Amf 0 and 3</title>
+
+        <para>
+            The <acronym>AMF</acronym> adapters, <classname>Zend_Serializer_Adapter_Amf0</classname>
+            and <classname>Zend_Serializer_Adapter_Amf3</classname>, provide a bridge to the
+            serializer of the <classname>Zend_Amf</classname> component. Please read the <link
+                linkend= "zend.amf.introduction">Zend_Amf documentation</link> for further
+            information.
+        </para>
+
+        <para>
+            There are no options for these adapters.
+        </para>
+    </sect2>
+
+    <sect2 id="zend.serializer.adapter.pythonpickle">
+        <title>Zend_Serializer_Adapter_PythonPickle</title>
+
+        <para>
+            This adapter converts PHP types to a <ulink
+                url="http://docs.python.org/library/pickle.html">Python Pickle</ulink> string
+            representation.  With it, you can read the serialized data with Python and read Pickled
+            data of Python with PHP.
+        </para>
+
+        <para>
+            Available options include:
+        </para>
+
+        <table>
+            <title>Zend_Serializer_Adapter_PythonPickle Options</title>
+
+            <tgroup cols="4">
+                 <thead>
+                      <row>
+                        <entry>Option</entry>
+
+                        <entry>Data Type</entry>
+
+                        <entry>Default Value</entry>
+
+                        <entry>Description</entry>
+                    </row>
+                 </thead>
+
+                 <tbody>
+                      <row>
+                          <entry><emphasis>protocol</emphasis></entry>
+
+                          <entry><type>integer</type> (0 | 1 | 2 | 3)</entry>
+
+                          <entry>0</entry>
+
+                          <entry>
+                               The Pickle protocol version used on <methodname>serialize</methodname>
+                          </entry>
+                      </row>
+                  </tbody>
+             </tgroup>
+        </table>
+
+        <para>
+            Datatype merging (PHP to Python) occurs as follows:
+        </para>
+
+        <table>
+            <title>Datatype merging (PHP to Python)</title>
+
+            <tgroup cols="2">
+                 <thead>
+                      <row>
+                        <entry>PHP Type</entry>
+
+                        <entry>Python Type</entry>
+                    </row>
+                 </thead>
+
+                 <tbody>
+                      <row>
+                          <entry><type>NULL</type></entry>
+
+                          <entry><type>None</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>boolean</type></entry>
+
+                          <entry><type>boolean</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>integer</type></entry>
+
+                          <entry><type>integer</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>float</type></entry>
+
+                          <entry><type>float</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>string</type></entry>
+
+                          <entry><type>string</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>array</type></entry>
+
+                          <entry><type>list</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>associative array</type></entry>
+
+                          <entry><type>dictionary</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>object</type></entry>
+
+                          <entry><type>dictionary</type></entry>
+                      </row>
+                  </tbody>
+             </tgroup>
+        </table>
+
+        <para>
+            Datatype merging (Python to PHP) occurs per the following:
+        </para>
+
+        <table>
+            <title>Datatype merging (Python to PHP)</title>
+
+            <tgroup cols="2">
+                 <thead>
+                      <row>
+                        <entry>Python-Type</entry>
+
+                        <entry>PHP-Type</entry>
+                    </row>
+                 </thead>
+
+                 <tbody>
+                      <row>
+                          <entry><type>None</type></entry>
+
+                          <entry><type>NULL</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>boolean</type></entry>
+
+                          <entry><type>boolean</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>integer</type></entry>
+
+                          <entry><type>integer</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>long</type></entry>
+
+                          <entry>
+                              <type>integer</type>
+                              | <type>float</type>
+                              | <type>string</type>
+                              | <classname>Zend_Serializer_Exception</classname>
+                          </entry>
+                      </row>
+
+                      <row>
+                          <entry><type>float</type></entry>
+
+                          <entry><type>float</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>string</type></entry>
+
+                          <entry><type>string</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>bytes</type></entry>
+
+                          <entry><type>string</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>Unicode string</type></entry>
+
+                          <entry><type>UTF-8 string</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>list</type></entry>
+
+                          <entry><type>array</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>tuple</type></entry>
+
+                          <entry><type>array</type></entry>
+                      </row>
+
+                      <row>
+                          <entry><type>dictionary</type></entry>
+
+                          <entry><type>associative array</type></entry>
+                      </row>
+
+                      <row>
+                          <entry>All other types</entry>
+
+                          <entry><classname>Zend_Serializer_Exception</classname></entry>
+                      </row>
+                  </tbody>
+             </tgroup>
+        </table>
+    </sect2>
+
+    <sect2 id="zend.serializer.adapter.phpcode">
+        <title>Zend_Serializer_Adapter_PhpCode</title>
+
+        <para>
+            This adapter generates a parsable PHP code representation using <ulink
+                url="http://php.net/manual/function.var-export.php">var_export()</ulink>. On
+            restoring, the data will be executed using <ulink
+                url="http://php.net/manual/function.eval.php">eval</ulink>.
+        </para>
+
+        <para>
+            There are no configuration options for this adapter.
+        </para>
+
+        <warning>
+            <title>Unserializing objects</title>
+
+            <para>
+                Objects will be serialized using the <ulink
+                    url="http://php.net/manual/language.oop5.magic.php#language.oop5.magic.set-state">__set_state</ulink>
+                magic method. If the class doesn't implement this method, a fatal error will occur
+                during execution.
+            </para>
+        </warning>
+
+        <warning>
+            <title>Uses eval()</title>
+
+            <para>
+                The <classname>PhpCode</classname> adapter utilizes <methodname>eval()</methodname>
+                to unserialize. This introduces both a performance and potential security issue as a
+                new process will be executed. Typically, you should use the
+                <methodname>PhpSerialize</methodname> adapter unless you require human-readability
+                of the serialized data.
+            </para>
+        </warning>
+    </sect2>
+</sect1>
+<!--
+vim:se ts=4 sw=4 et:
+-->

+ 102 - 0
documentation/manual/de/module_specs/Zend_Serializer-Introduction.xml

@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 20225 -->
+<!-- Reviewed: no -->
+<sect1 id="zend.serializer.introduction">
+    <title>Introduction</title>
+
+    <para>
+        <classname>Zend_Serializer</classname> provides an adapter based interface to simply
+        generate storable representation of php types by different facilities, and recover.
+    </para>
+
+    <example id="zend.serializer.introduction.example.dynamic">
+        <title>Using <classname>Zend_Serializer</classname> dynamic interface</title>
+
+        <para>
+            To instantiate a serializer you should use the factory method with the name of the
+            adapter:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$serializer = Zend_Serializer::factory('PhpSerialize');
+// Now $serializer is an instance of Zend_Serializer_Adapter_AdapterInterface,
+// specifically Zend_Serializer_Adapter_PhpSerialize
+
+try {
+    $serialized = $serializer->serialize($data);
+    // now $serialized is a string
+
+    $unserialized = $serializer->unserialize($serialized);
+    // now $data == $unserialized
+} catch (Zend_Serializer_Exception $e) {
+    echo $e;
+}
+]]></programlisting>
+    </example>
+
+    <para>
+        The method <methodname>serialize</methodname> generates a storable string. To regenerate
+        this serialized data you can simply call the method <methodname>unserialize</methodname>.
+    </para>
+
+    <para>
+        Any time an error is encountered serializing or unserializing,
+        <classname>Zend_Serializer</classname> will throw a
+        <classname>Zend_Serializer_Exception</classname>.
+    </para>
+
+    <para>
+        To configure a given serializer adapter, you can optionally add an array or an instance of
+        <classname>Zend_Config</classname> to the <methodname>factory</methodname> or to the
+        <methodname>un-/serialize</methodname> methods:
+    </para>
+
+    <programlisting language="php"><![CDATA[
+$serializer = Zend_Serializer::factory('Wddx', array(
+    'comment' => 'serialized by Zend_Serializer',
+));
+
+try {
+    $serialized = $serializer->serialize($data, array('comment' => 'change comment'));
+    $unserialized = $serializer->unserialize($serialized, array(/* options for unserialize */));
+} catch (Zend_Serializer_Exception $e) {
+    echo $e;
+}
+]]></programlisting>
+
+    <para>
+        Options passed to the <methodname>factory</methodname> are valid for the instantiated
+        object. You can change these options using the <methodname>setOption(s)</methodname> method.
+        To change one or more options only for a single call, pass them as the second argument to
+        either the <methodname>serialize</methodname> or <methodname>unserialize</methodname>
+        method.
+    </para>
+
+    <sect2 id="zend.serializer.introduction.example.static.php">
+        <title>Using the Zend_Serializer static interface</title>
+
+        <para>
+            You can register a specific serializer adapter as a default serialization adapter for
+            use with <classname>Zend_Serializer</classname>. By default, the
+            <classname>PhpSerialize</classname> adapter will be registered, but you can change this
+            option using the <methodname>setDefaultAdapter()</methodname> static method.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+Zend_Serializer::setDefaultAdapter('PhpSerialize', $options);
+// or
+$serializer = Zend_Serializer::factory('PhpSerialize', $options);
+Zend_Serializer::setDefaultAdapter($serializer);
+
+try {
+    $serialized   = Zend_Serializer::serialize($data, $options);
+    $unserialized = Zend_Serializer::unserialize($serialized, $options);
+} catch (Zend_Serializer_Exception $e) {
+    echo $e;
+}
+]]></programlisting>
+    </sect2>
+</sect1>
+<!--
+vim:se ts=4 sw=4 et:
+-->

+ 889 - 0
documentation/manual/de/module_specs/Zend_Service_DeveloperGarden.xml

@@ -0,0 +1,889 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 20221 -->
+<!-- Reviewed: no -->
+<sect1 id="zend.service.developergarden">
+    <title>Zend_Service_DeveloperGarden</title>
+
+    <sect2 id="zend.service.developergarden.introduction">
+        <title>Introduction to DeveloperGarden</title>
+
+        <para>
+            DeveloperGarden is the name for the &quot;Open Development services&quot; of the German
+            Telekom. The &quot;Open Development services&quot; are a set of <acronym>SOAP</acronym>
+            API Services.
+        </para>
+
+        <para>
+            The family of <classname>Zend_Service_DeveloperGarden</classname> components provides a
+            clean and simple interface to the <ulink
+                url="http://www.developergarden.com">DeveloperGarden API</ulink> and additionally
+            offers functionality to improve handling and performance.
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>
+                    <link linkend="zend.service.developergarden.baseuserservice">BaseUserService</link>:
+                    Class to manage API quota and user accounting details.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <link linkend="zend.service.developergarden.iplocation">IpLocation</link>:
+                    Locale the given IP and returns geo coordinates. Works only with IPs allocated
+                    in the network of the german telekom.
+                    </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <link linkend="zend.service.developergarden.localsearch">LocalSearch</link>:
+                    Allows you to search with options nearby or around a given geo coordinate or city.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <link linkend="zend.service.developergarden.sendsms">SendSms</link>: Send a Sms
+                    or Flash Sms to a given number.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <link linkend="zend.service.developergarden.smsvalidation">SmsValidation</link>:
+                    You can validate a number to use it with SendSms for also supply a back channel.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <link linkend="zend.service.developergarden.voicecall">VoiceCall</link>:
+                    Initiates a call between two numbers.
+                 </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <link linkend="zend.service.developergarden.conferencecall">ConferenceCall</link>:
+                    You can configure a whole conference room with participants for an adhoc
+                    conference or you can also schedule your conference.
+                </para>
+            </listitem>
+        </itemizedlist>
+
+        <para>
+            The backend SOAP API is documented
+            <ulink url="http://www.developergarden.com/openapi/dokumentation/">here</ulink>.
+        </para>
+
+        <sect3 id="zend.service.developergarden.account">
+            <title>Sign Up for an Account</title>
+
+            <para>
+                Before you can start using the DeveloperGarden API, you must first
+                <ulink url="http://www.developergarden.com/register">sign up</ulink> for an account.
+            </para>
+        </sect3>
+
+        <sect3 id="zend.service.developergarden.environment">
+            <title>The Environment</title>
+
+            <para>
+                With the DeveloperGarden API you have the possibility to choose 3 different
+                environments to work on.
+            </para>
+
+            <itemizedlist>
+                <listitem>
+                    <para>
+                        <emphasis>production</emphasis>: In Production environement you have to pay
+                        for calls, sms and other payable services.
+                    </para>
+                </listitem>
+
+                <listitem>
+                    <para>
+                        <emphasis>sandbox</emphasis>: In the Sandbox mode you can use the same
+                        features with some limitations like in the production just without to pay
+                        for them. Normally during development you can test your application.
+                    </para>
+                </listitem>
+
+                <listitem>
+                    <para>
+                        <emphasis>mock</emphasis>: The Mock environment allows you to build your
+                        application and have results but you don not initiate any action on the API
+                        side.
+                    </para>
+                </listitem>
+            </itemizedlist>
+
+            <para>
+                For every environment and service are some special features (options) available for
+                testing. Please look <ulink
+                    url="http://www.developergarden.com/openapi/dokumentation/">here</ulink> for
+                details.
+            </para>
+        </sect3>
+
+        <sect3 id="zend.service.developergarden.config">
+            <title>Your configuration</title>
+
+            <para>
+                You can pass to all classes an array of configuration values. Possible values are:
+            </para>
+
+            <itemizedlist>
+                <listitem>
+                    <para>
+                        <emphasis>username</emphasis>: Your DeveloperGarden API username.
+                    </para>
+                </listitem>
+
+                <listitem>
+                    <para>
+                        <emphasis>password</emphasis>: Your DeveloperGarden API password.
+                    </para>
+                </listitem>
+
+                <listitem>
+                    <para>
+                        <emphasis>environment</emphasis>: The environment that you selected.
+                    </para>
+                </listitem>
+            </itemizedlist>
+
+            <example id="zend.service.developergarden.config.example">
+                <title>Configuration Example</title>
+
+                <programlisting language="php"><![CDATA[
+require_once 'Zend/Service/DeveloperGarden/SendSms.php';
+$config = array(
+    'username'    => 'yourUsername',
+    'password'    => 'yourPassword',
+    'environment' => Zend_Service_DeveloperGarden_SendSms::ENV_PRODUCTION,
+);
+$service = new Zend_Service_DeveloperGarden_SendSms($config);
+]]></programlisting>
+            </example>
+        </sect3>
+    </sect2>
+
+    <sect2 id="zend.service.developergarden.baseuserservice">
+        <title>BaseUserService</title>
+
+        <para>
+            The class can be used to set and get quota values for the services and to fetch
+            account details.
+        </para>
+
+        <para>
+            The <methodname>getAccountBalance()</methodname> method is there to fetch an array
+            of account id's with the current balance status (credits).
+        </para>
+
+        <example id="zend.service.developergarden.baseuserservice.getaccountbalance.example">
+            <title>Get account balance example</title>
+
+            <programlisting language="php"><![CDATA[
+$service = new Zend_Service_DeveloperGarden_BaseUserService($config);
+print_r($service->getAccountBalance());
+]]></programlisting>
+        </example>
+
+        <sect3 id="zend.service.developergarden.baseuserservice.getquotainformation">
+            <title>Get quota information</title>
+
+            <para>
+                You can fetch quota informations for a specific service module with the
+                provided methods.
+            </para>
+
+            <example id="zend.service.developergarden.baseuserservice.getquotainformation.example">
+                <title>Get quota information example</title>
+
+                <programlisting language="php"><![CDATA[
+$service = new Zend_Service_DeveloperGarden_BaseUserService($config);
+$result = $service->getSmsQuotaInformation(
+    Zend_Service_DeveloperGarden_BaseUserService::ENV_PRODUCTION
+);
+echo 'Sms Quota:<br />';
+echo 'Max Quota: ', $result->getMaxQuota(), '<br />';
+echo 'Max User Quota: ', $result->getMaxUserQuota(), '<br />';
+echo 'Quota Level: ', $result->getQuotaLevel(), '<br />';
+]]></programlisting>
+            </example>
+
+            <para>
+                You get a <classname>Result</classname> object that contains all information that
+                you need, optional you can pass to the <methodname>QuotaInformation</methodname>
+                method the environment constant to fetch the quota for the specific environment.
+            </para>
+
+            <para>
+                Here a list of all <methodname>getQuotaInformation</methodname> methods:
+            </para>
+
+            <itemizedlist>
+                <listitem>
+                    <para>
+                        <methodname>getConfernceCallQuotaInformation()</methodname>
+                    </para>
+                </listitem>
+
+                <listitem>
+                    <para>
+                        <methodname>getIPLocationQuotaInformation()</methodname>
+                    </para>
+                </listitem>
+
+                <listitem>
+                    <para>
+                        <methodname>getLocalSearchQuotaInformation()</methodname>
+                    </para>
+                </listitem>
+
+                <listitem>
+                    <para>
+                        <methodname>getSmsQuotaInformation()</methodname>
+                    </para>
+                </listitem>
+
+                <listitem>
+                    <para>
+                        <methodname>getVoiceCallQuotaInformation()</methodname>
+                    </para>
+                </listitem>
+            </itemizedlist>
+        </sect3>
+
+        <sect3 id="zend.service.developergarden.baseuserservice.changequotainformation">
+            <title>Change quota information</title>
+
+            <para>
+                To change the current quota use one of the <methodname>changeQuotaPool</methodname>
+                methods.  First parameter is the new pool value and the second one is the
+                environment.
+            </para>
+
+            <example id="zend.service.developergarden.baseuserservice.changequotainformation.example">
+                <title>Change quota information example</title>
+
+                <programlisting language="php"><![CDATA[
+$service = new Zend_Service_DeveloperGarden_BaseUserService($config);
+$result = $service->changeSmsQuotaPool(
+    1000,
+    Zend_Service_DeveloperGarden_BaseUserService::ENV_PRODUCTION
+);
+if (!$result->hasError()) {
+    echo 'updated Quota Pool';
+}
+]]></programlisting>
+            </example>
+
+            <para>
+                Here a list of all <methodname>changeQuotaPool</methodname> methods:
+            </para>
+
+            <itemizedlist>
+                <listitem>
+                    <para>
+                        <methodname>changeConferenceCallQuotaPool()</methodname>
+                    </para>
+                </listitem>
+
+                <listitem>
+                    <para>
+                        <methodname>changeIPLocationQuotaPool()</methodname>
+                    </para>
+                </listitem>
+
+                <listitem>
+                    <para>
+                        <methodname>changeLocalSearchQuotaPool()</methodname>
+                    </para>
+                </listitem>
+
+                <listitem>
+                    <para>
+                        <methodname>changeSmsQuotaPool()</methodname>
+                    </para>
+                </listitem>
+
+                <listitem>
+                    <para>
+                        <methodname>changeVoiceCallQuotaPool()</methodname>
+                    </para>
+                </listitem>
+            </itemizedlist>
+        </sect3>
+    </sect2>
+
+    <sect2 id="zend.service.developergarden.iplocation">
+        <title>IP Location</title>
+
+        <para>
+            This service allows you to retrieve location information for a given IP address.
+        </para>
+
+        <para>
+            There are some limitations:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>The IP address must be in the T-Home network</para>
+            </listitem>
+
+            <listitem>
+                <para>Just the next big city will be resolved</para>
+            </listitem>
+
+            <listitem>
+                <para>IPv6 is not supported yet</para>
+            </listitem>
+        </itemizedlist>
+
+        <example id="zend.service.developergarden.iplocation.locateip.example">
+            <title>Locate a given IP</title>
+
+            <programlisting language="php"><![CDATA[
+$service = new Zend_Service_DeveloperGarden_IpLocation($config);
+$service->setEnvironment(
+    Zend_Service_DeveloperGarden_IpLocation::ENV_MOCK
+);
+$ip = new Zend_Service_DeveloperGarden_IpLocation_IpAddress('127.0.0.1');
+print_r($service->locateIp($ip));
+]]></programlisting>
+        </example>
+    </sect2>
+
+    <sect2 id="zend.service.developergarden.localsearch">
+        <title>Local Search</title>
+
+        <para>
+            The Local Search service provides the local search machine <ulink
+                url="http://www.suchen.de">suchen.de</ulink> via a the web service interface.  For
+            more details, refer to <ulink
+                url="http://www.developergarden.com/static/docu/en/ch04s02s06.html">the
+                documentation</ulink>.
+        </para>
+
+        <example id="zend.service.developergarden.localsearch.example">
+            <title>Locate a Restaurant</title>
+
+            <programlisting language="php"><![CDATA[
+$service = new Zend_Service_DeveloperGarden_LocalSearch($config);
+$search  = new Zend_Service_DeveloperGarden_LocalSearch_SearchParameters();
+/**
+ * @see http://www.developergarden.com/static/docu/en/ch04s02s06s04.html
+ */
+$search->setWhat('pizza')
+       ->setWhere('jena');
+print_r($service->localSearch($search));
+]]></programlisting>
+        </example>
+    </sect2>
+
+    <sect2 id="zend.service.developergarden.sendsms">
+        <title>Send SMS</title>
+
+        <para>
+            The Send SMS service is used to send normal and Flash SMS to any number.
+        </para>
+
+        <para>
+            The following restrictions apply to the use of the SMS service:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>
+                    An SMS or Flash SMS in the production environment must not be longer than
+                    765 characters and must not be sent to more than 10 recipients.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    An SMS or Flash SMS in the sandbox environment is shortened and enhanced by a
+                    note in the DeveloperGarden. The maximum length of the message sent is 160
+                    characters.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    In the sandbox environment, a maximum of 10 SMS can be sent per day.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    The following characters are counted twice:
+                    <literal>| ^ € { } [ ] ~ \ LF</literal> (line break)
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    If an SMS or Flash SMS is longer than 160 characters, one message is charged for
+                    each 153 characters (quota and credit).
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    Delivery cannot be guaranteed for SMS or Flash SMS to landline numbers.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    The sender can exist of a maximum of 11 characters. Permitted characters are
+                    letters and numbers.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    The specification of a phone number as the sender is only permitted if the phone
+                    number has been validated. (See: <link
+                        linkend="zend.service.developergarden.smsvalidation">SMS Validation</link>)
+                </para>
+            </listitem>
+        </itemizedlist>
+
+        <example id="zend.service.developergarden.sendsms.example">
+            <title>Sending an SMS</title>
+
+            <programlisting language="php"><![CDATA[
+$service = new Zend_Service_DeveloperGarden_SendSms($config);
+$sms = $service->createSms(
+    '+49-172-123456; +49-177-789012',
+    'your test message',
+    'yourname'
+);
+print_r($service->send($sms));]]></programlisting>
+        </example>
+    </sect2>
+
+    <sect2 id="zend.service.developergarden.smsvalidation">
+        <title>SMS Validation</title>
+
+        <para>
+            The SMS Validation service allows the validation of physical phone number to be used
+            as the sender of an SMS.
+        </para>
+
+        <para>
+            First, call <methodname>setValidationKeyword()</methodname> to receive an SMS
+            with a keyword.
+        </para>
+
+        <para>
+            After you get your keyword, you have to use the <methodname>validate()</methodname> to
+            validate your number with the keyword against the service.
+        </para>
+
+        <para>
+            With the method <methodname>getValidatedNumbers()</methodname>, you will get a list
+            of all already validated numbers and the status of each.
+        </para>
+
+        <example id="zend.service.developergarden.smsvalidation.request.example">
+            <title>Request validation keyword</title>
+
+            <programlisting language="php"><![CDATA[
+$service = new Zend_Service_DeveloperGarden_SmsValidation($config);
+print_r($service->sendValidationKeyword('+49-172-123456'));
+]]></programlisting>
+        </example>
+
+        <example id="zend.service.developergarden.smsvalidation.validate.example">
+            <title>Validate a number with a keyword</title>
+
+            <programlisting language="php"><![CDATA[
+$service = new Zend_Service_DeveloperGarden_SmsValidation($config);
+print_r($service->validate('TheKeyWord', '+49-172-123456'));
+]]></programlisting>
+        </example>
+
+        <para>
+            To invalidate a validated number, call the method <methodname>inValidate()</methodname>.
+        </para>
+    </sect2>
+
+    <sect2 id="zend.service.developergarden.voicecall">
+        <title>Voice Call</title>
+
+        <para>
+            The Voice Call service is used for setting up a voice connection between two telephone
+            connections. For specific details please read the <ulink
+                url="http://www.developergarden.com/static/docu/en/ch04s02.html">API
+                Documentation</ulink>.
+        </para>
+
+        <para>
+            Normally the Service works as followed:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>
+                    Call the first participant.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    If the connection is successful, call the second participant.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    If second participant connects succesfully, both participants are connected.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    The call is open until one of the participants hangs up or the expire mechanism
+                    intercepts.
+                </para>
+            </listitem>
+        </itemizedlist>
+
+        <example id="zend.service.developergarden.voicecall.call.example">
+            <title>Call two numbers</title>
+
+            <programlisting language="php"><![CDATA[
+$service = new Zend_Service_DeveloperGarden_VoiceCall($config);
+$aNumber = '+49-30-000001';
+$bNumber = '+49-30-000002';
+$expiration  = 30;  // seconds
+$maxDuration = 300; // 5 mins
+$newCall = $service->newCall($aNumber, $bNumber, $expiration, $maxDuration);
+echo $newCall->getSessionId();
+]]></programlisting>
+        </example>
+
+        <para>
+            If the call is initiated, you can ask the result object for the session ID and
+            use this session ID for an additional call to the <methodname>callStatus</methodname>
+            or <methodname>tearDownCall()</methodname> methods. The second parameter on the
+            <methodname>callStatus()</methodname> method call extends the expiration for this call.
+        </para>
+
+        <example id="zend.service.developergarden.voicecall.teardown.example">
+            <title>Call two numbers, ask for status, and cancel</title>
+
+            <programlisting language="php"><![CDATA[
+$service = new Zend_Service_DeveloperGarden_VoiceCall($config);
+$aNumber = '+49-30-000001';
+$bNumber = '+49-30-000002';
+$expiration  = 30; // seconds
+$maxDuration = 300; // 5 mins
+
+$newCall = $service->newCall($aNumber, $bNumber, $expiration, $maxDuration);
+
+$sessionId = $newCall->getSessionId();
+
+$service->callStatus($sessionId, true); // extend the call
+
+sleep(10); // sleep 10s and then tearDown
+
+$service->tearDownCall($sessionId);
+]]></programlisting>
+        </example>
+    </sect2>
+
+    <sect2 id="zend.service.developergarden.conferencecall">
+        <title>ConferenceCall</title>
+
+        <para>
+            Conference Call allows you to setup and start a phone conference.
+        </para>
+
+        <para>
+            The following features are available:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>
+                    Conferences with an immediate start
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    Conferences with a defined start date
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    Recurring conference series
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    Adding, removing, and muting of participants from a conference
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    Templates for conferences
+                </para>
+            </listitem>
+        </itemizedlist>
+
+        <para>
+            Here is a list of currently implemented API methods:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>
+                    <methodname>createConference()</methodname> creates a new conference
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>updateConference()</methodname> updates an existing conference
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>commitConference()</methodname> saves the conference, and, if no date
+                    is configured, immediately starts the conference
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>removeConference()</methodname> removes a conference
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>getConferenceList()</methodname> returns a list of all configured
+                    conferences
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>getConferenceStatus()</methodname> displays information for an
+                    existing conference
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>getParticipantStatus()</methodname> displays status information
+                    about a conference participant
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>newParticipant()</methodname> creates a new participant
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>addParticipant()</methodname> adds a participant to a conference
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>updateParticipant()</methodname> updates a participant,
+                    usually to mute or redial the participant
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>removeParticipant()</methodname> removes a participant from a
+                    conference
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>getRunningConference()</methodname> requests the running instance of
+                    a planned conference
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>createConferenceTemplate()</methodname> creates a new conference
+                    template
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>getConferenceTemplate()</methodname> requests an existing conference
+                    template
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>updateConferenceTemplate()</methodname> updates existing conference
+                    template details
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>removeConferenceTemplate()</methodname> removes a conference template
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>getConferenceTemplateList()</methodname> requests all conference
+                    templates of an owner
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>addConferenceTemplateParticipant()</methodname> adds a conference
+                    participant to conference template
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>getConferenceTemplateParticipant()</methodname> displays details of
+                    a participant of a conference template
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>updateConferenceTemplateParticipant()</methodname> updates
+                    participant details within a conference template
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>removeConferenceTemplateParticipant()</methodname> removes
+                    a participant from a conference template
+                </para>
+            </listitem>
+        </itemizedlist>
+
+        <example id="zend.service.developergarden.conferencecall.example">
+            <title>Ad-Hoc conference</title>
+
+            <programlisting language="php"><![CDATA[
+$client = new Zend_Service_DeveloperGarden_ConferenceCall($config);
+
+$conferenceDetails = new Zend_Service_DeveloperGarden_ConferenceCall_ConferenceDetail(
+    'Zend-Conference',                    // name for the conference
+    'this is my private zend conference', // description
+    60                                    // duration in seconds
+);
+
+$conference = $client->createConference('MyName', $conferenceDetails);
+
+$part1 = new Zend_Service_DeveloperGarden_ConferenceCall_ParticipantDetail(
+    'Jon',
+    'Doe',
+    '+49-123-4321',
+    'your.name@example.com',
+    true
+);
+
+$client->newParticipant($conference->getConferenceId(), $part1);
+// add a second, third ... participant
+
+$client->commitConference($conference->getConferenceId());
+]]></programlisting>
+        </example>
+    </sect2>
+
+    <sect2 id="zend.service.developergarden.performance">
+        <title>Performance and Caching</title>
+
+        <para>
+            You can setup various caching options to improve the performance for resolving WSDL and
+            authentication tokens.
+        </para>
+
+        <para>
+            First of all, you can setup the internal SoapClient (PHP) caching values.
+        </para>
+
+        <example id="zend.service.developergarden.performance.wsdlcache.example">
+            <title>WSDL cache options</title>
+
+            <programlisting language="php"><![CDATA[
+Zend_Service_DeveloperGarden_SecurityTokenServer_Cache::setWsdlCache([PHP CONSTANT]);
+]]></programlisting>
+        </example>
+
+        <para>
+            The <constant>[PHP CONSTANT]</constant> can be one of the following values:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>
+                    <constant>WSDL_CACHE_DISC</constant>: enabled disc caching
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <constant>WSDL_CACHE_MEMORY</constant>: enabled memory caching
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <constant>WSDL_CACHE_BOTH</constant>: enabled disc and memory caching
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <constant>WSDL_CACHE_NONE</constant>: disabled both caching
+                </para>
+            </listitem>
+        </itemizedlist>
+
+        <para>
+            If you want also to cache the result for calls to the SecuritTokenServer
+            you can setup a <classname>Zend_Cache</classname> instance and pass it to the
+            <methodname>setCache()</methodname>.
+        </para>
+
+        <example id="zend.service.developergarden.performance.cache.example">
+            <title>SecurityTokenServer cache option</title>
+
+            <programlisting language="php"><![CDATA[
+$cache = Zend_Cache::factory('Core', ...);
+Zend_Service_DeveloperGarden_SecurityTokenServer_Cache::setCache($cache);
+]]></programlisting>
+        </example>
+    </sect2>
+</sect1>

+ 125 - 0
documentation/manual/de/module_specs/Zend_Validate-Isbn.xml

@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 20229 -->
+<!-- Reviewed: no -->
+<sect2 id="zend.validate.set.isbn">
+    <title>Isbn</title>
+
+    <para>
+        <classname>Zend_Validate_Isbn</classname> allows you to validate an
+        <acronym>ISBN-10</acronym> or <acronym>ISBN-13</acronym> value.
+    </para>
+
+    <sect3 id="zend.validate.set.isbn.basic">
+        <title>Basic usage</title>
+
+        <para>
+            A basic example of usage is below:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$validator = new Zend_Validate_Isbn();
+if ($validator->isValid($isbn)) {
+    // isbn is valid
+} else {
+    // isbn is not valid
+}
+]]></programlisting>
+
+        <para>
+            This will validate any <acronym>ISBN-10</acronym> and <acronym>ISBN-13</acronym> without
+            separator.
+        </para>
+    </sect3>
+
+    <sect3 id="zend.validate.set.isbn.type-explicit">
+        <title>Setting an explicit ISBN validation type</title>
+
+        <para>
+            An example of an <acronym>ISBN</acronym> type restriction is below:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$validator = new Zend_Validate_Isbn();
+$validator->setType(Zend_Validate_Isbn::ISBN13);
+// OR
+$validator = new Zend_Validate_Isbn(array(
+    'type' => Zend_Validate_Isbn::ISBN13,
+));
+
+if ($validator->isValid($isbn)) {
+    // this is a valid ISBN-13 value
+} else {
+    // this is an invalid ISBN-13 value
+}
+]]></programlisting>
+
+        <para>
+            The above will validate only <acronym>ISBN-13</acronym> values.
+        </para>
+
+        <para>
+            Valid types include:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para><constant>Zend_Validate_Isbn::AUTO</constant> (default)</para>
+            </listitem>
+
+            <listitem>
+                <para><constant>Zend_Validate_Isbn::ISBN10</constant></para>
+            </listitem>
+
+            <listitem>
+                <para><constant>Zend_Validate_Isbn::ISBN13</constant></para>
+            </listitem>
+        </itemizedlist>
+    </sect3>
+
+    <sect3 id="zend.validate.set.isbn.separator">
+        <title>Specifying a separator restriction</title>
+
+        <para>
+            An example of separator restriction is below:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$validator = new Zend_Validate_Isbn();
+$validator->setSeparator('-');
+// OR
+$validator = new Zend_Validate_Isbn(array(
+    'separator' => '-',
+));
+
+if ($validator->isValid($isbn)) {
+    // this is a valid ISBN with separator
+} else {
+    // this is an invalid ISBN with separator
+}
+]]></programlisting>
+
+        <para>
+            Note that this will return false if <varname>$isbn</varname> doesn't contain a separator
+            <emphasis>or</emphasis> if it's an invalid <acronym>ISBN</acronym> value.
+        </para>
+
+        <para>
+            Valid separators include:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>"" (empty) (default)</para>
+            </listitem>
+            <listitem>
+                <para>"-" (hyphen)</para>
+            </listitem>
+            <listitem>
+                <para>" " (space)</para>
+            </listitem>
+        </itemizedlist>
+    </sect3>
+</sect2>
+<!--
+vim:se ts=4 sw=4 et:
+-->

+ 2 - 1
documentation/manual/de/module_specs/Zend_Validate-Set.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 20115 -->
+<!-- EN-Revision: 20229 -->
 <!-- Reviewed: no -->
 <sect1 id="zend.validate.set" xmlns:xi="http://www.w3.org/2001/XInclude">
     <title>Standard Prüfklassen</title>
@@ -201,6 +201,7 @@ if ($validator->isValid($iban)) {
         </para>
     </sect2>
 
+    <xi:include href="Zend_Validate-Isbn.xml" />
     <xi:include href="Zend_Validate-Ip.xml" />
 
     <sect2 id="zend.validate.set.less_than">

+ 153 - 0
documentation/manual/de/module_specs/Zend_View-Helpers-Currency.xml

@@ -0,0 +1,153 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 20234 -->
+<!-- Reviewed: no -->
+<sect3 id="zend.view.helpers.initial.currency">
+    <title>Currency Helper</title>
+
+    <para>
+        Displaying localized currency values is a common task; the
+        <classname>Zend_Currency</classname> view helper is intended to simply this task.  See the
+        <link linkend="zend.currency.introduction">Zend Currency documentation</link> for specifics
+        on this localization feature. In this section, we will focus simply on usage of the view
+        helper.
+    </para>
+
+    <para>
+        There are several ways to initiate the <emphasis>Currency</emphasis> view helper:
+    </para>
+
+    <itemizedlist>
+        <listitem>
+            <para>
+                Registered, through a previously registered instance in
+                <classname>Zend_Registry</classname>.
+            </para>
+        </listitem>
+
+        <listitem>
+            <para>
+                Afterwards, through the fluent interface.
+            </para>
+        </listitem>
+
+        <listitem>
+            <para>
+                Directly, through instantiating the class.
+            </para>
+        </listitem>
+    </itemizedlist>
+
+    <para>
+        A registered instance of <classname>Zend_Currency</classname> is the preferred usage for
+        this helper. Doing so, you can select the currency to be used prior to adding the adapter to
+        the registry.
+    </para>
+
+    <para>
+        There are several ways to select the desired currency. First, you may simply provide a
+        currency string; alternately, you may specify a locale.  The preferred way is to use a
+        locale as this information is automatically detected and selected via the HTTP client
+        headers provided when a user accesses your application, and ensures the currency provided
+        will match their locale.
+    </para>
+
+    <note>
+        <para>
+            We are speaking of "locales" instead of "languages" because a language may vary based on
+            the geographical region in which it is used. For example, English is spoken in different
+            dialects: British English, American English, etc. As a currency always correlates to a
+            country you must give a fully-qualified locale, which means providing both the language
+            <emphasis>and</emphasis> region. Therefore, we say "locale" instead of "language."
+        </para>
+    </note>
+
+    <example id="zend.view.helpers.initial.currency.registered">
+        <title>Registered instance</title>
+
+        <para>
+            To use a registered instance, simply create an instance of
+            <classname>Zend_Currency</classname> and register it within
+            <classname>Zend_Registry</classname> using <classname>Zend_Currency</classname> as its
+            key.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+// our example currency
+$currency = new Zend_Currency('de_AT');
+Zend_Registry::set('Zend_Currency', $currency);
+
+// within your view
+echo $this->currency(1234.56);
+// this returns '€ 1.234,56'
+]]></programlisting>
+    </example>
+
+    <para>
+        If you are more familiar with the fluent interface, then you can also create an instance
+        within your view and configure the helper afterwards.
+    </para>
+
+    <example id="zend.view.helpers.initial.currency.afterwards">
+        <title>Within the view</title>
+
+        <para>
+            To use the fluent interface, create an instance of <classname>Zend_Currency</classname>,
+            call the helper without a parameter, and call the <methodname>setCurrency()</methodname>
+            method.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+// within your view
+$currency = new Zend_Currency('de_AT');
+$this->currency()->setCurrency($currency)->currency(1234.56);
+// this returns '€ 1.234,56'
+]]></programlisting>
+    </example>
+
+    <para>
+        If you are using the helper without <classname>Zend_View</classname> then you can
+        also use it directly.
+    </para>
+
+    <example id="zend.view.helpers.initial.currency.directly.example-1">
+        <title>Direct usage</title>
+
+        <programlisting language="php"><![CDATA[
+// our example currency
+$currency = new Zend_Currency('de_AT');
+
+// initiate the helper
+$helper = new Zend_View_Helper_Currency($currency);
+echo $helper->currency(1234.56); // this returns '€ 1.234,56'
+]]></programlisting>
+    </example>
+
+    <para>
+        As already seen, the <methodname>currency()</methodname> method is used to return the
+        currency string. Just call it with the value you want to display as a currency.  It also
+        accepts some options which may be used to change the behaviour and output of the helper.
+    </para>
+
+    <example id="zend.view.helpers.initial.currency.directly.example-2">
+        <title>Direct usage</title>
+
+        <programlisting language="php"><![CDATA[
+// our example currency
+$currency = new Zend_Currency('de_AT');
+
+// initiate the helper
+$helper = new Zend_View_Helper_Currency($currency);
+echo $helper->currency(1234.56); // this returns '€ 1.234,56'
+echo $helper->currency(1234.56, array('precision' => 1));
+// this returns '€ 1.234,6'
+]]></programlisting>
+    </example>
+
+    <para>
+        For details about the available options, search for <classname>Zend_Currency</classname>'s
+        <methodname>toCurrency()</methodname> method.
+    </para>
+</sect3>
+<!--
+vim:se ts=4 sw=4 et:
+-->

+ 43 - 2
documentation/manual/de/ref/migration-110.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 20142 -->
+<!-- EN-Revision: 20249 -->
 <!-- Reviewed: no -->
 <sect1 id="migration.110">
     <title>Zend Framework 1.10</title>
@@ -9,6 +9,48 @@
         man die folgenden Migrations Hinweise beachten.
     </para>
 
+    <sect2 id="migration.110.zend.controller.front">
+        <title>Zend_Controller_Front</title>
+
+        <para>
+            Ein fehlerhaftes Verhalten wurde behoben, welches aufgetreten ist wenn keine Modell
+            Route und keine Route mit der angegebenen Anfrage übereinstimmt. Vorher hat der Router
+            das nicht modifizierte Anfrageobjekt zurückgegeben, und der Frontcontroller hat damit
+            nur den Standardcontroller und die Standardaktion angezeigt. Seit Zend Framework 1.10
+            wirft der Router korrekterweise, wie im Router Interface beschrieben, eine Exception
+            wenn keine passende Route vorhanden ist. Das Error Plugin fängt die Exception und leitet
+            Sie an den Errorcontroller weiter. Man kann mit der Konstante <constant></constant> auf
+            einen spezifischen Fehler testen:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+/**
+ * Vor 1.10
+ */
+    public function errorAction()
+    {
+        $errors = $this->_getParam('error_handler');
+
+        switch ($errors->type) {
+            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
+            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
+    // ...
+
+/**
+ * Ab 1.10
+ */
+    public function errorAction()
+    {
+        $errors = $this->_getParam('error_handler');
+
+        switch ($errors->type) {
+            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
+            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
+            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
+     // ...
+]]></programlisting>
+    </sect2>
+
     <sect2 id="migration.110.zend.feed.reader">
         <title>Migrating from 1.9.6 to 1.10 or later</title>
 
@@ -56,7 +98,6 @@
 /**
  * In 1.9.6
  */
-
 $feed = Zend_Feed_Reader::import('http://example.com/feed');
 $authors = $feed->getAuthors();
 

+ 2 - 1
documentation/manual/de/tutorials/quickstart-create-project.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 20123 -->
+<!-- EN-Revision: 20249 -->
 <!-- Reviewed: no -->
 <sect1 id="learning.quickstart.create-project">
     <title>Das Projekt erstellen</title>
@@ -282,6 +282,7 @@ class ErrorController extends Zend_Controller_Action
         $errors = $this->_getParam('error_handler');
 
         switch ($errors->type) {
+            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
             case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
             case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION: