Der einfachste Anwendungsfall in einer Anwendung ist die Verwendung des Gebietsschemas
des Clients. Wenn man eine Instanz von Zend_Currency
erstellt
ohne eine Option anzugeben, wird das Gebietsschema des Clients verwendet um die richtige
Währung zu setzen.
Beispiel 150. Erstellung einer Währung mit Client Einstellungen
Angenommen unser Client hat "en_US" als gewünschte Sprache in seinem Browser
gesetzt. In diesem Fall wird Zend_Currency
die Währung welche
zu verwenden automatisch erkannt.
$currency = new Zend_Currency(); // Siehe die Standardwerte welche vom Client abhängen // var_dump($currency);
Das erstellte Objekt würde jetzt die Währung "US Dollar" enthalten da dies die aktuell zugeordnete Währung für US (Vereinigte Staaten) ist. Es wurden auch andere Optionen gesetzt wie "$" für das Währungszeichen oder "USD" für die Abkürzung.
Die automatische Erkennung des Gebietsschemas funktioniert nicht immer
Es ist zu beachten das die automatische Erkennung des Gebietsschemas nicht immer
richtig funktioniert. Der Grund für dieses Verhalten liegt darin das
Zend_Currency
ein Gebietsschema benötigt welches eine Region
enthält. Wenn der Client nur "en" als Gebietsschema setzt würde
Zend_Currency
nicht mehr wissen welches der mehr als 30
Länder gemeint ist. In diesem Fall wird eine Exception geworfen.
Ein Client könnte die Einstellungen des Gebietsschemas in seinem Browser auch unterdrücken. Das würde zum Problem führen dass die Einstellungen der eigenen Umgebung als Fallback verwendet werden und dies könnte auch zu einer Exception führen.
Um diese Probleme mit dem Client zu vermeiden kann man das gewünschte Gebietsschema einfach manuell setzen.
$currency = new Zend_Currency('en_US'); // Man könnte auch die 'locale' Option verwenden // $currency = new Zend_Currency(array('locale' => 'en_US')); // Siehe die aktuellen Einstellungen welche auf 'en_US' fixiert sind // var_dump($currency);
Wie in unserem ersten Beispiel ist die verwendete Währung "US Dollar". Aber jetzt sind wir nicht mehr von den Einstellungen des Clients abhängig.
Zend_Currency
unterstützt auch die Verwendung eines
Anwendungsweiten Gebietsschemas. Man kann eine Instanz von
Zend_Locale
wie anbei gezeigt in der Registry setzen. Mit dieser
Schreibweise vermeidet man das manuelle Setzen des Gebietsschemas für jede Instanz, wenn
man das selbe Gebietsschema in der gesamten Anwendung verwenden will.
// In der Bootstrap Datei $locale = new Zend_Locale('de_AT'); Zend_Registry::set('Zend_Locale', $locale); // Irgendwo in der Anwendung $currency = new Zend_Currency();
Zend_Currency
ist auch in der Lage basierend auf einem
angegebenen Land zu arbeiten indem intern Zend_Locale
verwendet
wird.
$currency = new Zend_Currency('US'); // See the actual settings which are fixed to 'en_US' // var_dump($currency);
Uppercase territories
When you know that you are using a territory, then you should uppercase it. Otherwise you could get an in your eyes false locale in return. For example, when you give "om" then you could expect "ar_OM" to be returned. But in fact it returns "om", as it's also a language.
Therefor always uppercase the input when you know that a territory is meant.