531 Stimmen

JavaScript zur Erkennung der Spracheinstellung des Browsers

Ich habe versucht, die Spracheinstellung des Browsers mit JavaScript zu ermitteln.

Wenn ich die Browsersprache im IE in Tools>Internet Options>General>Languages Wie kann ich diesen Wert mit JavaScript auslesen?

Dasselbe Problem bei Firefox. Ich bin nicht in der Lage, die Einstellung für tools>options>content>languages mit navigator.language .

Verwendung von navigator.userLanguage erkennt es die Einstellung, die über Start>ControlPanel>RegionalandLanguageOptions>Regional Options tab.

Ich habe getestet mit navigator.browserLanguage y navigator.systemLanguage aber keiner von beiden liefert den Wert für die erste Einstellung( Tools>InternetOptions>General>Languages )

Ich habe eine Link in der dies ausführlich erörtert wird, aber die Frage bleibt unbeantwortet :(

341voto

DanSingerman Punkte 35071

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

323voto

Marco Demaio Punkte 32210
var language = window.navigator.userLanguage || window.navigator.language;
alert(language); //works IE/SAFARI/CHROME/FF

window.navigator.userLanguage ist nur für den IE, und es ist die Sprache, die in Windows Systemsteuerung - Regionale Optionen und NICHT die Sprache des Browsers, aber man kann davon ausgehen, dass ein Benutzer, der einen Rechner benutzt, bei dem die Regionaleinstellungen von Windows auf Frankreich eingestellt sind, wahrscheinlich ein französischer Benutzer ist.

navigator.language ist FireFox und alle anderen Browser.

Einige Sprachcodes: 'it' = Italien, 'en-US' = englisch US, etc.


Wie von rcoup y Der WebMacheter In den Kommentaren weiter unten steht, dass Sie mit diesem Workaround nicht zwischen englischen Dialekten unterscheiden können, wenn die Benutzer die Website in anderen Browsern als dem IE betrachten.

window.navigator.language (Chrome/FF/Safari) gibt immer die Browsersprache zurück und nicht die bevorzugte Sprache des Browsers, aber: "Es ist ziemlich üblich, dass Englischsprachige (gb, au, nz, etc) eine en-us Version von Firefox/Chrome/Safari haben." Daher window.navigator.language wird dennoch zurückkehren en-US auch wenn die bevorzugte Sprache des Benutzers en-GB .

233voto

Tim Babych Punkte 3238

Aktualisierung des Jahres 2014.

Jetzt gibt es eine Möglichkeit, Accept-Languages in Firefox und Chrome zu erhalten, indem man navigator.sprachen (funktioniert in Chrome >= 32 und Firefox >= 32)

Auch, navigator.language in Firefox spiegelt in diesen Jahren die bevorzugte Sprache des Inhalts wider, nicht die Sprache der Benutzeroberfläche. Da dieser Begriff jedoch noch nicht von anderen Browsern unterstützt wird, ist er nicht sehr nützlich.

Wenn möglich, sollten Sie also die bevorzugte Sprache für den Inhalt wählen und die Sprache der Benutzeroberfläche als Ausweichmöglichkeit verwenden:

navigator.languages
    ? navigator.languages[0]
    : (navigator.language || navigator.userLanguage)

71voto

Hamid Tavakoli Punkte 4377

Ich bin auf dieses Stück Code gestoßen, um die Sprache des Browsers in Angular Translate-Modul die Sie in der Quelle finden können aquí . Ich habe den Code leicht geändert, indem ich angular.isArray durch Array.isArray ersetzt habe, um ihn unabhängig von der Angular-Bibliothek zu machen.

var getFirstBrowserLanguage = function () {
    var nav = window.navigator,
    browserLanguagePropertyKeys = ['language', 'browserLanguage', 'systemLanguage', 'userLanguage'],
    i,
    language;

    // support for HTML 5.1 "navigator.languages"
    if (Array.isArray(nav.languages)) {
      for (i = 0; i < nav.languages.length; i++) {
        language = nav.languages[i];
        if (language && language.length) {
          return language;
        }
      }
    }

    // support for other well known properties in browsers
    for (i = 0; i < browserLanguagePropertyKeys.length; i++) {
      language = nav[browserLanguagePropertyKeys[i]];
      if (language && language.length) {
        return language;
      }
    }

    return null;
  };

console.log(getFirstBrowserLanguage());

56voto

Kristian Williams Punkte 2134
let lang = window.navigator.languages ? window.navigator.languages[0] : null;
    lang = lang || window.navigator.language || window.navigator.browserLanguage || window.navigator.userLanguage;

let shortLang = lang;
if (shortLang.indexOf('-') !== -1)
    shortLang = shortLang.split('-')[0];

if (shortLang.indexOf('_') !== -1)
    shortLang = shortLang.split('_')[0];

console.log(lang, shortLang);

Ich brauchte nur die primäre Komponente für meine Bedürfnisse, aber Sie können einfach nur die vollständige Zeichenfolge verwenden. Funktioniert mit den neuesten Chrome, Firefox, Safari und IE10+.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X