Ich denke, das Hauptproblem hier ist, dass die Browser-Einstellungen nicht wirklich Einfluss auf die navigator.language
Eigenschaft, die über Javascript abgerufen wird.
Was sie beeinflussen, ist der HTTP "Accept-Language" Header, aber es scheint, dass dieser Wert nicht durch Javascript überhaupt verfügbar ist. (Wahrscheinlich, warum @anddoutoi angibt, dass er keine Referenz dafür finden kann, die nicht die Serverseite betrifft).
Ich habe einen Workaround programmiert: Ich habe ein Google-App-Engine-Skript erstellt unter http://ajaxhttpheaders.appspot.com die Ihnen die HTTP-Anfrage-Header über JSONP zurückgibt.
(Hinweis: Dies ist ein Hack, der nur verwendet werden sollte, wenn Sie kein Backend zur Verfügung haben, das dies für Sie erledigen kann. Im Allgemeinen sollten Sie in Ihren Seiten keine Javascript-Dateien von Drittanbietern aufrufen, es sei denn, Sie haben ein sehr hohes Maß an Vertrauen in den Hoster).
Ich beabsichtige, sie dort auf Dauer zu belassen, also können Sie sie gerne in Ihrem Code verwenden.
Hier ist ein Beispielcode (in jQuery), wie Sie ihn verwenden können
$.ajax({
url: "http://ajaxhttpheaders.appspot.com",
dataType: 'jsonp',
success: function(headers) {
language = headers['Accept-Language'];
nowDoSomethingWithIt(language);
}
});
Ich hoffe, das ist für jemanden nützlich.
Bearbeiten: Ich habe ein kleines jQuery-Plugin auf Github geschrieben, die diese Funktionalität verpackt: https://github.com/dansingerman/jQuery-Browser-Language
Edit 2: Wie gewünscht hier ist der Code, der auf AppEngine läuft (super trivial wirklich):
class MainPage(webapp.RequestHandler):
def get(self):
headers = self.request.headers
callback = self.request.get('callback')
if callback:
self.response.headers['Content-Type'] = 'application/javascript'
self.response.out.write(callback + "(")
self.response.out.write(headers)
self.response.out.write(")")
else:
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write("I need a callback=")
application = webapp.WSGIApplication(
[('/', MainPage)],
debug=False)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
Edit3: Ich habe den Code der App-Engine hier zur Verfügung gestellt: https://github.com/dansingerman/app-engine-headers