Normalisierung und LokalisierungZend_Locale_Format ist eine interne Komponente, welche von Zend_Locale verwendet wird. Alle lokalisierbaren Klassen benutzen Zend_Locale_Format für Normalisierung und Lokalisierung von Nummern und Daten. Normalisierung beinhaltet das Analysieren von Eingaben von einer Vielfalt von Werten wie Datumswerten in eine standardisierte, strukturieren Art wie zum Beispiel ein PHP Array mit Jahr, Monat und Tages Elementen. Genau die gleiche Zeichenkette, die eine Zahl oder ein Datum enthält, kann verschiedenes bedeuten für Leute mit unterschiedlichen Gebräuchen und Konventionen. Das Auflösen von Mehrdeutigkeiten von Nummern und Daten benötigt Regeln darüber, wie diese Zeichenketten zu interpretieren sind um diese Werte in eine standardisierte Form zu bringen. Deswegen benötigen alle Methoden in Zend_Locale_Format ein Gebietsschema, um Eingabedaten analysieren zu können.
Normalisierung von Zahlen: getNumber($input, Array $options)Es gibt viele » Ziffernsysteme, welche sich vom üblichen » Dezimalsystem unterscheiden (z.B. "3.14"). Zahlen können mit der Funktion getNumber() normalisiert werden, um ein gleichwertiges Ergebnis in einer Schreibweise des Standarddezimalsystems zu erhalten. Für alle Ziffern-relevanten Diskussionen in diesem Handbuch werden die » Arabisch/Europäischen Ziffern (0,1,2,3,4,5,6,7,8,9) verwendet, ausser es ist anders definiert. Das Options-Array kann ein 'locale'.Gebietsschema enthalten, um eine Gruppierung und Kommazeichen zu definieren. Das Array kann auch eine Genauigkeit 'precision' enthalten, um überschüssige Ziffern vom Ergebnis abzuschneiden. Example #1 Normalisieren von Zahlen
Genauigkeit und BerechnungenDa getNumber($value, array $options = array()) extrem große Zahlen lokalisieren kann, sollte das Ergebnis sorgfältig geprüft werden, bevor endlich genaue Berechnungen wie normale mathematische PHP Operationen gemacht werden. Zum Beispiel if ((string)int_val($number) != $number) { benutze » BCMath oder » GMP. Die meisten PHP Installationen unterstützen die BCMath Erweiterung. Auch die Genauigkeit des dezimalen Ergebnisses bei getNumber() kann mit der Option'precision' 'precision' zu einer gewünschten Länge abgerundet werden. Wenn keine Genauigkeit angegeben wurde, wird nicht abgerundet. Für die Angabe der Genauigkeit dürfen nur PHP Integer Zahlen verwendet werden. Das Ergebnis wird nicht gerundet. Deswegen wird "1.6" auch "1" und nicht "2" zurückgeben, wenn als Genauigkeit null angegeben wurde. Wenn das dezimale Ergebnis zu einer gewünschten Länge abgeschnitten statt gerundet werden soll kann stattdessen die Option 'number_format' verwendet werden. Die Länge des gewünschten dezimalen Ergebnisses kann mit der gewünschten Länge von Nullen bestimmt werden. Das Ergebnis wird dann nicht gerundet. Wenn also die definierte Genauigkeit innerhalb von number_format Null ist wird "1.6" den Wert "1" und nicht "2" zurückgeben. Siehe das folgende Beispiel: Example #2 Normalisierung von Zahlen mit Genauigkeit
Lokalisieren von ZahlentoNumber($value, array $options = array()) kann mit Hilfe der folgenden unterstützten Gebietsschemata, Zahlen lokalisieren. Diese Funktion gibt eine lokalisierte Zeichenkette der angegebenen Zahl in dem konventionellen Format für ein definiertes Gebietsschema aus. Die Option 'number_format' definiert ein explizit angegebenes, nicht standardmäßiges Zahlenformat für die Verwendung mit toNumber(). Example #3 Lokalisieren von Zahlen
Genauso wie getNumber() verwendet toNumber() die Genauigkeit. Wenn keine Genauigkeit angegeben wurde, wird die komplette lokalisierte Zahl zurückgegeben. Example #4 Zahlen mit bestimmter Genauigkeit lokalisieren
Wird die Option 'number_format' benutzt, kann ein selbst definiertes Format für das erstellen der Zahl definiert werden. Das Format selbst muß im CLDR Format wie anbei beschrieben angegeben werden. Das Gebietsschema wird hierbei benutzt um das Trennzeichen, die Genauigkeit und andere Formatierungszeichen für Zahlen zu erhalten. Deutsch definiert zum Beispiel ',' als Kommazeichen und im Englischen wird das '.' Zeichen benutzt.
Example #5 Ein selbst definiertes Zahlenformat verwenden
Testen von ZahlenisNumber($value, array $options = array()) prüft, ob eine gegebene Zeichenkette eine Zahl enthält und gibt TRUE oder FALSE zurück. Example #6 Testen von Zahlen
Gleitkommazahlen normalisieren
Lokalisierte Gleitkommazahlen können mit Example #7 Gleitkommazahlen normalisieren
Lokalisieren von GleitkommazahlentoFloat() kann Gleitkommazahlen lokalisieren. Diese Funktion gibt eine lokalisierte Zeichenkette mit der gegebenen Zahl zurück. Example #8 Lokalisieren von Gleitkommazahlen
Testen von GleitkommazahlenisFloat($value, array $options = array()) prüft, ob eine gegebene Zeichenkette eine Gleitkommazahl enthält und gibt TRUE oder FALSE zurück. Example #9 Testen von Gleitkommazahlen
Integer-Zahlen normalisierenGanzzahlen können mit der Funktion getInteger() analysiert werden. Es wird ein Ganzzahlwert (Integer) zurückgegeben. Example #10 Normalisieren von Integer-Zahlen
Lokalisieren von GanzzahlentoInteger($value, array $options = array()) kann Integer-Zahlen lokalisieren. Diese Funktion gibt eine lokalisierte Zeichenkette anhand der gegebenen Nummer zurück. Example #11 Lokalisieren von Integer-Zahlen
Testen von Integer-ZahlenisInteger($value, array $options = array()) prüft ob eine gegebene Zeichenkette eine Ganzzahl enthält und gibt TRUE oder FALSE zurück. Example #12 Testen von Integer-Zahlen
Konvertieren von ZahlensystemenZend_Locale_Format::convertNumerals() kann die Ziffern zwischen den unterschiedlichen » Zahlensystemen umwandeln. Das inkludiert auch das Standard Arabisch/Europäisch/Lateinische Zahlensystem (0,1,2,3,4,5,6,7,8,9). Nicht zu verwechseln mit dem » Ost-arabischen Zahlensystem, welches in der Arabischen Sprache benutzt wird, um Zahlen zu schreiben. Der Versuch, ein nicht unterstütztes Zahlensystem zu benutzen, führt zu einer Ausnahme, um eine irrtümliche falsche Konvertierung wegen eines Schreibfehlers zu verhindern. Alle Zeichen der Eingabe, welche keine Ziffern des angegebenen Zahlenformates sind, werden in den Ausgabestring kopiert ohne dass sie verändert werden. Das beinhaltet auch die Trennzeichen der Zahlen. Zend_Locale* Komponenten sind abhängig von den Daten, welche durch CLDR zur Verfügung gestellt werden (hier ist eine » Liste von Schreibweisen gruppiert nach Sprachen). Im CLDR und auch hier, werden die Europäisch/Lateinischen Zahlen als "Latin" oder mit dem zugeordneten 4-Zeichen-Code "Latn" bezeichnet. Im CLDR werden Zahlensysteme auch als "Schreibweisen" (Scripts) bezeichnet.
Nehmen wir an eine Web-Form erhält eine numerische Eingabe, welche Ost-Arabische
Ziffern enthält "١٠٠". Die meisten Programme und PHP-Funktionen
erwarten Eingaben aber als Lateinische Ziffern. Glücklicherweise ist die
Konvertierung dieser Eingabe in gleichwertige Lateinische Ziffern "100" sehr wenig
Aufwand. Es muss nur Example #13 Konvertieren von Ost-Arabischen Ziffern in Europäisch-Lateinische Ziffern
Genauso kann jedes unterstützte Zahlensystem in jedes andere unterstützte Zahlensystem konvertiert werden. Example #14 Konvertieren von Lateinischen Ziffern in Ost-Arabische Ziffern
Example #15 Auslesen des 4 Zeichen CLDR Codes durch Benutzen des Namens in der Muttersprache
Für eine Liste der unterstützten Zahlensysteme kann man Zend_Locale::getTranslationList('numberingsystem', 'en') aufrufen.
|