Default-Sprache des Browser feststellen (Bottle)

Django, Flask, Bottle, WSGI, CGI…
Antworten
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

wie kann ich am einfachsten bei einer Webanwednung (die mit Bottle gebaut ist) feststellen, welches die Default-Sprache des Browsers ist, der eine Seite abruft?

Gruß, noisefloor
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Über den Accept-Language header [1]. Das parsen[2] ist auch gar nicht so schwer.

[1] http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
[2] http://www.xml.com/pub/a/2005/06/08/restful.html
Bottle: Micro Web Framework + Development Blog
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Geht wie gesagt mit dem Accept header. Parsen kannst du das zB mit "werkzeug.parse_accept_header". Hier ein Beispiel mit dem Request Objekt:

Code: Alles auswählen

>>> req = Request.from_values(environ_overrides={'HTTP_ACCEPT_LANGUAGE':'de-DE,de;q=0.7,en;q=0.5'})
>>> req.accept_languages
LanguageAccept([('de-DE', 1), ('de', 0.7), ('en', 0.5)])
>>> req.accept_languages.best_match(['en', 'de', 'fr'])
'de'
>>> 'de_DE' in req.accept_languages
True
>>> req.accept_languages.best
'de-DE'
TUFKAB – the user formerly known as blackbird
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

thx.

Mir ist nur gerade nicht klar, ob und wie ich mit Python & Bottle Bordmitteln an den Accept-Header komme... :K

Gruß, noisefloor
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Folgendes sollte in den meisten Fällen klappen, auch wenn es natürlich nur ein stark vereinfachter Parser ist.

Code: Alles auswählen

bottle.request.header.get("Accept-Language",'').split(',')[0].strip()
Bottle: Micro Web Framework + Development Blog
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

noisefloor hat geschrieben:Mir ist nur gerade nicht klar, ob und wie ich mit Python & Bottle Bordmitteln an den Accept-Header komme... :K
In geparster version gar nicht. Werkzeug als dep ins Projekt aufnehmen, oder Code dort klauen.
Defnull hat geschrieben:Folgendes sollte in den meisten Fällen klappen, auch wenn es natürlich nur ein stark vereinfachter Parser ist.

Code: Alles auswählen

bottle.request.header.get("Accept-Language",'').split(',')[0].strip()
Der erste Eintrag muss nicht der hoechstbewerteste sein. Ist er auch in einigen Browsern nicht.
TUFKAB – the user formerly known as blackbird
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

ok, werde ich mal probieren. Letztendlich geht es bei dem was ich vorhabe auch nur darum zu sehen, ob Deutsch default ist.

@mitsuhiko:
oder Code dort klauen.
Ich klaue nur Code, den ich auch voll verstehe. Und um deine Python-Skills zu erreichen brauche ich noch... na, sagen wir mal 1-2 Wochen. :wink:

Gruß, noisefloor
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Es gibt sowas wie "Deutsch als Default" nicht. Du kannst nur sagen welche Sprachen du verstehst und zu wie viel Prozent du die haben willst. Von daher musst du das Dingt richtig parsen. Werkzeug macht das wie gesagt fertig, brauchst du selber nicht implementieren, kannst du einfach verwenden. :)
TUFKAB – the user formerly known as blackbird
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Es gibt sowas wie "Deutsch als Default" nicht. Du kannst nur sagen welche Sprachen du verstehst und zu wie viel Prozent du die haben willst.
Yup, stimmt. Wie schon weiter oben stand: Was an 1. Stelle steht muss ja nicht zwingend die höchste Priorität haben...

Wobei ich mich im letzten Posting falsch ausgedrückt habe: Ich möchte nur wissen, ob Deutsch in den "Accept-Languages" ist. Das kann man ja ganz einfach feststellen.

Ggf. kommen bei meiner Applikation später mal Tests auf Französisch, Russisch und Chinesisch dazu... Dann werde ich auch den Parser von Werkzeug wohlwollend berücksichtigen. ;-)

Gruß, noisefloor
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

noisefloor hat geschrieben:Wobei ich mich im letzten Posting falsch ausgedrückt habe: Ich möchte nur wissen, ob Deutsch in den "Accept-Languages" ist. Das kann man ja ganz einfach feststellen.
Ugh. Ganz schlechte Idee. Ich hab zB in meinem Browser Deutsch mit 0.1 drin und Englisch mit 1.0. Gibt sicher auch genug Schweizer, die Deutsch als 0.3 haben, Englisch als 0.7 und Franzoeisch als 1.0.

Also bitte richtig behandeln. Nach spec kann auch eine Sprache mit 0.0 drin sein.
TUFKAB – the user formerly known as blackbird
Antworten