2010-03-06 2 views
12

Ich löste eine ziemlich große alte Bibliothek mit verschiedenen PHP Hilfsfunktionen auf, die sich im Laufe der Zeit angesammelt haben. Ich suche nach Zend Framework basierten Ersatz für so viele dieser Funktionen wie möglich.Browsersprache (n) in Zend Framework bestimmen?

Mein erster Kandidat ist eine Funktion, die am meisten bevorzugte Browser-Sprache aus der riesigen Liste, die http_accept_language sein kann, zurückgibt.

Hat ZF eine Funktion dafür?

Ich realisiere Zend_Translate ist irgendwie in der Lage, die Browser-Sprache zu erkennen, aber ich sehe keine öffentlich verfügbare Funktion, um tatsächlich die Sprachzeichenfolge zu bekommen.

Antwort

11

Sie gehen:

$locale = new Zend_Locale(); 

// if locale is 'de_AT' then 'de' will be returned as language 
print $locale->getLanguage(); 

// if locale is 'de_AT' then 'AT' will be returned as region 
print $locale->getRegion(); 
+0

Was passiert, wenn die Präferenz nur "en" oder "es" ist? http://stackoverflow.com/questions/16469629/zend-locale-zend-currency-region-code – Michelangelo

+0

Ich antwortete direkt auf Ihre Frage. –

9

Zend_Locale sollte in der Lage sein, darüber zu helfen.

Siehe Beispiele und Erklärungen auf der Seite Using Zend_Locale(Zitat):

Für die meisten Situationen werden new Zend_Locale() automatisch das richtige Gebietsschema wählen, mit Vorzug Informationen gegeben durch den Web Benutzer zur Verfügung gestellt Browser.


Und es gibt ein paar weitere Details später auf dieser Seite (Zitat):

Der Suchalgorithmus von Zend_Locale für die automatische Auswahl eines Gebietsschema verwendet werden drei Quellen von Informationen:

1.const Zend_Locale::BROWSER - Der Web-Browser des Benutzers bietet Informationen mit jeder Anfrage, die von PHP in die globale Variable HTTP_ACCEPT_LANGUAGE veröffentlicht wird. Wenn kein übereinstimmendes Gebietsschema gefunden werden kann, wird Präferenz zu ENVIRONMENT und zuletzt FRAMEWORK gegeben.

2.const Zend_Locale::ENVIRONMENT - PHP veröffentlicht das Gebietsschema des Host-Server über die PHP-interne Funktion setlocale(). Wenn kein übereinstimmendes Gebietsschema gefunden werden kann, wird die Präferenz zu FRAMEWORK und zuletzt BROWSER gegeben.

3.const Zend_Locale::FRAMEWORK - Wenn Zend Rahmen eine standardisierte Art und Weise von Angabe Komponenten Standardwerte hat (geplant, aber noch nicht verfügbar), dann ist diese Konstante Instanziierung während mit Vorzug geben eine locale Auswahl basiert auf diesen Standardeinstellungen. Wenn kein übereinstimmendes Gebietsschema gefunden werden kann, wird ENVIRONMENT und zuletzt BROWSER bevorzugt.

(Hinweis: die Seite gehen lesen - ich werde alles nicht copy-paste ist ^^ zu lesen)


Edit: Und hier ist der Teil des Codes, der meine illustriert Kommentar:

$locale = new Zend_Locale(); 
var_dump($locale->getLanguage()); 
var_dump($locale->getRegion()); 
die; 

Gibt mir:

string(2) "fr" 
bool(false) 

Nun, mein Browser für Französisch zu fragen, ohne dass eine Region ^^ Angabe hier

+0

Cheers @ Pascal, auf lange Sicht werde ich mit 'Zend_Locale' arbeiten können. Im Moment ersetze ich gerade die Bibliothek der Hilfefunktionen in einer bestehenden Anwendung durch eine eigene Gebietsschema-Handhabung, daher muss ich den eigentlichen ISO-Code finden. –

+0

Oh :-(schade :-(;;; hump ... rüber: wie wäre es zum ersten Mal, dass das Gebietsschema aktiviert wird, ZF seine Magie entfaltet und dann die 'getLanguage()' und/oder 'getRegion() aufgerufen wird? 'Methoden das Gebietsschema des Code zu bekommen –

+0

ich habe meine Antwort bearbeitet einen Teil des Codes zu bekommen - aber ich sehe, ich habe ihm von @henchman geschlagen ^^ –

5

Ich habe beide Antworten upvoted. Als Alternative die Sprache mit Zend_Locale zu bekommen betrachtet

+1

1 für die ersten: selbst wenn es in PHP> = 5,3, mit nativen Funktionen nur dann verfügbar ist, ist gut * (und die intl Klassen sind eine große Bereicherung für PHP) * –

+1

Ich werde die Zend basierte Antwort akzeptieren, weil das ist, was. Ich fragte nach, aber +1, weil das wirklich nett und sogar eingebaut ist - 5.3.0 ist zu viel, um jetzt zu fragen, aber wird nicht in einem Jahr. Prost. –

1

Gibt es eine Möglichkeit Zend_Locale() zu zwingen, den ersten vollständigen locale (Sprachcode und Region-Code zu erhalten, wie 'en_US') anstatt nur den Sprachcode ('en')? Wenn nicht, ist es ein Problem, mit Währungen umzugehen, da sie ein vollständiges Gebietsschema benötigen.

Wie gehen Sie mit diesem Problem um? Ich habe noch keine akzeptable Lösung für dieses Problem gefunden und für mich scheint es, dass dies eine Aufgabe für Zend_Locale, in _prepareLocale($locale, $strict = false) zum Beispiel sein sollte.