| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 15672 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.locale.introduction">
- <title>Einführung</title>
- <para>
- <classname>Zend_Locale</classname> ist die Antwort des Frameworks auf die Frage "Wie kann
- die selbe Anwendung auf der ganzen Welt verwendet werden?". Die meisten Leute werden sagen
- "Das ist einfach. Lasst uns alle Ausgaben in die unterschiedlichsten Sprachen übersetzen".
- Aber, eine einfache Übersetzungstabelle die Phrasen von einer Sprache in die andere
- übersetzt ist nicht genug. Verschiedene Regionen haben auch unterschiedliche Regeln für
- Vornamen, Nachnamen, Titel, Format von Nummern, Daten, Zeiten, Währungen usw.
- </para>
- <para>
- Was wir benötigen ist <ulink url="http://en.wikipedia.org/wiki/L10n">Lokalisierung</ulink>
- und die vergleichbare <ulink
- url="http://en.wikipedia.org/wiki/L10n">Internationalisierung</ulink>. Beide werden oft
- abgekürzt zu <code>L10n</code> und <code>I18n</code>. Internationalisierung bezeichnet mehr
- die Benutzung von Systemen für die spezielle Benutzung durch eindeutige Gruppen wie zum
- Beispiel Sprachübersetzung, Unterstützung von lokalen Konventionen für Plurale, Daten,
- Zeiten, Währungen, Namen, Symbolen, Sortierungen, Reihungen und viele mehr.
- <code>L10n</code> und <code>I18n</code> sind einander sehr ähnlich. Zend Framework bietet
- Unterstützung für diese Konventionen durch eine Kombination von Komponenten wie
- <classname>Zend_Locale</classname>, <classname>Zend_Date</classname>,
- <classname>Zend_Measure</classname>, <classname>Zend_Translate</classname>,
- <classname>Zend_Currency</classname> und <classname>Zend_TimeSync</classname>.
- </para>
- <tip>
- <title>Zend_Locale und setLocale()</title>
- <para>
- Die <ulink url="http://php.net/setlocale">Dokumentation von PHP</ulink> sagt das
- <code>setlocale()</code> nicht Threadsicher ist weil es pro Prozess behandelt wird und
- nicht pro Thread. Das bedeutet das man in multithreaded Umgebungen das Problem bekommen
- kann, das sich das Gebietsschema (Locale) ändert wärend das Skript diese Änderung nie
- selbst durchgeführt hat. Deswegen kann es zu unerwarteten Ergebnissen kommen wenn man
- <code>setLocale()</code> in seinen Skripts verwendet.
- </para>
- <para>
- Wenn <classname>Zend_Locale</classname> verwendet wird hat man diese Einschränkungen
- nicht, da <classname>Zend_Locale</classname> weder von PHP's <code>setlocale()</code>
- abhängig ist, noch irgendwie mit Ihr gekoppelt ist.
- </para>
- </tip>
- <sect2 id="zend.locale.whatislocalization">
- <title>Was ist Lokalisierung</title>
- <para>
- Lokalisierung bedeutet das eine Anwendung (oder Homepage) von verschiedenen Benutzer
- verwendet werden kann die unterschiedliche Sprachen sprechen. Aber wie bereits
- angedeutet heißt Lokalisierung mehr als nur die Übersetzung von Zeichenketten. Es
- beinhaltet
- </para>
- <itemizedlist mark='opencircle'>
- <listitem>
- <para>
- <classname>Zend_Locale</classname> - Unterstützung für Gebietsschemata welche
- Unterstützung für Lokalisierungen von anderen ZF Komponenten bieten.
- </para>
- </listitem>
- <listitem>
- <para>
- <classname>Zend_Translate</classname> - Übersetzung von Zeichenketten.
- </para>
- </listitem>
- <listitem>
- <para>
- <classname>Zend_Date</classname> - Lokalisierung von Daten und Zeiten.
- </para>
- </listitem>
- <listitem>
- <para>
- <classname>Zend_Calendar</classname> - Lokalisierung von Kalendern
- (Unterstützung für nicht Gregorianische Kalendersysteme)
- </para>
- </listitem>
- <listitem>
- <para>
- <classname>Zend_Currency</classname> - Lokalisierung von Währungen.
- </para>
- </listitem>
- <listitem>
- <para>
- <classname>Zend_Locale_Format</classname> - Erkennen und erzeugen von
- lokalisierten Zahlen.
- </para>
- </listitem>
- <listitem>
- <para>
- <classname>Zend_Locale_Data</classname> - Empfangen von lokalisierten Standard
- Übersetzungen für Länder, Sprachen und <ulink
- url="http://unicode.org/cldr/">mehr aus der CLDR</ulink>.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>TODO</code> - Lokalisierung von Sammlungen
- </para>
- </listitem>
- </itemizedlist>
- </sect2>
- <sect2 id="zend.locale.whatis">
- <title>Was ist ein Gebietsschema?</title>
- <para>
- Jeder Computer benutzt Gebietsschemata, selbst wenn Sie es nicht wissen. Anwendungen
- welche keine Unterstützung für Lokalisierung bieten, unterstützen zumindest genau ein
- Gebietsschema (das Gebietsschema des Authors). Wenn eine Klasse oder Funktion
- Lokalisierung verwendet sagen wir sie ist <code>Lokalisierbar</code>. Aber wie weiß der
- Code welches Gebietsschema ein Benutzer erwartet ?
- </para>
- <para>
- Eine Gebietsschema Zeichenkette oder Objekt welches ein unterstütztes Gebietsschema
- identifiziert, gibt <classname>Zend_Locale</classname> und dessen Unterklassen Zugriff
- auf Informationen über die Sprache und Region welche der Benutzer erwartet.
- Formatierungen, Normalisierungen und Konvertierungen werden anhand dieser Informationen
- durchgeführt.
- </para>
- </sect2>
- <sect2 id="zend.locale.representation">
- <title>Wodurch werden Gebietsschemata repräsentiert?</title>
- <para>
- Eine Gebietsschema Zeichenkette besteht aus Informationen über die Sprache des Benutzers
- und die bevorzugte/primäre geographische Region (z.B. Staat oder Region von seinem
- Zuhause oder Arbeitsplatz). Die Gebietsschema Zeichenkette welche im Zend Framework
- benutzt werden sind international definierte Standard Abkürzungen von Sprachen und
- Regionen. Sie werden geschrieben als <code>sprache_REGION</code>. Beide Teile, sowohl
- Sprache als auch Region, werden mit Buchstaben, ASCII Zeichen, abgekürzt.
- </para>
- <note>
- <para>
- Man muß darauf achten das nicht nur Gebietsschemata mit 2 Zeichen existieren wie die
- meisten Leute denken. Es gibt auch Sprachen und Regionen die nicht nur mit 2 Zeichen
- abgekürzt werden. Deswegen sollte man die Region und Sprache NICHT selbst trennen,
- sondern <classname>Zend_Locale</classname> verwenden um die Sprache oder Region von
- einem Gebietsschema String zu trennen. Andernfalls kann es zu unerwartetem Verhalten
- im eigenen Code kommen wenn man versucht das selbst zu machen.
- </para>
- </note>
- <para>
- Ein Benutzer von den USA würde die Sprache <code>Englisch</code> und die Region
- <code>USA</code> erwarten, beschrieben durch das Gebietsschema "en_US". Ein Benutzer von
- Deutschland würde die Sprache <code>Deutsch</code> und die Region
- <code>Deutschland</code> erwarten, beschrieben durch das Gebietsschema "de_DE". Hier
- findest Du eine <ulink
- url="http://unicode.org/cldr/data/diff/supplemental/languages_and_territories.html">Liste
- von vordefinierten Sprachen und Kombinationen von Regionen</ulink> wenn ein
- bestimmtes Gebietsschema im Zend Framework ausgewählt werden muß.
- </para>
- <example id="zend.locale.representation.example-1">
- <title>Auswählen eines speziellen Gebietsschemas</title>
- <programlisting language="php"><![CDATA[
- $locale = new Zend_Locale('de_DE'); // deutsche Sprache _ Deutschland
- ]]></programlisting>
- </example>
- <para>
- Ein deutscher Benutzer in Amerika würde die Sprache <code>Deutsch</code> und die region
- <code>USA</code> erwarten, aber diese nicht-standardmäßigen Mischungen werden nicht als
- direkt als "Gebietsschema" unterstützt und erkannt. Wird stattdessen eine ungültige
- Kombination benutzt, dann wird Sie automatisch gekürzt, indem die Region entfernt wird.
- Zum Beispiel würde "de_IS" zu "de" gekürzt werden, und "xh_RU" würde zu "xh" gekürzt
- werden, weil keiner dieser Kombinationen gültig ist. Zusätzlich, wenn die Sprache nicht
- unterstützt wird (z.B. "zz_US") oder diese nicht existiert, dann wird ein Standard
- "root" Gebietsschema benutzt. Dieses "root" Gebietsschema hat Standarddefinitionen für
- international bekannte Repräsentationen von Daten, Zeiten, Nummern, Währungen usw. Der
- Prozess der Kürzung hängt von der gewünschten Information ab, weil einige Kombinationen
- von Sprache und Region für eine gewisse Art von Informationen gültig sind (z.B. Daten)
- aber für andere nicht (z.B. Währungs Formate).
- </para>
- <para>
- Achtung vor historischen Änderungen oder dem Versuch die verschiedenen Änderungen der
- Zeitzonen die im Laufe der langen Zeit in den vielen Regionen gemacht wurden, da ZF
- Komponenten darüber nichts wissen. Zum Beispiel kann <ulink
- url="http://www.statoids.com/tus.html">hier eine historische Liste</ulink> mit
- dutzenden Änderungen von Regierungen angesehen werden und ob eine Region
- Sommer-/Winterzeit unterstützt und sogar in welche Zeitzone eine bestimmte geographische
- Region gehört. Das bedeutet, wenn Datumsberechnungen gemacht werden, wird die Berechnung
- welche durch die ZF Komponenten durchgeführt wird, nicht an diese Änderungen angepasst.
- Stattdessen wird die korrekte Uhrzeit benutzt, welche für die aktuell benutzte Zeitzone
- angegeben wurde, wobei moderne Regeln für Sommer-/Winterzeit und Zeitzonen Zuordnung
- anhand von geographischen Regionen verwendet werden.
- </para>
- </sect2>
- <sect2 id="zend.locale.selection">
- <title>Auswahl des richtigen Gebietsschemas</title>
- <para>
- In den meisten Situationen wird <code>new Zend_Locale()</code> automatisch das richtige
- Gebietsschema auswählen, wobei die Informationen benutzt werden welche der Webbrowser
- des Benutzers zur Verfügung stellt. Wenn statt dessen
- <code>new Zend_Locale(Zend_Locale::ENVIRONMENT</code> benutzt wird, dann werden die
- Informationen vom Betriebsystem des hostenden Servers, wie anbei beschrieben, dafür
- genommen.
- </para>
- <example id="zend.locale.selection.example-1">
- <title>Automatische Auswahl des Gebietsschemas</title>
- <programlisting language="php"><![CDATA[
- $locale = new Zend_Locale();
- // Standard verhalten, wie eine Zeile weiter oben
- $locale1 = new Zend_Locale(Zend_Locale::BROWSER);
- // Bevorzuge die Einstellungen des hostenden Servers
- $locale2 = new Zend_Locale(Zend_Locale::ENVIRONMENT);
- // Bevorzuge die Einstellungen der Framework Anwendung
- $locale3 = new Zend_Locale(Zend_Locale::FRAMEWORK);
- ]]></programlisting>
- </example>
- <para>
- Der Suchalgorithmus, welcher von <classname>Zend_Locale</classname> für die automatische
- Auswahl des Gebietsschemas verwendet wird beherrscht drei Informationsquellen:
- <orderedlist>
- <listitem>
- <para>
- const <classname>Zend_Locale::BROWSER</classname> - Der Webbrowser des
- Benutzer welcher die Informationen mit jeder Anfrage schickt. Diese wird von
- PHP durch die globale Variable <code>HTTP_ACCEPT_LANGUAGE</code>
- veröffentlicht. Wenn kein passendes Gebietsschema gefunden wurde, dann wird
- mit <code>ENVIRONMENT</code> gesucht und als letztes mit
- <code>FRAMEWORK</code> gesucht.
- </para>
- </listitem>
- <listitem>
- <para>
- const <classname>Zend_Locale::ENVIRONMENT</classname> - PHP veröffentlicht
- das Gebietsschema des hostenden Servers über die interne PHP Funktion
- <code>setlocale()</code>. Wenn kein passendes Gebietsschema gefunden wurde,
- dann wird mit <code>FRAMEWORK</code> und als letztes mit
- <code>BROWSER</code> gesucht.
- </para>
- </listitem>
- <listitem>
- <para>
- const <classname>Zend_Locale::FRAMEWORK</classname> - Wenn Zend Framework
- einen standartisierten Weg zur Verfügung stellt um für Komponenten
- Standardwerte zu definieren (das ist geplant aber noch nicht realisiert),
- dann wird die Verwendung dieser Konstante das Gebietsschema anhand dieser
- Standardwerte auswählen. Wenn kein passendes Gebietsschema gefunden wurde,
- dann wird mit <code>ENVIRONMENT</code> und als letztes mit
- <code>BROWSER</code> gesucht.
- </para>
- </listitem>
- </orderedlist>
- </para>
- </sect2>
- <sect2 id="zend.locale.selection.automatic">
- <title>Verwenden automatischer Gebietsschemata</title>
- <para>
- <classname>Zend_Locale</classname> bietet drei zusätzliche Gebietsschemata. Diese
- Gebietsschemata gehören nicht zu irgendeiner Sprache oder Region. Es sind "automatische"
- Gebietsschemata was bedeutet das Sie den gleichen Effekt wie die Methode
- <code>getDefault()</code> haben, aber ohne die negativen Effekte wie die Erstellung
- einer Instanz. Diese "automatischen" gebietsschemata können überall verwendet werden, wo
- auch standard Gebietsschemata verwendet werden können, und für die Definition eines
- Gebietsschemas, kann auch die String Repräsentation verwendet werden. Das bietet
- Einfachheit für Situationen wo mit Gebietsschemas gearbeitet wird die vom Browser
- geliefert werden.
- </para>
- <para>
- Es gibt drei Gebietsschemata mit leicht unterschiedlichem Verhalten:
- <orderedlist>
- <listitem>
- <para>
- <code>'browser'</code> - <classname>Zend_Locale</classname> soll mit den
- Informationen arbeiten die durch den Web Browser des Benutzers geliefert
- werden. Sie werden von PHP in der globalen Variable
- <code>HTTP_ACCEPT_LANGUAGE</code> veröffentlicht.
- </para>
- <para>
- Wenn ein Benutzer mehr als ein Gebietsschema in seinem Browser anbietet,
- wird <classname>Zend_Locale</classname> das erste gefundene Gebietsschema
- verwenden. Wenn der Benutzer kein Gebietsschema liefert oder das Skript von
- der Kommandozeile aufgerufen wird, wird automatisch das Gebietsschema
- <code>'environment'</code> verwendet und zurückgegeben.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>'environment'</code> - <classname>Zend_Locale</classname> soll mit den
- Informationen arbeiten welche vom Host Server geliefert werden. Sie werden
- vom PHP über die interne Funktion <code>setlocale()</code> veröffentlicht.
- </para>
- <para>
- Wenn eine Umgebung mehr als ein Gebietsschema anbietet, wird
- <classname>Zend_Locale</classname> das erste gefundene Gebietsschema
- verwenden. Wenn der Host kein Gebietsschema anbietet wird automatisch das
- Gebietsschema <code>'browser'</code> verwendet und zurückgegeben.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>'auto'</code> - <classname>Zend_Locale</classname> soll automatisch
- jedes beliebige Gebietsschema erkennen mit dem gearbeitet werden kann.
- Zuerst wird nach dem Gebietsschema des Benutzers gesucht und anschließend,
- wenn das nicht erfolgreich war, nach dem Gebietsschema des Hosts.
- </para>
- <para>
- Wenn kein Gebietsschema gefunden werden konnte, wird eine Ausnahme geworfen
- und bekanntgeben das die automatische Erkennung fehlgeschlagen ist.
- </para>
- </listitem>
- </orderedlist>
- </para>
- <example id="zend.locale.selection.automatic.example-1">
- <title>Verwenden automatischer Gebietsschemata</title>
- <programlisting language="php"><![CDATA[
- // ohne automatische Erkennung
- //$locale = new Zend_Locale(Zend_Locale::BROWSER);
- //$date = new Zend_Date($locale);
- // mit automatischer Erkennung
- $date = new Zend_Date('auto');
- ]]></programlisting>
- </example>
- </sect2>
- <sect2 id="zend.locale.defaultlocale">
- <title>Verwenden eines Standard Gebietsschemas</title>
- <para>
- In einigen Umgebungen ist es nicht möglich automatisch ein Gebietsschema zu erkennen.
- Man kann dieses Verhalten zum Beispiel sehen wenn eine Anfrage von der Kommandozeile
- kommt, oder der anfragende Browser kein Sprachtag gesetzt hat und zusätzlich der Server
- das Standardgebietsschema 'C' gesetzt hat oder ein anderes propäritäres Gebietsschema.
- </para>
- <para>
- In solchen Fällen wirft <classname>Zend_Locale</classname> normalerweise eine Ausnahme
- mit einer Nachricht, das die automatische Erkennung des Gebietsschemas nicht erfolgreich
- war. Es gibt zwei Optionen um diese Situation handzuhaben. Entweder durch das Setzen
- eines neuen Gebietsschemas per Hand, oder der Definition eines Standardgebietsschemas.
- </para>
- <example id="zend.locale.defaultlocale.example-1">
- <title>Handhabung von Ausnahmen für Gebietsschemas</title>
- <programlisting language="php"><![CDATA[
- // In der Bootstrap Datei
- try {
- $locale = new Zend_Locale('auto');
- } catch (Zend_Locale_Exception $e) {
- $locale = new Zend_Locale('de');
- }
- // Im Modell/Kontroller
- $date = new Zend_Date($locale);
- ]]></programlisting>
- </example>
- <para>
- Aber das hat einen großen negativen Effekt. Man muß das Gebietsschema-Objekt in jeder
- Klasse setzen die <classname>Zend_Locale</classname> verwendet. Das kann sehr unhandlch
- sein wenn mehrere Klassen verwendet werden.
- </para>
- <para>
- Seit Zend Framework Release 1.5 gibt es einen viel besseren Weg um das handzuhaben. Man
- kann ein Standard Gebietsschema mit der statischen <code>setDefault()</code> Methode
- setzen. Natürlich wird jedes unbekannte oder nicht voll qualifizierte Gebietsschema eine
- Ausnahme werden. <code>setDefault()</code> sollte der erste Aufruf sein bevor irgendeine
- Klasse initiiert wird die <classname>Zend_Locale</classname> verwendet. Siehe das
- folgende Beispiel für Details:
- </para>
- <example id="zend.locale.defaultlocale.example-2">
- <title>Setzen eines Standardgebietsschemas</title>
- <programlisting language="php"><![CDATA[
- // In der Bootstrap Datei
- Zend_Locale::setDefault('de');
- // Im Modell/Kontroller
- $date = new Zend_Date();
- ]]></programlisting>
- </example>
- <para>
- Im Fall das kein Gebietsschema erkannt wird, wird automatisch das Gebietsschema
- <emphasis>de</emphasis> verwendet. Andernfalls wird das erkannte Gebietsschema
- verwendet.
- </para>
- </sect2>
- <sect2 id="zend.locale.interoperate">
- <title>ZF lokalisierbare Klassen</title>
- <para>
- Im ZF sind lokalisierbare Klassen von <classname>Zend_Locale</classname> abhängig um ein
- Gebietsschema automatisch auszuwählen, wie im oberen Abschnitt geschrieben. Das
- Erstellen eines Datums durch Verwendung von <classname>Zend_Date</classname> ohne die
- Angabe eines Gebietsschemas führt als Ergebnis zu einem Objekt mit einem Gebietsschema,
- basierend auf den Informationen welche durch den Webbrowser des Benutzers zur Verfügung
- gestellt werden.
- </para>
- <example id="zend.locale.interoperate.example-1">
- <title>Daten verwenden das aktuelle Gebietsschema des Web Benutzers</title>
- <programlisting language="php"><![CDATA[
- $date = new Zend_Date('2006',Zend_Date::YEAR);
- ]]></programlisting>
- </example>
- <para>
- Um dieses Standardverhalten zu übergehen, und die eine lokalisierbare ZF Komponente dazu
- zu bringen ein spezielles Gebietsschema zu benutzen welches unabhängig vom Gebietsschema
- des Besucher der Webseite ist, muß als dritter Parameter im Konstruktor das
- Gebietsschema angegeben werden.
- </para>
- <example id="zend.locale.interoperate.example-2">
- <title>Übergehen der Auswahl des standardmäßigen Gebietsschemas</title>
- <programlisting language="php"><![CDATA[
- $usLocale = new Zend_Locale('en_US');
- $date = new Zend_Date('2006', Zend_Date::YEAR, $usLocale);
- $temp = new Zend_Measure_Temperature('100,10',
- Zend_Measure::TEMPERATURE,
- $usLocale);
- ]]></programlisting>
- </example>
- <para>
- Wenn viele Objekte benutzt werden die alle das gleiche Gebietsschema verwenden, sollte
- das Gebietsschema explizit definiert werden, um die zusätzliche Arbeit des Objekts durch
- die Eruierung des Standardmäßigen Gebietsschemas zu verringern.
- </para>
- <example id="zend.locale.interoperate.example-3">
- <title>
- Optimierung der Geschwindigkeit durch Benutzung eines Standard Gebietsschemas
- </title>
- <programlisting language="php"><![CDATA[
- $locale = new Zend_Locale();
- $date = new Zend_Date('2006', Zend_Date::YEAR, $locale);
- $temp = new Zend_Measure_Temperature('100,10',
- Zend_Measure::TEMPERATURE,
- $locale);
- ]]></programlisting>
- </example>
- </sect2>
- <sect2 id="zend.locale.frameworkwidelocale">
- <title>Anwendungsweites Gebietsschema</title>
- <para>
- Zend Framework erlaubt die Verwendung eines Anwendungsweiten Gebietsschemas. Man kann
- einfach eine Instanz von <classname>Zend_Locale</classname> in der Registry mit dem
- Schüssel 'Zend_Locale' setzen. Dann wird diese Instanz in allen Klassen vom Zend
- Framework die Gebietsschemata verwenden selbst verwendet. Auf diesem Weg wird eine
- Instanz in der Registry gesetzt und dann kann man das weitere Setzen vergessen. Sie wird
- automatisch in allen anderen Klassen verwendet. Siehe das folgende Beispiel für die
- richtige Verwendung:
- </para>
- <example id="zend.locale.frameworkwidelocale.example">
- <title>Verwendung eines anwendungsweiten Gebietsschemas</title>
- <programlisting language="php"><![CDATA[
- // In der Bootstrap Datei
- $locale = new Zend_Locale('de_AT');
- Zend_Registry::set('Zend_Locale', $locale);
- // Im Modell oder dem Controller
- $date = new Zend_Date();
- // print $date->getLocale();
- echo $date->getDate();
- ]]></programlisting>
- </example>
- </sect2>
- <sect2 id="zend.locale.formatoptions">
- <title>Zend_Locale_Format::setOptions(array $options)</title>
- <para>
- Die Option 'precision' wird benutzt um einen Wert zu verkürzen oder mit extra Ziffern zu
- strecken. Ein Wert von '-1' verhindert die Veränderung der Anzahl an Ziffern im
- Nachkomma-Teil des Wertes. Die 'locale' Option hilft wenn Nummern und Daten analysiert
- werden und hierbei Trennzeichen oder Monatsnamen verwendet werden. Die Datumsformat
- Option 'format_type' wählt zwischen CLDR/ISO Datumsdefinitionen und PHP's date()
- Definitionen. Die Option 'fix_date' erlaubt oder verhindert eine Automatik welche
- versucht falsche Daten zu korrigieren. Die Option 'number_format' definiert ein Standard
- Format für Nummern bei Verwendung der Funktion <code>toNumber()</code>. (siehe
- <xref
- linkend= "zend.locale.number.localize"/>
- ).
- </para>
- <para>
- Die Option 'date_format' kann verwendet werden um ein Standard Datumsformat zu
- definieren. Aber Achtung bei der Verwendung von getDate(), checkDateFormat() und
- getTime() nach der Verwendung von setOptions() mit einem 'date_format'. Um diese vier
- Methoden mit einem Standard Datumsformat für ein Gebietsschema zu benutzen, muß
- array('date_format' => null, 'locale' => $locale) in deren Optionen angegeben werden.
- </para>
- <example id="zend.locale.formatoptions.example-1">
- <title>Daten die das richtige Gebietsschema des Web Benutzers verwenden</title>
- <programlisting language="php"><![CDATA[
- Zend_Locale_Format::setOptions(array('locale' => 'en_US',
- 'fix_date' => true,
- 'format_type' => 'php'));
- ]]></programlisting>
- </example>
- <para>
- Um mit den Standarddefinitionen eines Gebietsschemas zu arbeiten kann die Konstante
- <classname>Zend_Locale_Format::STANDARD</classname> verwendet werden. Das Setzen der
- Konstante <classname>Zend_Locale_Format::STANDARD</classname> für
- '<code>date_format</code>' benutzt die Standarddefinition des aktuellen Gebietsschemas.
- Das Setzen für 'number_format' benutzt das Standard Nummernformat dieses Gebietsschemas.
- Und das Setzen für 'locale' verwendet das Standard Gebietsschema des Servers oder
- Browsers.
- </para>
- <example id="zend.locale.formatoptions.example-2">
- <title>Verwendung von STANDARD Definitionen für setOptions()</title>
- <programlisting language="php"><![CDATA[
- Zend_Locale_Format::setOptions(array('locale' => 'en_US',
- 'date_format' => 'dd.MMMM.YYYY'));
- // Überladen des global gesetzten Datumsformats
- $date = Zend_Locale_Format::getDate('2007-04-20',
- array('date_format' =>
- Zend_Locale_Format::STANDARD);
- // Überladen des global gesetzten Standard Gebietsschemas
- Zend_Locale_Format::setOptions(array('locale' => Zend_Locale_Format::STANDARD,
- 'date_format' => 'dd.MMMM.YYYY'));
- ]]></programlisting>
- </example>
- </sect2>
- <sect2 id="zend.locale.cache">
- <title>Zend_Locale und dessen Subklassen schneller machen</title>
- <para>
- <classname>Zend_Locale</classname> und dessen Subklassen können durch die Verwendung von
- <classname>Zend_Cache</classname> schneller gemacht werden. Man sollte die statische
- Methode <classname>Zend_Locale::setCache($cache)</classname> verwenden wenn man
- <classname>Zend_Locale</classname> benutzt. <classname>Zend_Locale_Format</classname>
- kann schneller gemacht werden indem die Option <code>cache</code> innerhalb von
- <classname>Zend_Locale_Format::setOptions(array('cache' => $adapter));</classname>
- aufgerufen wird. Wenn beide Klassen verwendet werden sollte nur für
- <classname>Zend_Locale</classname> ein Cache gesetzt werden, da der zuletzt gesetzte
- Cache den vorher gesetzten Cache überschreibt. Der Bequemlichkeit halber gibt es auch
- die statischen Methoden <methodname>getCache()</methodname>,
- <methodname>hasCache()</methodname>, <methodname>clearCache()</methodname> und
- <methodname>removeCache()</methodname>.
- </para>
- <para>
- Wenn kein Cache gesetzt wird, dann setzt <classname>Zend_Locale</classname> automatisch
- von selbst einen Cache. Manchmal ist es gewünscht zu verhindern das ein Cache gesetzt
- wird, selbst wenn das die Performance verringert. In diesem Fall sollte die statische
- <methodname>disableCache(true)</methodname> Methode verwendet werden. Sie schaltet
- nicht nur den aktuell gesetzten Cache aus, ohne Ihn zu löschen, sondern verhindert auch
- das ein Cache automatisch erstellt wird, wenn kein Cache gesetzt ist.
- </para>
- </sect2>
- </sect1>
|