Zend_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 Datumswerte in eine standardisierten, 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 meint etwas ganz anderes für Leute
        mit anderen Regeln und Konventionen. Die Erkennung 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.
        
![]()  | 
Standard "root" Gebietsschema | 
|---|---|
Wenn kein Gebietsschema spezifiziert wurde, wird die Normalisierung und Lokalisierung das Standard "root" Gebietsschema verwenden, was zu unerwarteten Ergebnissen führen kann wenn die Eingabe in einem anderen Gebietsschema angegeben oder die Ausgabe für ein anderes Gebietsschema erwartet wurde.  | 
            Es gibt viele
            Ziffernsysteme
            welche siche vom üblichen 
            Dezimalsystem
            unterscheiden (z.B. "3.14"). Nummern können mit der Funktion getNumber()
            normalisiert werden um ein gleichwertiges Ergebnis in einer Schreibweise des Standard
            Dezimalsystems 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.
        
Beispiel 18.18. Normalisieren von Nummern
<?php
require_once 'Zend/Locale.php';
$locale = new Zend_Locale('de_AT');
$number = Zend_Locale_Format::getNumber('13.524,678', array('locale' => $locale, 'precision' => 3));
print $number; // wird 13524.678 zurückgeben
?>
                Da getNumber($value, array $options = array()) extrem lange Nummern 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 kann zu einer gewünschten Länge abgeschnitten werden
                mithilfe von getNumber(). Wenn keine Genauigkeit angegeben wurde, wird nichts
                abgeschnitten. Für die Angabe der Genauigkeit dürfen nur PHP Interger 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.
            
            toNumber($value, array $options = array()) kann Nummern lokalisieren, mit Hilfe
            der unterstützten Gebietsschemata. Diese Funktion
            gibt eine lokalisierte Zeichenkette der angegebenen Nummer in dem konventionellen Format für ein
            definiertes Gebietsschema aus. Die Option 'number_format' definiert ein explizit angegebenes
            nicht standardmäßiges Nummernformat für die Verwendung mit toNumber().
        
Beispiel 18.20. Lokalisieren von Nummern
<?php
require_once 'Zend/Locale.php';
$locale = new Zend_Locale('de_AT');
$number = Zend_Locale_Format::toNumber(13547.36, array('locale' => $locale));
// gibt 13.547,36 zurück
print $number;
?>
![]()  | 
Unlimitierte Länge | 
|---|---|
                      | 
            Auf dem selben Web wie unter getNumber() verwendet toNumber() die Genauigkeit.
            Wenn keine Genauigkeit angegeben wurde, wird die komplette lokalisierte Nummer zurückgegeben.
        
Beispiel 18.21. Nummern mit bestimmter Genauigkeit lokalisieren
<?php
require_once 'Zend/Locale.php';
$locale = new Zend_Locale('de_AT');
$number = Zend_Locale_Format::toNumber(13547.3678, array('precision' => 2, 'locale' => $locale));
// gibt 13.547,36 zurück
print $number;
?>
![]()  | 
Achtung | 
|---|---|
                      | 
Wird die Option 'number_format' benutzt, kann ein selbst definiertes Format für das erstellen der Nummer 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.
Tabelle 18.2. Definitionen für selbst erzeugte Zahlenformate
| Definition | Beschreibung | Beispiel Format | Erzeugte Ausgabe | 
|---|---|---|---|
| #0 | Erzeugt eine Zahl ohne Genauigkeit und ohne Trennung | #0 | 1234567 | 
| , | Erzeugt eine Trennung mit der Länge von einem Trennzeichen zum nächsten oder zur 0 | #,##0 | 1,234,567 | 
| #,##,##0 | Erzeugt eine Standard Trennung von 3 und alle weiteren Trennungen mit 2 | #,##,##0 | 12,34,567 | 
| . | Erzeugt eine Kommazahl | #0.# | 1234567.1234 | 
| 0 | Erzeugt eine Kommazahl mit definierter Länge | #0.00 | 1234567.12 | 
Beispiel 18.22. Ein selbst definiertes Zahlenformat verwenden
<?php
require_once 'Zend/Locale.php';
$locale = new Zend_Locale('de_AT');
$number = Zend_Locale_Format::toNumber(13547.3678, array('number_format' => '#,#0.00', 'locale' => 'de'));
// gibt 1.35.47,36 zurück
print $number;
$number = Zend_Locale_Format::toNumber(13547.3, array('number_format' => '#,##0.00', 'locale' => 'de'));
// gibt 13.547,30 zurück
print $number;
?>
            isNumber($value, array $options = array()) prüft ob eine gegebene Zeichenkette eine Zahl
            enthält und gibt wahr oder falsch zurück.
        
            Lokalisierte Gleitkommazahlen können mit getFloat($value, array $options = array())
            analysiert werden. Es wird eine Gleitkommazahl zurückgegeben.
        
            toFloat() kann Gleitkommazahlen lokalisieren. Diese Funktion gibt eine
            lokalisierte Zeichenkette mit der gegebenen Zahl zurück.
        
Beispiel 18.25. Lokalisieren von Gleitkommazahlen
<?php
require_once 'Zend/Locale.php';
$locale = new Zend_Locale('de_AT');
$number = Zend_Locale_Format::toFloat(13547.3655, array('precision' => 1, 'locale' => $locale));
// gibt 13.547,3 zurück
print $number;
?>
![]()  | 
Achtung | 
|---|---|
                      | 
            isFloat($value, array $options = array()) prüft ob eine gegebene Zeichenkette eine
            Gleitkommazahl enthält und gibt wahr oder falsch zurück.
        
            Integer Zahlen können mit der Funktion getInteger() analysiert werden. Es wird ein
            Integer Wert zurückgegeben.
        
            toInteger($value, array $options = array()) kann Integer Zahlen lokalisieren.
            Diese Funktion gibt eine lokalisierte Zeichenkette anhand der gegebenen Nummer zurück.
        
            isInteger($value, array $options = array()) prüft ob eine gegebene Zeichenkette eine
            Integer Zahl enthält und gibt wahr oder falsch zurück.
        
            Zend_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 das Sie verändert werden. Das beinhaltet
            auch die Trennzeichen der Zahlen. Zend_Locale* Komponenten sind abhängig von den Daten welche
            durch die CLDR liefert (hier ist eine
            
            Liste von Schreibweisen gruppiert nach Sprachen).
        
Im CLDR und auch hier, werden die Europäisch/Lateinischen Zahlen als "Latin" bezeichnet und mit dem zugeordneten 4-Zeichen-Code "Latn" referriert. Im CLDR werden Zahlensysteme auch als "Schreibweisen" (Scripts) bezeichnet.
            Nehmen wir an eine Web Form erhält eine nummerische Eingabe welche Ost-Arabische Ziffern
            enthält "١٠٠". Die meisten Programme und PHP Funktionen erwarten Eingaben aber als Lateinische Ziffern.
            Glücklicherweise wird für die Konvertierung dieser Eingabe in gleichwertige Lateinische Ziffern "100"
            sehr wenig Aufwand. Es muß nur 
            convertNumerals($inputNumeralString, $sourceNumeralSystem, $destNumeralSystem) benutzt werden
            und hierbei die Ziffern der Schreibweise $sourceNumeralSystem in die Schreibweise
            $destNumeralSystem konvertiert werden.
        
Beispiel 18.30. Konvertieren von Ost-Arabischen Ziffern in Europäisch Lateinische Ziffern
<?php require_once 'Zend/Locale.php'; $arabicScript = "١٠٠"; // Arabisch für "100" (ein Hundert) $latinScript = Zend_Locale_Format::convertNumerals($arabicScript, 'Arab', 'Latn'); print "\nOriginal: " . $arabicScript; print "\nNormalisiert: " . $latinScript; ?>
Genauso kann jedes unterstützte Zahlensystem in jedes andere unterstützte Zahlensystem konvertiert werden.
Beispiel 18.31. Konvertieren von Lateinischen Ziffern in Ost-Arabische Ziffern
<?php require_once 'Zend/Locale.php'; $latinScript = '123'; $arabicScript = Zend_Locale_Format::convertNumerals($latinScript, 'Latn', 'Arab'); print "\nOriginal: " . $latinScript; print "\nLokalisiert: " . $arabicScript; ?>
Beispiel 18.32. Auslesen des 4 Zeichen CLDR Codes durch Benutzen des Namens in der Muttersprache
<?php
function getScriptCode($scriptName, $locale)
{
    $scripts2names = Zend_Locale_Data::getContent($locale, 'scriptlist');
    $names2scripts = array_flip($scripts2names);
    return $names2scripts[$scriptName];
}
echo getScriptCode('Latin', 'en'); // ausgabe "Latn"
echo getScriptCode('Tamil', 'en'); // ausgabe "Taml"
echo getScriptCode('tamoul', 'fr'); // ausgabe "Taml"
?>
Tabelle 18.3. Liste der unterstützten Zahlensysteme
| Geschriebener Name | Schreibweise | 
|---|---|
| Arabisch | Arab | 
| Balinesisch | Bali | 
| Bengalisch | Beng | 
| Devanagari | Deva | 
| Gujarati | Gujr | 
| Gurmukhi | Guru | 
| Kannada | Knda | 
| Khmer | Khmr | 
| Laotisch | Laoo | 
| Limbu | Limb | 
| Malaysisch | Mlym | 
| Mongolisch | Mong | 
| Burmesisch | Mymr | 
| Tai Lue | Talu | 
| N’Ko | Nkoo | 
| Oriya | Orya | 
| Tamilisch | Taml | 
| Telugu | Telu | 
| Tai Le | Tale | 
| Tibetisch | Tibt |