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 :(

40voto

Josef Ježek Punkte 2031
var language = navigator.languages && navigator.languages[0] || // Chrome / Firefox
               navigator.language ||   // All browsers
               navigator.userLanguage; // IE <= 10

console.log(language);

PWA-Vorlage ausprobieren https://github.com/StartPolymer/progressive-web-app-template

23voto

navigator.userLanguage für IE

window.navigator.language für firefox/opera/safari

22voto

EamonnM Punkte 2031

Ich habe Hamid's Antwort für eine Weile verwendet, aber es in Fällen, in denen die Sprachen-Array ist wie ["en", "en-GB", "en-US", "fr-FR", "fr", "en-ZA"] es wird "en" zurückgegeben, wenn "en-GB" eine bessere Übereinstimmung wäre.

Meine Aktualisierung (unten) gibt den ersten Langformatcode zurück, z. B. "en-GB", andernfalls den ersten Kurzcode, z. B. "en", andernfalls Null.

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

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

        // support for other well known properties in browsers
        for (i = 0; i < browserLanguagePropertyKeys.length; i++) {
            language = nav[browserLanguagePropertyKeys[i]];
            //skip this loop iteration if property is null/undefined.  IE11 fix.
            if (language == null) { continue; } 
            len = language.length;
            if (!shortLanguage && len) {
                shortLanguage = language;
            }
            if (language && len > 2) {
                return language;
            }
        }

        return shortLanguage;
    }

console.log(getFirstBrowserLanguage());

Aktualisierung: Der IE11 machte Fehler, wenn einige Eigenschaften nicht definiert waren. Es wurde eine Prüfung hinzugefügt, um diese Eigenschaften zu überspringen.

21voto

MrMesees Punkte 1318

Ich habe mir das gerade ausgedacht. Es kombiniert neuere JS-Destrukturierungssyntax mit ein paar Standardoperationen, um die Sprache und das Gebietsschema abzurufen.

var [lang, locale] = (
    (
        (
            navigator.userLanguage || navigator.language
        ).replace(
            '-', '_'
        )
    ).toLowerCase()
).split('_');

Hoffentlich hilft es jemandem

17voto

Mihai Nita Punkte 5324

Es gibt keine vernünftige Möglichkeit, diese Einstellung zu erhalten, zumindest keine browserunabhängige.

Aber der Server hat diese Information, weil sie Teil des HTTP-Anfrage-Headers ist (das Feld Accept-Language, siehe http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4 )

Der einzige zuverlässige Weg ist also, eine Antwort vom Server zu erhalten. Sie brauchen etwas, das auf dem Server läuft (z. B. .asp, .jsp, .php, CGI), und dieses "Ding" kann diese Informationen zurückgeben. Gute Beispiele hier: http://www.developershome.com/wap/detection/detection.asp?page=readHeader

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