Hallo Christian,
Da wir gerade dabei wären: ich hab' mich jetzt mal an die Arbeit gemacht und bin mit dem Ergebnis recht zufrieden:
// detect browser language
function lang_getfrombrowser ($allowed_languages, $default_language) {
[schnipp Code]
}
ist gut geworden gefällt mir.
Anregungen? Weitere Kritik?
Hmm... <ganzkleinundleise>ja</ganzkleinundleise>
Das steuern über eine Konstante halte ich in diesem Fall für keine gute Idee.
Warum?
Es ist zwar in normalen Web-Anwendungen sehr unwahrscheinlich das die Funktion mehr als einmal aufgerufen wird, aber es gibt ja auch noch andere Bereiche in denen PHP zum Einsatz kommt. Und eine Konstante ist, wie ihr Name es beschreibt, nun mal konstant, einmal gesetzt kann man sie zur Laufzeit eines Skripts nicht ändern.
Stell dir mal ein PHP-GTK Mailprogramm vor das 'X-Accept-Language:' aus den Mails auswertet... (Damit die Änderungen wirksam werden Starten sie das Programm neu)
Weiterhin schlage vor dass das Standartverhalten der Funktion RFC-konform ist aber ein deutliche Empfehlung auf die andere Verhaltensweise geben wird. Da mag zwar ein wenig komisch klingen aber gerade weil du vor hast sie der Öffentlichkeit zu überreichen halte ich es für besser die RFCs zu würdigen.
Zur Lösung der beiden Vorschläge dachte ich an folgendes:
Die Funktion bekommt einen Dritten optionalen Parameter
function lang_getfrombrowser ($allowed_languages, $default_language, $CONTENT_NEGOTIATE_STRICT = TRUE) {
.
..
if ($CONTENT_NEGOTIATE_STRICT) {
// break up the while loop
break;
}
..
.
Damit ist der Coder gezwungen sich _bewusst_ gegen ein RFC-konformes Verhalten zu entscheiden.
Gruß
Der Linker
PS: Eigentlich sollte man den Code in HTTP::negotiateLanguage durch deinen ersetzten.