| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect3 id="zend.view.helpers.initial.translate">
- <title>Übersetzungs Helfer</title>
- <para>
- Oft sind Webseiten in verschiedenen Sprachen vorhanden. Um den Inhalt einer Site zu
- übersetzen sollte ganz einfach <link
- linkend="zend.translate.introduction">Zend_Translate</link> verwendet werden, und um
- <classname>Zend_Translate</classname> in der eigenen View zu integrieren sollte der
- <emphasis>Translate</emphasis> View Helfer verwendet werden.
- </para>
- <para>
- In allen folgenden Beispielen verwenden wir den einfachen Array Übersetzungs Adapter.
- Natürlich kann jede Instanz von <classname>Zend_Translate</classname> und genauso jede
- Subklasse von <classname>Zend_Translate_Adapter</classname> verwendet werden. Es gibt
- verschiedene Wege den <emphasis>Translate</emphasis> View Helfer zu initiieren:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Registriert, durch eine vorher in <classname>Zend_Registry</classname> registrierte
- Instanz
- </para>
- </listitem>
- <listitem>
- <para>
- Danach, durch das Fluent Interface
- </para>
- </listitem>
- <listitem>
- <para>
- Direkt, durch Instanzierung der Klasse
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Eine registrierte Instanz von <classname>Zend_Translate</classname> ist die bevorzugte
- Verwendung für diesen Helfer. Bevor der Adapter der Registry hinzugefügt wird, kann das zu
- verwendende Gebietsschema einfach ausgewählt werden.
- </para>
- <note>
- <para>
- Wir sprechen hier von Gebietsschemata (Locale) statt von Sprachen weil eine Sprache auch
- in verschiedenen Regionen vorhanden sein kann. Zum Beispiel wird Englisch in
- verschiedenen Dialekten gesprochen. Es könnte eine Übersetzung für Britisch und eine für
- Amerikanisches Englisch geben. Deswegen sagen wir Gebietsschema "locale" statt Sprache.
- </para>
- </note>
- <example id="zend.view.helpers.initial.translate.registered">
- <title>Registrierte Instanz</title>
- <para>
- Um eine registrierte Instanz zu verwenden muß einfach eine Instanz von
- <classname>Zend_Translate</classname> oder <classname>Zend_Translate_Adapter</classname>
- erstellt werden und in <classname>Zend_Registry</classname> durch Verwendung des
- Schlüssels <classname>Zend_Translate</classname> registriert werden.
- </para>
- <programlisting language="php"><![CDATA[
- // unser Beispieladapter
- $adapter = new Zend_Translate(
- array(
- 'adapter' => 'array',
- 'content' => array('simple' => 'einfach'),
- 'locale' => 'de'
- )
- );
- Zend_Registry::set('Zend_Translate', $adapter);
- // In der View
- echo $this->translate('simple');
- // gibt 'einfach' zurück
- ]]></programlisting>
- </example>
- <para>
- Wenn man mit dem Fluent Interface besser zurecht kommt, kann eine Instanz auch in der View
- erstellt werden und der Helfer im Nachhinein initiiert werden.
- </para>
- <example id="zend.view.helpers.initial.translate.afterwards">
- <title>In der View</title>
- <para>
- Um das Fluid Interface zu verwenden muß eine Instanz von
- <classname>Zend_Translate</classname> oder <classname>Zend_Translate_Adapter</classname>
- erstellt werden, der Helfer ohne Parameter und anschließend die
- <methodname>setTranslator()</methodname> Methode aufgerufen werden.
- </para>
- <programlisting language="php"><![CDATA[
- // in der View
- $adapter = new Zend_Translate(
- array(
- 'adapter' => 'array',
- 'content' => array('simple' => 'einfach'),
- 'locale' => 'de'
- )
- );
- $this->translate()->setTranslator($adapter)->translate('simple');
- // das gibt 'einfach' zurück
- ]]></programlisting>
- </example>
- <para>
- Wenn der Helfer ohne <classname>Zend_View</classname> verwendet werden soll kann er auch
- direkt angesprochen werden.
- </para>
- <example id="zend.view.helpers.initial.translate.directly">
- <title>Direkte Verwendung</title>
- <programlisting language="php"><![CDATA[
- // unser Beispieladapter
- $adapter = new Zend_Translate(
- array(
- 'adapter' => 'array',
- 'content' => array('simple' => 'einfach'),
- 'locale' => 'de'
- )
- );
- // den Helfer initiieren
- $translate = new Zend_View_Helper_Translate($adapter);
- print $translate->translate('simple'); // das gibt 'einfach' zurück
- ]]></programlisting>
- <para>
- Dieser Weg kann verwendet werden wenn man nicht mit <classname>Zend_View</classname>
- arbeitet und übersetzte Ausgaben erzeugen muß.
- </para>
- </example>
- <para>
- Wie man bereits sehen konnte, wird die <methodname>translate()</methodname> Methode
- verwendet um die Übersetzung zurückzugeben. Sie muss nur mit der benötigten messageid des
- Übersetzungsadapters aufgerufen werden. Aber sie kann auch Parameter im Übersetzungsstring
- ersetzen. Deswegen akzeptiert Sie variable Parameter in zwei Wegen: entweder als Liste von
- Parametern, oder als Array von Parametern. Als Beispiel:
- </para>
- <example id="zend.view.helpers.initial.translate.parameter">
- <title>Einzelne Parameter</title>
- <para>
- Um einen einzelnen Parameter zu verwenden muss dieser einfach der Methode angefügt
- werden.
- </para>
- <programlisting language="php"><![CDATA[
- // innerhalb der View
- $date = "Montag";
- $this->translate("Today is %1\$s", $date);
- // könnte 'Heute ist Montag' zurückgeben
- ]]></programlisting>
- </example>
- <note>
- <para>
- Wenn man Parameter verwendet die auch Text sind ist zu beachten das es auch nötig sein
- kann diese Parameter zu übersetzen.
- </para>
- </note>
- <example id="zend.view.helpers.initial.translate.parameterlist">
- <title>Liste von Parametern</title>
- <para>
- Oder eine Liste von Parametern verwenden und diese der Methode hinzufügen.
- </para>
- <programlisting language="php"><![CDATA[
- // innerhalb der View
- $date = "Monday";
- $month = "April";
- $time = "11:20:55";
- $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s",
- $date,
- $month,
- $time);
- // könnte 'Heute ist Monday in April. Aktuelle Zeit: 11:20:55' zurückgeben
- ]]></programlisting>
- </example>
- <example id="zend.view.helpers.initial.translate.parameterarray">
- <title>Array von Parametern</title>
- <para>
- Oder ein Array von Parametern verwenden und dieses der Methode hinzufügen.
- </para>
- <programlisting language="php"><![CDATA[
- // innerhalb der View
- $date = array("Monday", "April", "11:20:55");
- $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s", $date);
- // könnte 'Heute ist Monday in April. Aktuelle Zeit: 11:20:55' zurückgeben
- ]]></programlisting>
- </example>
- <para>
- Manchmal ist es notwendig das Gebietsschema der Übersetzung zu Ändern. Das kann entweder
- dynamisch pro Übersetzung oder statisch für alle folgenden Übersetzungen durchgeführt
- werden. Dies kann mit beidem, einer Liste von Paramtern oder einem Array von Parametern,
- verwendet werden. In beiden Fällen muss das als letzter einzelner Parameter angegeben
- werden.
- </para>
- <example id="zend.view.helpers.initial.translate.dynamic">
- <title>Das Gebietsschema dynamisch wechseln</title>
- <programlisting language="php"><![CDATA[
- // innerhalb der View
- $date = array("Monday", "April", "11:20:55");
- $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s", $date, 'it');
- ]]></programlisting>
- </example>
- <para>
- Dieses Beispiel gibt die italienische Übersetzung für die messageid zurück. Aber Sie wird
- nur einmal verwendet. Die nächste Übersetzung verwendet wieder das Gebietsschema des
- Adapters. Normalerweise wird das gewünschte Gebietsschema im Übersetzungsadapter gesetzt
- bevor dieser der Registry hinzugefügt wird. Das Gebietsschema kann aber auch im Helfer
- gesetzt werden:
- </para>
- <example id="zend.view.helpers.initial.translate.static">
- <title>Das Gebietsschema statisch wechseln</title>
- <programlisting language="php"><![CDATA[
- // innerhalb der View
- $date = array("Monday", "April", "11:20:55");
- $this->translate()->setLocale('it');
- $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s", $date);
- ]]></programlisting>
- </example>
- <para>
- Das obige Beispiel setzt <emphasis>'it'</emphasis> als neues standardmäßiges Gebietsschema
- welches für alle weiteren Übersetzungen verwendet wird.
- </para>
- <para>
- Natürlich gibt es auch eine <methodname>getLocale()</methodname> Methode um das aktuell
- gesetzte Gebietsschema zu erhalten.
- </para>
- <example id="zend.view.helpers.initial.translate.getlocale">
- <title>Das aktuell gesetzte Gebietsschema erhalten</title>
- <programlisting language="php"><![CDATA[
- // innerhalb der View
- $date = array("Monday", "April", "11:20:55");
- // gibt 'de' als standardmäßig gesetztes Gebietsschema
- // vom obigen Beispiel zurück
- $this->translate()->getLocale();
- $this->translate()->setLocale('it');
- $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s", $date);
- // gibt 'it' als neues standardmäßig gesetztes Gebietsschema zurück
- $this->translate()->getLocale();
- ]]></programlisting>
- </example>
- </sect3>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|