<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="zend.form.i18n">
    <title>Internationalisierung von Zend_Form</title>

    <para>
        Immer mehr Entwickler müssen ihren Inhalt für mehere Sprachen und Regionen zur Verfügung
        stellen. <classname>Zend_Form</classname> versucht so einen Arbeitsschritt so einfach wie
        möglich zu machen und verwendet Funktionalitäten sowohl in <link
            linkend="zend.translate">Zend_Translate</link>, als auch in <link
            linkend="zend.validate">Zend_Validate</link> um das zu tun.
    </para>

    <para>
        Standardmäßig wird keine Internationalisiernug (I18n) durchgeführt. Um I18n Features in
        <classname>Zend_Form</classname> einzuschalten, muss ein
        <classname>Zend_Translate</classname> Objekt mit einem gewünschten Adapter instanziert
        werden, und es mit <classname>Zend_Form</classname> und/oder
        <classname>Zend_Validate</classname> verbunden werden. Für weitere Informationen darüber,
        wie ein Übersetzungsobjekt und Übersetzungsdateien erstellt werden, sehen Sie bite in die
        <link linkend="zend.translate">Dokumentation zu Zend_Translate</link>.
    </para>

    <note>
        <title>Die Übersetzung kann für jedes Element einzeln abgeschaltet werden</title>

        <para>
            Übersetzung kann für jedes Formular, Element, Anzeigegruppe, oder Unterformular, durch
            den Aufruf dessen <methodname>setDisableTranslator($flag)</methodname> Methode oder der
            Übergabe der <property>disableTranslator</property> Option an das Objekt, ausgeschaltet
            werden. Das kann nützlich sein, wenn man Übersetzungen selektiv für individuelle
            Elemente oder Sets von Elementen ausschalten will.
        </para>
    </note>

    <sect2 id="zend.form.i18n.initialization">
        <title>I18n in Formularen initialisieren</title>

        <para>
            Um I18n in Formularen zu initialisieren, muss man entweder ein
            <classname>Zend_Translate</classname> Objekt oder ein
            <classname>Zend_Translate_Adapter</classname> haben, wie in der
            <classname>Zend_Translate</classname> Dokumentation beschrieben. Sobald man ein
            Übersetzungsobjekt hat, besitzt man verschiedene Möglichkeiten:
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <emphasis>Einfachste:</emphasis> es der Registry hinzufügen. Alle I18n fähigen
                    Komponenten vom Zend Framework erkennen ein Übersetzungsobjekt automatisch
                    wenn es in der Registrierung unter dem 'Zend_Translate' Schlüssel vorhanden ist
                    und verwenden es um eine Übersetzung und/oder Lokalisierung durchzuführen:
                </para>

                <programlisting language="php"><![CDATA[
// verwende den 'Zend_Translate' Schlüssel; $translate ist ein Zend_Translate Objekt:
Zend_Registry::set('Zend_Translate', $translate);
]]></programlisting>

                <para>
                    Das wird von <classname>Zend_Form</classname>,
                    <classname>Zend_Validate</classname>, und
                    <classname>Zend_View_Helper_Translate</classname> aufgegriffen.
                </para>
            </listitem>

            <listitem>
                <para>
                    Wenn man besorgt ist wegen der Übersetzung von Fehlermeldungen, kann das
                    Übersetzungsobjekt in <classname>Zend_Validate_Abstract</classname> registriert
                    werden:
                </para>

                <programlisting language="php"><![CDATA[
// Allen Prüfklassen mitteilen, dass ein spezieller Übersetzungsadapter verwendet werden soll:
Zend_Validate_Abstract::setDefaultTranslator($translate);
]]></programlisting>
            </listitem>

            <listitem>
                <para>
                    Alternativ kann das <classname>Zend_Form</classname> Objekt als globaler
                    Übersetzer angefügt werden. Das hat auch einen Nebeneffekt auf die Übersetzung
                    von Fehlermeldungen:
                </para>

                <programlisting language="php"><![CDATA[
// Allen Formularklassen mitteilen, dass ein spezieller Übersetzungsadapter
// verwendet werden soll, sowie, dass der Adapter für die Übersetzung von
// Fehlermeldungen verwendet werden soll:
Zend_Form::setDefaultTranslator($translate);
]]></programlisting>
            </listitem>

            <listitem>
                <para>
                    Letztendlich kann ein Übersetzer mit einer speziellen Instanz eines Formulars
                    verbunden werden oder zu einem speziellen Element indem dessen
                    <methodname>setTranslator()</methodname> Methode verwendet wird:
                </para>

                <programlisting language="php"><![CDATA[
// *Dieser* Formularklassen mitteilen, dass ein spezieller Übersetzungsadapter
// verwendet werden soll, sie wird auch für die Übersetzung von allen
// Fehlermeldungen für alle Elemente verwendet:
$form->setTranslator($translate);

// *Diesem* Element mitteilen, dass ein spezieller Übersetzungsadapter
// verwendet werden soll, sie wird auch für die Übersetzung von allen
// Fehlermeldungen für dieses Elemente verwendet:
$element->setTranslator($translate);
]]></programlisting>
            </listitem>
        </itemizedlist>
    </sect2>

    <sect2 id="zend.form.i18n.standard">
        <title>Standard I18n Ziele</title>

        <para>
            Was kann nun standardmäßig übersetzt werden, nachdem ein Übersetzungsobjekt
            definiert wurde?
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <emphasis>Prüfungsfehlermeldungen.</emphasis> Prüfungsfehlermeldungen können
                    übersetzt werden. Um das zu tun, müssen die verschiedenen Konstanten der
                    Fehlercodes von den <classname>Zend_Validate</classname> Prüfungsklassen als
                    Message IDs verwendet werden. Für weitere Details über diese Codes, kann in die
                    Dokumentation zu <link linkend="zend.validate">Zend_Validate</link> gesehen
                    werden.
                </para>

                <para>
                    Zusätzlich können ab Version 1.6.0, Übersetzungen angegeben werden, indem die
                    aktuelle Fehlermeldung als Identifikator der Meldung verwendet wird. Das ist die
                    bevorzugte Verwendung für 1.6.0 und höher, da die Übersetzung der
                    Nachrichtenschlüssel in zukünftigen Releases veraltet sein wird.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>Labels.</emphasis> Element Labels werden übersetzt, wenn eine
                    Übersetzung existiert.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>Fieldset Legenden.</emphasis> Anzeigegruppen und Unterformulare werden
                    standardmäßig in Fieldsets dargestellt. Der Fieldset Dekorator versucht die
                    Legende zu übersetzen, bevor das Fieldset dargestellt wird.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>Formulare- und Elementbeschreibungen.</emphasis> Alle Formtypen
                    (Elemente, Formulare, Anzeigegruppen, Unterformulare) erlauben die Spezifikation
                    von optionalen Elementbeschreibungen. Der Beschreibungs Dekorator kann verwendet
                    werden, um sie darzustellen und standardmäßig nimmt er den Wert und versucht ihn
                    zu übersetzen.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>Multi-Option Werte.</emphasis> Für die verschiedenen Elemente die von
                    <classname>Zend_Form_Element_Multi</classname> abgeleitet sind (enthält die
                    MultiCheckbox, Multiselect, und Radio Elemente), werden die Optionswerte (nicht
                    die Schlüssel) übersetzt, wenn eine Übersetzung vorhanden ist; das bedeutet,
                    dass die Label der vorhandenen Optionen die dem Benutzer angezeigt werden,
                    übersetzt werden.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>Submit und Button Labels.</emphasis> Die verschiedenen Submit- und
                    Button-Elemente (Button, Submit und Reset) übersetzen das Label, welches dem
                    Benutzer angezeigt wird.
                </para>
            </listitem>
        </itemizedlist>
    </sect2>
</sect1>
