automatische Sprachauswahl IE?
alfie
- browser
hallo!
Nachdem mir letzte Woche im Forum von clientseitigen Lösungen zur automatischen Sprachauswahl abgeraten wurden, habe ich mich ein wenig mit content negotition unter Apache (MultiView) beschäftigt.
Theoretisch sollte der Browser im header des requests die eingestellten Sprachen des Clients übermitteln; der Server liefert (so vorhanden) die Seite in der gewünschten Sprache, oder (falls keine Sprache gewünscht, bzw. die gewünschte Spache nicht vorhanden)die Default-Sprache.
Soweit, so gut. Jetzt zu den Beispielen:
http://langtest.maloer.org/
sollte obiges exekutieren und entsprechend der Browsereinstellung zur deutschen Seite
http://langtest.maloer.org/index.html.de
oder zur englischen Seite
http://langtest.maloer.org/index.html.en
oder zur Default-Seite (weder de noch en) im Browser
http://langtest.maloer.org/index.html.html
verzweigen.
Funktioniert in allen Kombinationen (auch mit de-at, en-us, fr,..) im Mozilla 1.4, beim IE6 wird mit fr an 1.Stelle die deutsche Seite angezeigt (geplant ist aber eine englische)...
Eigenartig, aber erklärlich?
mfg Alfie
hi,
Theoretisch sollte der Browser im header des requests die eingestellten Sprachen des Clients übermitteln;
Funktioniert in allen Kombinationen (auch mit de-at, en-us, fr,..) im Mozilla 1.4, beim IE6 wird mit fr an 1.Stelle die deutsche Seite angezeigt (geplant ist aber eine englische)...
hast du schon mal überprüft, _ob_ dein IE denn überhaupt die sprachangabe im header mitsendet, die du erwartest?
nutze doch mal das tool zum anzeigen von http-headern vom michael schröpl, http://www.schroepl.net/cgi-bin/http_trace.pl
dort gibst du deinen URL ein, und schaust auf der nächsten seite nach, was unter "HTTP request received from browser (CGI environment variables)" bei "ACCEPT_LANGUAGE" für angabe(n) zu finden sind.
gruss,
wahsaga
hallo!
hi,
Theoretisch sollte der Browser im header des requests die eingestellten Sprachen des Clients übermitteln;
Funktioniert in allen Kombinationen (auch mit de-at, en-us, fr,..) im Mozilla 1.4, beim IE6 wird mit fr an 1.Stelle die deutsche Seite angezeigt (geplant ist aber eine englische)...hast du schon mal überprüft, _ob_ dein IE denn überhaupt die sprachangabe im header mitsendet, die du erwartest?
nutze doch mal das tool zum anzeigen von http-headern vom michael schröpl, http://www.schroepl.net/cgi-bin/http_trace.pl
dort gibst du deinen URL ein, und schaust auf der nächsten seite nach, was unter "HTTP request received from browser (CGI environment variables)" bei "ACCEPT_LANGUAGE" für angabe(n) zu finden sind.
gruss,
wahsaga
tolles Tool!
unten der Request bei folgender Sprachreihenfolge im Browser:[1. fr, 2. de-at, 3. de, 4. en-us, 5. en]
[ 15] HEAD / HTTP/1.0
[ 22] Connection: Keep-Alive
[ 95] Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*
[ 30] Accept-Encoding: gzip, deflate
[ 61] Accept-Language: fr,de-at;q=0.8,de;q=0.6,en-us;q=0.4,en;q=0.2
[ 25] Host: langtest.maloer.org
[ 54] Referer: http://www.schroepl.net/cgi-bin/http_trace.pl
[ 62] User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
und jetzt die Überraschung:
HTTP response headers received from server
[ 15] HTTP/1.0 200 OK
[ 17] Connection: close
[ 35] Date: Thu, 30 Oct 2003 11:45:40 GMT
[ 44] Server: Apache/1.3.26 (Linux/SuSE) PHP/4.2.2
[ 31] Vary: negotiate,accept-language
[ 20] Content-Language: de
[ 31] Content-Location: index.html.de
[ 23] Content-Type: text/html
d.h. fr und de-at haben beide im IE einen Quality Factor (q) von 0.8, de hat 0.6, daher hat de insgesamt einen höheren Quality Factor als fr und der Apache liefert (mit dieser Information ganz zu Recht) die deutsche Seite...
gestern hab' ich Mozilla 1.4 versehentlich gelobt, bei genauer Betrachtung doch das gleiche Resultat wie IE6:
[ 61] Accept-Language: fr,de-at;q=0.8,de;q=0.6,en-us;q=0.4,en;q=0.2
[ 25] Host: langtest.maloer.org
[ 54] Referer: http://www.schroepl.net/cgi-bin/http_trace.pl
[ 82] User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:1.4) Gecko/20030624
liefert mit
[ 15] HTTP/1.0 200 OK
[ 17] Connection: close
[ 35] Date: Thu, 30 Oct 2003 11:53:38 GMT
[ 44] Server: Apache/1.3.26 (Linux/SuSE) PHP/4.2.2
[ 31] Vary: negotiate,accept-language
[ 20] Content-Language: de
[ 31] Content-Location: index.html.de
[ 23] Content-Type: text/html
die deutsche Seite
falls ich die Apache-Dokumentation http://httpd.apache.org/docs/content-negotiation.html im Abschnitt "Apache Negotiation Algorithm" richtig interpretiere, führt die Tatsache, dass 2 de-Varianten im Request vorhanden sind und eine de-Seite am Server liegt, zur "Fehllieferung", obwohl fr an 1. Stelle steht. Ist das wirklich so, oder verstehe ich etwas grundsätzlich falsch?
mfg Alfie
hi,
[ 61] Accept-Language: fr,de-at;q=0.8,de;q=0.6,en-us;q=0.4,en;q=0.2
d.h. fr und de-at haben beide im IE einen Quality Factor (q) von 0.8
falls ich die Apache-Dokumentation http://httpd.apache.org/docs/content-negotiation.html im Abschnitt "Apache Negotiation Algorithm" richtig interpretiere, führt die Tatsache, dass 2 de-Varianten im Request vorhanden sind und eine de-Seite am Server liegt, zur "Fehllieferung", obwohl fr an 1. Stelle steht. Ist das wirklich so, oder verstehe ich etwas grundsätzlich falsch?
normalerweise sind die accept language angaben in der reihenfolge ihres auftauchens zu bewerten, also fr vor de-at.
da fr und de-at aber den selbe quality factor haben, geht der server davon aus, dass dir (benutzer) beide sprachen gleich wichtig sind.
eine französische version hat er nicht, also liefert er dir die deutsche.
das de weiter hinten nochmals auftaucht, ist hier m.e. nicht relevant.
aber für den server ist de-at ebenfalls deutsch, also ist dir deutsch gleich wichtig wie französisch - und da es eine deutsche version gibt, eine französische aber nicht, denkt der server, dass er damit deinen wünschen am besten entspricht.
vóila!
gruss,
wahsaga
hallo!
hi,
[ 61] Accept-Language: fr,de-at;q=0.8,de;q=0.6,en-us;q=0.4,en;q=0.2
d.h. fr und de-at haben beide im IE einen Quality Factor (q) von 0.8falls ich die Apache-Dokumentation http://httpd.apache.org/docs/content-negotiation.html im Abschnitt "Apache Negotiation Algorithm" richtig interpretiere, führt die Tatsache, dass 2 de-Varianten im Request vorhanden sind und eine de-Seite am Server liegt, zur "Fehllieferung", obwohl fr an 1. Stelle steht. Ist das wirklich so, oder verstehe ich etwas grundsätzlich falsch?
normalerweise sind die accept language angaben in der reihenfolge ihres auftauchens zu bewerten, also fr vor de-at.
Korrekt!
da fr und de-at aber den selbe quality factor haben, geht der server davon aus, dass dir (benutzer) beide sprachen gleich wichtig sind.
eine französische version hat er nicht, also liefert er dir die deutsche.
Ja, aber den Quality-Factor von 0.8 für beide Sprachen saugt sich der Browser aus den Fingern! Als User habe ich nur die Chance die Sprachen zu reihen (also fr vor de-at); auf die Bewertung habe ich keinen Einfluss...
das de weiter hinten nochmals auftaucht, ist hier m.e. nicht relevant.
aber für den server ist de-at ebenfalls deutsch, also ist dir deutsch gleich wichtig wie französisch - und da es eine deutsche version gibt, eine französische aber nicht, denkt der server, dass er damit deinen wünschen am besten entspricht.
Nein, durch meine Reihung will ich ausdrücken fr>de und nicht fr=de! Nach der Apache Dokumentation sollte bei Anforderung einer nicht vorliegenden Srachversion die Defaultvariante geliefert werden, und das ist in meinem Beispiel (links in meinem 1.Posting) eine englische Version. Geliefert werden sollte also /index.html.html und nicht /index.html.de.
vóila!
gruss,
wahsaga
mfg Alfie
hallo!
hi,
normalerweise sind die accept language angaben in der reihenfolge ihres auftauchens zu bewerten, also fr vor de-at.
da fr und de-at aber den selbe quality factor haben, geht der server davon aus, dass dir (benutzer) beide sprachen gleich wichtig sind.
eine französische version hat er nicht, also liefert er dir die deutsche.
vóila!gruss,
wahsaga
ok, jetzt nochmal in einer einfacheren Variante:
3 Sprachen 1.fr, 2.de, 3.en
Header: Accept-Language: fr,de;q=0.7,en;q=0.3
^
|
warum wird de gleich mit fr bewertet? Wenn ich eine eindeutige Reihung vorgebe, würde ich ungefähr so etwas erwarten (erhoffen!):
fr;q=0.6,de;q=0.3,en;q=0.1
Schlimm wird es bei nur 2 Sprachen: 1.fr, 2.de, beide werden mit 0.5 bewertet, der User bekommt die deutsche Seite (und kann gottlob manuell "umsteigen").
mfg Alfie
hallo!
hi,
[ 61] Accept-Language: fr,de-at;q=0.8,de;q=0.6,en-us;q=0.4,en;q=0.2
d.h. fr und de-at haben beide im IE einen Quality Factor (q) von 0.8falls ich die Apache-Dokumentation http://httpd.apache.org/docs/content-negotiation.html im Abschnitt "Apache Negotiation Algorithm" richtig interpretiere, führt die Tatsache, dass 2 de-Varianten im Request vorhanden sind und eine de-Seite am Server liegt, zur "Fehllieferung", obwohl fr an 1. Stelle steht. Ist das wirklich so, oder verstehe ich etwas grundsätzlich falsch?
normalerweise sind die accept language angaben in der reihenfolge ihres auftauchens zu bewerten, also fr vor de-at.
gruss,
wahsaga
ok, und jetzt nochmal das Extrem:
2 Sprachen im Browser gewählt: 1.de-at 2.en
Request-Header:
Accept-Language: de-at,en;q=0.5 <---- beide gleich bewertet!
Server-Antwort:
Vary: negotiate,accept-language
Content-Language: en
Content-Location: index.html.en
d.h. der Server liefert die en-Version und nicht die 1.gereihte de-Version. Da beide (foo.html.de und foo.html.en) vorhanden und beide Sprachen gleich bewertet sind (q=0.5), scheint der Apache die Änhangsel-Version de-at irgendwie abzuwerten, und liefert die "vollwertige" Ubereinstimmung en mit *.en....
mfg Alfie
Hallo.
[ 61] Accept-Language: fr,de-at;q=0.8,de;q=0.6,en-us;q=0.4,en;q=0.2
Accept-Language: de-at,en;q=0.5 <---- beide gleich bewertet!
d.h. der Server liefert die en-Version und nicht die 1.gereihte de-Version. Da beide (foo.html.de und foo.html.en) vorhanden und beide Sprachen gleich bewertet sind (q=0.5), scheint der Apache die Änhangsel-Version de-at irgendwie abzuwerten, und liefert die "vollwertige" Ubereinstimmung en mit *.en....
Du scheinst einem grundsätzlichen Irrtum zu unterliegen: Die Rangfolge wird durch Kommata getrennt, beginnt aber bei einer imaginären "1" für den ersten Wert (im ersten Beispiel "fr", im zweiten "de-at") und wird möglichst gleichmäßig weiter abgestuft. Es gibt also keine gleichen Werte, da dort eigentlich "fr;q=1,de-at;q=0.8,de;q=0.6,en-us;q=0.4,en;q=0.2" bzw. "de-at;q=1,en;q=0.5" steht.
Für eventuelle Nachfragen verweise ich gleich jetzt an das Archiv, da ich mich mit dieser Materie eigentlich überhaupt nicht auskenne, mir diese Vorgehensweise des Browsers aber in der Schilderung eines anderen Beitrags vor kurzem hier im Forum sofort einleuchtete.
MfG, at
hallo!
Hallo.
[ 61] Accept-Language: fr,de-at;q=0.8,de;q=0.6,en-us;q=0.4,en;q=0.2
Accept-Language: de-at,en;q=0.5 <---- beide gleich bewertet!
d.h. der Server liefert die en-Version und nicht die 1.gereihte de-Version. Da beide (foo.html.de und foo.html.en) vorhanden und beide Sprachen gleich bewertet sind (q=0.5), scheint der Apache die Änhangsel-Version de-at irgendwie abzuwerten, und liefert die "vollwertige" Ubereinstimmung en mit *.en....
Du scheinst einem grundsätzlichen Irrtum zu unterliegen: Die Rangfolge wird durch Kommata getrennt, beginnt aber bei einer imaginären "1" für den ersten Wert (im ersten Beispiel "fr", im zweiten "de-at") und wird möglichst gleichmäßig weiter abgestuft. Es gibt also keine gleichen Werte, da dort eigentlich "fr;q=1,de-at;q=0.8,de;q=0.6,en-us;q=0.4,en;q=0.2" bzw. "de-at;q=1,en;q=0.5" steht.
Na schön. Ich würde dich doch ersuchen, die Reihenfolge der Beispiele in meinen Posting zu beachten.
In meinem 1.Posting sind die entsprechenden Links, du kannst sie gerne mal mit verschiedenen Spracheinstellungen im Browser testen.
Wenn deine Angabe mit de-at[;q=1],en;q=0.5 stimmt, warum bekomme ich dann die englische statt der deutschen Version?
MfG, at
mfg Alfie
P.S. Ich würde mir generell vor Schüssen aus der Hüfte erwarten, dass alle Postings eines Betrags vorher gelesen werden.
Hallo.
P.S. Ich würde mir generell vor Schüssen aus der Hüfte erwarten, dass alle Postings eines Betrags vorher gelesen werden.
Mir hätte es schon genügt, wenn du meinen einzigen Beitrag in diesem Thread gelesen hättest, in dem ja stand, dass ich mich zu diesem Thema nicht weiter äußern _kann_. Ich wollte lediglich auf eine offensichtliche Fehlinterpretation aufmerksam machen. Sollte ich mir dies zumindest bei deinen Beiträgen verkneifen sollen, bitte ich um eine kurze Rückmeldung für meine "blacklist".
MfG, at