| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 15215 -->
- <!-- 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 role="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 role="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 role="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 role="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 role="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 role="strong">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 role="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 role="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 role="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 role="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 role="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 role="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 <classname>Zend_Locale::getCache()</classname>, <code>hasCache()</code>,
- <code>clearCache()</code> und <code>removeCache()</code>.
- </para>
- </sect2>
- </sect1>
|