Zend_Locale verwendenZend_Locale liefert auch lokalisierte Informationen über Gebietsschema für jedes Gebietsschema. Das beinhaltet unser anderem lokalisierte Namen für andere gebietsschema, Tage der Woche, Monatsnamen, usw. Kopieren, Klonen und Serialisieren von Gebietsschema ObjektenVerwende » Klonen von Objekten um Gebietsschema Objekte exakt und effizient zu duplizieren. Die meisten lokalisierbaren Methoden akzeptieren auch eine Zeichenkette welche das Gebietsschema repräsentiert. Dieser entspricht dem Ergebnis von $locale->toString(). Example #1 Klonen
GleichheitZend_Locale bietet auch eine erwartete Funktion zum Vergleichen von zwei Gebietsschema an. Alle lokalisierbaren Klassen sollten eine Vergleichbare Funktion für eine Gleichheitsprüfung anbieten. Example #2 Prüfung auf gleiche Gebietsschemata
Standard GebietsschemataDie Methode getDefault() gibt ein Array mit relevanten Gebietsschemata zurück wobei Informationen vom Web Browser des Benutzers (wenn vorhanden), Informationen vom Betriebsystem des Host Servers und Zend Framework Einstellungen benutzt werden. Wie beim Konstruktor von Zend_Locale wählt der erste Parameter die bevorzugte Umgebung von der die Informationen zuerst geholt werden sollen (BROWSER, ENVIRONMENT, oder FRAMEWORK). Der zweite Parameter wechselt zwischen der Rückgabe aller gefundenen Gebietsschemata oder nur dem ersten oder besten Gebietsschema. Lokalisierbare Komponenten benutzen normalerweise nur das erste Gebietsschema. Wenn vorhanden, wird eine Bewertung der Qualität mit angegeben. Example #3 Das Standard Gebietsschema erhalten Um nur die Standard Gebietsschema für BROWSER, ENVIRONMENT, oder FRAMEWORK zu erhalten, können die folgenden Methoden benutzt werden:
Ein neues Gebietsschema setzenEin neues Gebietsschema kann mit der Funktion setLocale() gesetzt werden. Diese Funktion nimmt eine Gebietsschema Zeichenkette als Parameter an. Wenn kein Gebietsschema angegeben wurde, wird ein automatisch gewähltes Gebietsschema benutzt. Auslesen von Sprache und RegiongetLanguage() gibt eine Zeichenkette zurück welche den zwei-Zeichen Code der Sprache des Gebietsschemas enthält. getRegion() gibt eine Zeichenkette zurück welche den Zwei-Zeichen Code der Region des Gebietsschemas enthält. Ein Gebietsschema durch die Angabe eines Territoriums erhaltenWenn man nur ein Territorium oder ein Land hat, dann ist es auch möglich aus diesen Informationen ein Gebietsschema zu erhalten. Man kann manuell suchen ob es ein Gebietsschema für dieses Territorium gibt, indem man getLocaleToTerritory() verwendet. Diese Methode gibt ein Gebietsschema für das angegebene Territorium zurück, oder NULL wenn kein Gebietsschema gefunden werden konnte. Example #6 getLocaleToTerritory
Lokalisierte Zeichenketten beschaffengetTranslationList() gibt Zugriff auf viele Arten von lokalisierten Informationen. Diese Informationen sind sehr nützlich wenn man einem Benutzer lokalisierte Daten anzeigen will, ohne das man alles Übersetzen muß. Diese Informationen sind bereits für den Gebrauch vorhanden. Die angefragte Liste an Informationen wird immer als benanntes Array zurückgegeben. Wenn mehr als ein Wert zu einem expliziten Typ angegeben werden soll von dem man Werte erhalten will, muss ein Array statt mehrerer Werte übergeben werden. Example #7 getTranslationList
Man kann diese Informationen für alle Sprachen auslesen. Aber nicht alle dieser Informationen sind komplett für alle Sprachen. Einige dieser Arten sind auch durch eine eigene Funktion erhältlich wegen der Einfachheit. Anbei eine Liste für detailierte Informationen hierüber.
Wenn nur ein einzelner übersetzter Wert benötigt wird, kann die getTranslation() Methode verwendet werden. Diese gibt immer einen String zurück, akzeptiert aber einige andere Typen als die getTranslationList() Methode. Auch der Wert ist der gleiche wie vorher mit einem Unterschied. Das Detail das man zurückerhalten will muß als zusätzlicher Wert angegeben werden
Siehe die folgende Tabelle für detailierte Informationen:
Das folgende Beispiel zeigt wie man die Namen für Dinge in verschiedenen Sprachen erhalten kann. Example #8 getTranslationList
Das nächste Beispiel zeigt wie der Name einer Sprache in einer anderen Sprache gefunden werden kann, wenn der zwei-Zeichen ISO Länder-Code unbekannt ist. Example #9 Konvertierung des Ländernamens von einer Sprache in eine andere Sprache
Um von Zend_Locale eine Liste aller bekannten Sprachen zu bekommen wobei jede Sprache in Ihrer eigenen Sprache geschrieben wird, kann das untere Beispiel in einer Web Seite benutzt werden. Genauso können getCountryTranslationList() und getCountryTranslation() benutzt werden um eine Tabelle zu erhalten die Namen für Muttersprachen einer Region und Namen für Regionen in einer anderen Sprache zu erhalten. Man muß einen try .. catch Block benutzen um Ausnahmen abzufangen die auftreten wenn ein Gebietsschema benutzt wird das nicht existiert. Nicht alle Sprachen sind auch ein Gebietsschema. Im Beispiel werden die Ausnahmen ignoriert um einen frühen Abbruch zu verhindern. Example #10 Alle Sprachen geschrieben in Ihrer Muttersprache Übersetzungen für "Ja" und "Nein" erhaltenOft müssen Programme eine "Ja" oder "Nein" Rückmeldung eines Benutzers erkennen. getQuestion() gibt ein Array zurück welches die richtigen Wörter oder Regex Zeichenketten enthält um einem Benutzer in einer bestimmten $locale zu antworten (Standardmäßig das aktuelle Gebietsschema des Objekts). Das zurückgegebene Array enthält die folgenden Informationen:
Alle diese Informationen sind natürlich lokalisiert und hängen vom eingestellten Gebietsschema ab. Das folgende Beispiel zeigt die Informationen die empfangen werden können: Example #11 getQuestion() Eine Liste aller bekannten Gebietsschemata erhaltenManchmal will man eine Liste aller bekannten Gebietsschemata erhalten. Das kann für die verschiedensten Aufgaben nützlich sein, zum Beispiel für die Erstellung einer Auswahlbox. Für diesen Zweck kann die statische getLocaleList() Methode verwender werden, welche eine Liste aller bekannten Gebietsschemata zurückgibt. Example #12 getLocaleList()
Erkennen von GebietsschemataWenn man erkennen will ob eine vorhandene Eingabe. unabhängig von Ihrer Quelle, ein Gebietsschema ist, sollte man die statische isLocale() Methode verwenden. Der erste Parameter dieser Methode ist der String den man prüfen will. Example #13 Einfache Erkennung des Gebietsschemas Wie man sieht ist die Ausgabe dieser Methode immer ein boolscher Wert. Es gibt nur einen Grund warum man eine Ausnahme erhält wenn diese Methode aufgerufen wird. Wenn das eigene System kein Gebietsschema anbietet und Zend Framework nicht in der Lage ist dieses automatisch zu erkennen. Normalerweise zeigt dieses, das ein Problem mit dem eigenen OS in Kombination mit PHP's setlocale() vorhanden ist. Man sollte auch beachten das jeder angegebene Gebietsschema String automatisch degradiert wird wenn der Regionsabschnitt für dieses Gebietsschema nicht existiert. In unserem vorherigen Beispiel existiert die Region 'RU' nicht für die Sprache 'to', aber es wird trotzdem TRUE zurückgegeben da Zend_Locale mit der vorhandenen Eingabe arbeiten kann. Trotzdem ist es manchmal nützlich diese automatische Degradierung zu verhindern, und hier kommt der zweite Parameter von isLocale() zu Tragen. Der strict Parameter ist Standardmäßig FALSE und kann verwendet werden um die automatische Degradierung zu verhindern wenn er auf TRUE gesetzt wird. Example #14 Strikte Erkennung des Gebietsschemas Jetzt da man in der Lage zu Erkennen ob ein vorhandenen String ein Gebietsschema ist kann man Gebietsschema bezogenes Verhalten in seine eigenen Klassen hinzufügen. Aber man wird schnell erkennen dass das immer zu den gleichen 15 Zeilen Code führt. Etwas ähnliches wie das folgende Beispiel: Example #15 Implementierung von Gebietsschema bezogenem Verhalten
Mit Zend Framework 1.8 haben wir die statische findLocale() Methode hinzugefügt welche einen Gebietsschema-String zurückgibt mit dem man arbeiten kann. Sie führt die folgenden Arbeiten durch:
Das folgende Beispiel zeigt wie diese Prüfungen und der obige Code mti einem einfachen Aufruf vereinfacht werden kann: Example #16 Gebietsschema bezogenes Verhalten mit Zend Framework 1.8
|