| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 15850 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.currency.usage">
- <title>Arbeiten mit Währungen</title>
- <para>
- Um <classname>Zend_Currency</classname> in einer Anwendung zu verwenden muß nur eine Instanz
- davon erstellt werden ohne das Parameter angegeben werden. Das Erstellt eine Instanz von
- <classname>Zend_Currency</classname> mit deinem Gebietsschema, und definiert die Währung die
- aktuell in diesem Gebietsschema verwendet wird.
- </para>
- <example id="zend.currency.usage.example1">
- <title>Eine Instanz von Zend_Currency anhand des Gebietsschemas erstellen</title>
- <para>
- Angenommen 'en_US' ist, durch die Umgebung des Benutzers, als aktuelles Gebietsschema
- gesetzt. Durch das Angeben keines einzigen Parameters wärend der Erstellung der Instanz
- kann <classname>Zend_Currency</classname> gesagt werden das es die aktuelle Währung des
- Gebietsschemas 'en_US' verwenden soll. Das führt zu einer Instanz mit US Dollar als
- aktueller Währung mit den Formatregeln von 'en_US'.
- </para>
- <programlisting language="php"><![CDATA[
- $currency = new Zend_Currency();
- ]]></programlisting>
- </example>
- <para>
- <classname>Zend_Currency</classname> unterstützt auch die Verwendung eines
- Anwendungsweiten Gebietsschemas. Man kann eine <classname>Zend_Locale</classname> Instanz
- in der Registry wie unten gezeigt setzen. Mit dieser Schreibweise kann man verhindern das
- Gebietsschematas mit jeder Instanz gesetzt werden müssen wenn man das gleiche Gebietsschema
- in der gesamten Anwendung verwenden will.
- </para>
- <programlisting language="php"><![CDATA[
- // In der Bootstrap Datei
- $locale = new Zend_Locale('de_AT');
- Zend_Registry::set('Zend_Locale', $locale);
- // Irgendwo in der Anwendung
- $currency = new Zend_Currency();
- ]]></programlisting>
- <note>
- <para>
- Wenn das eigene System kein standardmäßiges Gebietsschema hat, oder das
- Gebietsschema des eigenen Systems nicht automatisch eruiert werden kann, wird
- <classname>Zend_Currency</classname> eine Ausnahme werfen. Wenn dieses Verhalten
- auftritt sollte man daran denken das Gebietsschema per Hand zu setzen.
- </para>
- </note>
- <para>
- Abhängig von den eigenen Bedürfnissen, können verschiedene Parameter bei der Instanzierung
- angegeben werden. Jeder dieser Parameter ist optional und kann unterdrückt werden. Selbst
- die Reihenfolge dieser Parameter kann gewechselt werden. Die Bedeutung dieser Parmeter wird
- in der folgenden Liste beschrieben:
- </para>
- <itemizedlist mark='opencircle'>
- <listitem>
- <para>
- <emphasis>currency</emphasis>:
- </para>
- <para>
- Ein Gebietsschema kann verschiedene Währungen beinhalten. Deshalb kann der erste
- Parameter <emphasis>'currency'</emphasis> definieren welche Währung verwendet werden
- soll indem der Kurzname oder der komplette Name dieser Währung angegeben wird. Wenn
- die angegebene Währung in keinem Gebietsschema erkannt wird, wird eine Ausnahme
- geworfen. Kurznamen von Währungen bestehen immer aus 3 Buchstaben und sind groß
- geschrieben. Bekannte Kurznamen von Währungen sind zum Beispiel <code>USD</code>
- oder <code>EUR</code>.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>locale</emphasis>:
- </para>
- <para>
- Der <emphasis>'locale'</emphasis> Parameter definiert welches
- Gebietsschema für die Formatierung der Währung verwendet werden soll. Das
- spezifizierte Gebietsschema wird auch verwendet um die Schreibweise und das Symbol
- für diese Währung zu erhalten wenn diese Parameter nicht angegeben werden.
- </para>
- <note>
- <para>
- Es gilt zu Beachten das Zend_Currency nur Gebietsschema akzeptiert die eine
- Region beinhalten. Das bedeutet das alle angegebenen Gebietsschemata die nur
- eine Sprache beinhalten zu einer Ausnahme führen. Zum Beispiel wird das
- Gebietsschema <emphasis>en</emphasis> zu einer Ausnahme führen, aber das
- Gebietsschema <emphasis>en_US</emphasis> wird als Währung
- <emphasis>USD</emphasis> zurückgeben.
- </para>
- </note>
- </listitem>
- </itemizedlist>
- <example id="zend.currency.usage.example2">
- <title>Andere Wege für die Erstellung einer Instanz von Zend_Currency</title>
- <programlisting language="php"><![CDATA[
- // Wir nehmen das Standardgebietsschema 'de_AT' an
- // Erstellt eine Instanz von from 'en_US' und verwendet
- // 'USD' welches die Standardwert von 'en_US' ist
- $currency = new Zend_Currency('en_US');
- // Erstellt eine Instanz vom aktuellen Gebietsschema
- // ('de_AT') und verwendet 'EUR' als Währung
- $currency = new Zend_Currency();
- // Erstellt eine Instanz und verwendet 'EUR' als Währung,
- // 'en_US' für die Formatierung der Ziffern
- $currency = new Zend_Currency('en_US', 'EUR');
- ]]></programlisting>
- </example>
- <para>
- Es können also alle diese Parameter bei <classname>Zend_Currency</classname>'s Constructor
- unterdrückt werden wenn man die Standardwerte verwenden will. Das hat keine negativen
- Effekte bei der Handhabung von Währungen. Es kann aber nützlich sein, wenn man zum Beispiel
- die Standardwährung einer Region nicht weiß.
- </para>
- <note>
- <para>
- Für viele Länder gibt es verschiedene bekannt Währungen. Typishcerweise wird eine
- Währung immer gerade aktuell verwendet und es gibt eventuell noch alte Währungen. Wenn
- der '<emphasis>currency</emphasis>' Parameter unterdrückt wird, wird immer die aktuelle
- Währung verwendet. Die Region '<emphasis>de</emphasis>' zum Beispiel kennt die
- Währungen '<emphasis>EUR</emphasis>' und
- '<emphasis>DEM</emphasis>'... '<emphasis>EUR</emphasis>' ist die
- aktuell verwendete Währung und wird verwendet wenn der Parameter unterdrückt wird.
- </para>
- </note>
- <sect2 id="zend.currency.usage.tocurrency">
- <title>Eine Ausgabe von einer Währung erstellen</title>
- <para>
- Um einen nummerischen Wert in einen formatierten String für die aktuelle Währung zu
- konvertieren, muß man die Methode <emphasis>toCurrency()</emphasis> verwenden. Sie nimmt
- einen Wert der konvertiert werden soll. Der Wert selbst kann jede normalisierte Zahl
- sein.
- </para>
- <para>
- Wenn man nur eine lokalisierte Zahl hat, muß diese zuerst mit
- <link linkend="zend.locale.number.normalize">Zend_Locale_Format::getNumber()</link>
- in einen normalisierte Zahl konvertiert werden. Dann kann Sie mit
- <code>toCurrency()</code> verwendet werden um eine Ausgabe einer Währung zu erstellen.
- </para>
- <para>
- <code>toCurrency(array $options)</code> akzeptiert ein Array mit Optionen welche gesetzt
- werden können um temporär ein Format oder eine Darstellung einer Währung zu setzen. Für
- Details darüber, welche Optionen gesetzt werden können, siehe
- <link linkend="zend.currency.usage.setformat">Ändern des Formats einer Währung</link>.
- </para>
- <example id="zend.currency.usage.tocurrency.example">
- <title>Erstellung und Ausgabe eines Strings einer Währung</title>
- <programlisting language="php"><![CDATA[
- // Erstellt eine Instanz mit 'en_US' und verwendet 'USD'
- // welches die Standardwert von 'en_US' sind
- $currency = new Zend_Currency('en_US');
- // Gibt '$ 1,000.00' aus
- echo $currency->toCurrency(1000);
- // Gibt '$ 1.000,00' aus
- echo $currency->toCurrency(1000, array('format' => 'de_AT'));
- // Gibt '$ ١٬٠٠٠٫٠٠' aus
- echo $currency->toCurrency(1000, array('script' => 'Arab'));
- ]]></programlisting>
- </example>
- </sect2>
- <sect2 id="zend.currency.usage.setformat">
- <title>Das Format einer Währung ändern</title>
- <para>
- Das Format das bei der Erstellung der <classname>Zend_Currency</classname> Instanz
- angegeben wurde, ist natürlich das Standardformat. Aber manchmal ist es nützlich dieses
- Format anzupassen.
- </para>
- <para>
- Das Format einer Währung enthält die folgenden Teile:
- </para>
- <itemizedlist mark='opencircle'>
- <listitem>
- <para>
- <emphasis>Symbol, Kurzname oder Name der Währung</emphasis>:
- </para>
- <para>
- Das Symbol der Währung wird normalerweise bei der Ausgabe eines Währungs Strings
- angezeigt. Es kann unterdrückt oder sogar überschrieben werden wenn das
- notwendig ist.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>Position der Währung</emphasis>:
- </para>
- <para>
- Die Position des Währungssymbols ist normalerweise automatisch durch das
- Gebietsschema definiert. Es kann geändert werden wenn das notwendig ist.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>Script</emphasis>:
- </para>
- <para>
- Die Schreibweise die verwendet werden soll um Ziffern anzuzeigen. Detailierte
- Informationen über Schreibweisen und deren verwendung kann in der Dokumentation
- von <classname>Zend_Locale</classname> im Kapitel
- <link linkend="zend.locale.numbersystems" /> gefunden werden.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>Zahlenformat</emphasis>:
- </para>
- <para>
- Der Wert der Währung (üblicherweise bekannt als Geldwert) wird durch die
- Verwendung der Formatierungsregeln des Gebietsschemas formatiert. Zum Beispiel
- wird im Englischen das ',' Zeichen als Separator für Tausender verwendet wärend
- im Deutschen das '.' Zeichen verwendet wird.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Wenn man also das Format ändern muß, kann die <emphasis>setFormat()</emphasis>
- Methode verwendet werden. Diese akzeptiert ein Array welches alle Optionen enthält die
- geändert werden sollen. Das <code>options</code> Array unterstützt folgenden
- Einstellungen:
- </para>
- <itemizedlist mark='opencircle'>
- <listitem>
- <para>
- <emphasis>position</emphasis>: Definiert die Position an der die Beschreibung
- der Währung angezeigt werden soll. Die unterstützten Positionen können in
- <link linkend="zend.currency.usage.setformat.constantsposition">dieser
- Tabelle</link> gefunden werden.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>script</emphasis>: Definiert welche Schreibweise für die Anzeige
- von Ziffern verwendet werden soll. Die Standardschreibweise der meisten
- Gebietsschemata ist <emphasis>'Latn'</emphasis>, welches die Ziffern 0 bis 9
- enthält. Aber auch andere Schreibweisen wie 'Arab' (Arabisch) können verwendet
- werden.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>format</emphasis>: Definiert das Format welches verwendet werden
- soll um Nummern darzustellen. Dieses Nummern-Format enthält zum Beispiel das
- Trennzeichen für Tausender. Man kann entweder ein Standardformat verwenden indem
- ein Identifikator für ein Gebietsschema angegeben wird, oder das Nummern-Format
- manuell definieren. Wenn kein Format gesetzt wurde, wird das Gebietsschema vom
- <classname>Zend_Currency</classname> Objekt verwendet.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>display</emphasis>: Definiert welcher Teil der Währung verwendet
- werden soll um die Währung darzustellen. Es gibt 4 Darstellungen welche
- verwendet werden können. Sie werden in
- <link linkend="zend.currency.usage.setformat.constantsdescription">dieser
- Tabelle</link> beschrieben.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>precision</emphasis>: Definiert die Genauigkeit welche für die
- Darstellung der Währung verwendet werden soll. Der Standardwert ist
- <emphasis>2</emphasis>.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>name</emphasis>: Definiert den kompletten Namen der Währung der
- angezeigt werden soll. Diese Option überschreibt den Namen der Währung der durch
- die Erstellung von <classname>Zend_Currency</classname> gesetzt wurde.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>currency</emphasis>: Definiert die internationale Abkürzung die
- angezeigt werden soll. Diese Option überschreibt die Abkürzung die durch die
- Erstellung von <classname>Zend_Currency</classname> gesetzt wurde.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>symbol</emphasis>: Definiert das Symbol der Währung welches
- angezeigt werden soll. Diese Option überschreibt das Symbol das durch die
- Erstellung von <classname>Zend_Currency</classname> gesetzt wurde.
- </para>
- </listitem>
- </itemizedlist>
- <table id="zend.currency.usage.setformat.constantsdescription">
- <title>Konstanten für die Auswahl der Position der Währungs Beschreibung</title>
- <tgroup cols="2" align="left">
- <thead>
- <row>
- <entry>Konstante</entry>
- <entry>Beschreibung</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>NO_SYMBOL</entry>
- <entry>Keine Repräsentation der Währung anzeigen</entry>
- </row>
- <row>
- <entry>USE_SYMBOL</entry>
- <entry>Das Währungssymbol anzeigen</entry>
- </row>
- <row>
- <entry>USE_SHORTNAME</entry>
- <entry>
- Die internationale Abkürzung der Währung (3 Buchstaben) anzeigen
- </entry>
- </row>
- <row>
- <entry>USE_NAME</entry>
- <entry>Den kompletten Währungsnamen anzeigen</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- <table id="zend.currency.usage.setformat.constantsposition">
- <title>Konstanten für die Auswahl der Position der Währung</title>
- <tgroup cols="2" align="left">
- <thead>
- <row>
- <entry>Konstante</entry>
- <entry>Beschreibung</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>STANDARD</entry>
- <entry>
- Setzt die Position auf den Standard wie im Gebietsschema definiert
- </entry>
- </row>
- <row>
- <entry>RIGHT</entry>
- <entry>
- Die Währung soll an der rechten Seite vom Wert anzeigen werden
- </entry>
- </row>
- <row>
- <entry>LEFT</entry>
- <entry>Die Währung soll an der linken Seite vom Wert anzeigen werden</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- <example id="zend.currency.usage.setformat.example">
- <title>Das Anzeigeformat der Währung ändern</title>
- <programlisting language="php"><![CDATA[
- // Erstellt eine Instanz mit 'en_US' und verwendet 'USD', 'Latin'
- // und 'en_US' da das die Standardwerte von 'en_US' sind
- $currency = new Zend_Currency('en_US');
- // Gibt 'US$ 1,000.00' aus
- echo $currency->toCurrency(1000);
- $currency->setFormat(array('display' => Zend_Currency::USE_NAME,
- 'position' => Zend_Currency::RIGHT));
- // Gibt '1.000,00 US Dollar' aus
- echo $currency->toCurrency(1000);
- $currency->setFormat(array('name' => 'Amerikanische Dollar'));
- // Gibt '1.000,00 Amerikanische Dollar' aus
- echo $currency->toCurrency(1000);
- $currency->setFormat(array('format' => '##0.00'));
- // Gibt '1000,00 Amerikanische Dollar' aus
- echo $currency->toCurrency(1000);
- ]]></programlisting>
- </example>
- </sect2>
- <sect2 id="zend.currency.usage.informational">
- <title>Referenz Methoden von Zend_Currency</title>
- <para>
- Natürlich bietet <classname>Zend_Currency</classname> auch Methoden an um Informationen
- über jede existierende und viele historische Währungen von
- <classname>Zend_Locale</classname> zu bekommen. Die unterstützten Methoden sind:
- </para>
- <itemizedlist mark='opencircle'>
- <listitem>
- <para>
- <emphasis>getSymbol()</emphasis>:
- </para>
- <para>
- Gibt das bekannte Symbol der aktuellen oder einer angegebenen Währung zurück.
- Zum Beispiel <emphasis>$</emphasis> für den US Dollar innerhalb des
- Gebietsschemas '<emphasis>en_US</emphasis>'.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>getShortName()</emphasis>:
- </para>
- <para>
- Gibt die Abkürzung der aktuellen oder einer angegebenen Währung zurück. Zum
- Beispiel <emphasis>USD</emphasis> für den US Dollar innerhalb des
- Gebietsschemas '<emphasis>en_US</emphasis>'.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>getName()</emphasis>:
- </para>
- <para>
- Gibt den kompletten Namen der aktuellen oder einer angegebenen Währung zurück.
- Zum Beispiel <emphasis>US Dollar</emphasis> für den US Dollar innerhalb des
- Gebietsschemas '<emphasis>en_US</emphasis>'.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>getRegionList()</emphasis>:
- </para>
- <para>
- Gibt eine Liste von Regionen zurück in denen die aktuelle oder eine angegebene
- Währung verwendet wird. Es ist möglich das eine Währung in mehreren Regionen
- Verwendung findet, deswegen ist der Rückgabewert immer ein Array.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>getCurrencyList()</emphasis>:
- </para>
- <para>
- Gibt eine Liste von Währungen zurück die in einer angegebenen Region verwendet
- werden.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Die Funktion <code>getSymbol()</code>, <code>getShortName()</code> und
- <code>getName()</code> akzeptieren zwei optionale Parameter. Wenn kein Parameter
- angegeben wird, werden die Daten von der aktuell gesetzten Währung zurückgegeben. Der
- erste Parameter akzeptiert den Kurznamen der Währung. Kurznamen bestehen immer aus drei
- Buchstaben, zum Beispiel EUR für Euro oder USD für US Dollar. Der zweite Parameter
- definiert von welchem Gebietsschema die Daten gelesen werden sollen. Wenn kein
- Gebietsschema angegeben wird, wird das aktuelle Gebietsschema verwendet.
- </para>
- <example id="zend.currency.usage.informational.example">
- <title>Informationen von Währungen erhalten</title>
- <programlisting language="php"><![CDATA[
- // Erstellt eine Instanz mit 'en_US' und verwendet 'USD', 'Latin'
- // und 'en_US' da das die Standardwerte von 'en_US' sind
- $currency = new Zend_Currency('en_US');
- // Gibt '$' aus
- echo $currency->getSymbol();
- // Gibt 'EUR' aus
- echo $currency->getShortName('EUR');
- // Gibt 'Österreichische Schilling' aus
- echo $currency->getName('ATS', 'de_AT');
- // Gibt ein Array aus mit allen Regionen in denen USD verwendet wird
- print_r($currency->getRegionList();
- // Gibt ein Array aus mit allen Währungen die jemals in dieser
- // Region verwendet wurden
- print_r($currency->getCurrencyList('de_AT');
- ]]></programlisting>
- </example>
- </sect2>
- <sect2 id="zend.currency.usage.setlocale">
- <title>Neue Standardwerte setzen</title>
- <para>
- Die Methode <code>setLocale</code> erlaubt es ein neues Gebietsschema für
- <classname>Zend_Currency</classname> zu setzen. Alle Standardwerte werden überschrieben
- wenn diese Funktion aufgerufen wird. Das beinhaltet den Namen der Währung, die Abkürzung
- und das Symbol.
- </para>
- <example id="zend.currency.usage.setlocale.example">
- <title>Ein neues Gebietsschema setzen</title>
- <programlisting language="php"><![CDATA[
- // Die Währung für US bekommen
- $currency = new Zend_Currency('en_US');
- print $currency->toCurrency(1000);
- // Die Währung für AT erhalten
- $currency->setLocale('de_AT');
- print $currency->toCurrency(1000);
- ]]></programlisting>
- </example>
- </sect2>
- <sect2 id="zend.currency.usage.cache">
- <title>Zend_Currency Performance Optimierung</title>
- <para>
- <classname>Zend_Currency</classname>'s Geschwindigkeit kann optimiert werden indem
- <classname>Zend_Cache</classname> verwendet wird. Die statischen Methode
- <classname>Zend_Currency::setCache($cache)</classname> akzeptiert eine Option: Einen
- <classname>Zend_Cache</classname> Adapter. Wenn der Cache Adapter gesetzt wird, werden
- die Lokalisierungsdaten von Zend_Currency gecached. Es gibt einige statischen Methoden
- für die Manipulation des Caches: <classname>Zend_Currency::getCache()</classname>,
- <code>hasCache()</code>, <code>clearCache()</code> und <code>removeCache()</code>.
- </para>
- <example id="zend.currency.usage.cache.example">
- <title>Cachen von Währungen</title>
- <programlisting language="php"><![CDATA[
- // Ein Cache-Objekt erstellen
- $cache = Zend_Cache::factory('Core',
- 'File',
- array('lifetime' => 120,
- 'automatic_serialization' => true),
- array('cache_dir'
- => dirname(__FILE__) . '/_files/'));
- Zend_Currency::setCache($cache);
- ]]></programlisting>
- </example>
- </sect2>
- </sect1>
|