用于检测浏览器语言偏好的JavaScript

我一直在尝试使用JavaScript检测浏览器的语言偏好。

如果我在中的IE中设置了浏览器语言Tools>Internet Options>General>Languages,如何使用JavaScript读取此值?

Firefox也有同样的问题。我无法检测到tools>options>content>languages使用的设置navigator.language

使用 navigator.userLanguage ,它通过Start>ControlPanel>RegionalandLanguageOptions>Regional Options选项卡检测完成的设置

我已经测试过navigator.browserLanguagenavigator.systemLanguage但均未返回第一个设置的值(Tools>InternetOptions>General>Languages

我找到了一个详细讨论此问题链接,但问题仍未得到解决:(

乐米亚2020/03/14 18:13:36

我认为我使用的代码很少,非常可靠。

将您站点的文件放在一个子目录中。通过SSL进入服务器,并创建指向该文件存储位置的子目录的符号链接,以指示您的语言。

像这样:

ln -s /var/www/yourhtml /var/www/en
ln -s /var/www/yourhtml /var/www/sp
ln -s /var/www/yourhtml /var/www/it

使用您的Web服务器读取HTTP_ACCEPT_LANGUAGE并根据它提供的语言值重定向到这些“不同的子目录”。

现在,您可以使用Javascript的window.location.href来获取您的网址,并在条件条件下使用它来可靠地标识首选语言。

url_string = window.location.href;
if (url_string = "http://yoursite.com/it/index.html") {
    document.getElementById("page-wrapper").className = "italian";
}
达蒙GO2020/03/14 18:13:36

对于谁在寻找Java Server解决方案

这是RestEasy

@GET
@Path("/preference-language")
@Consumes({"application/json", "application/xml"})
@Produces({"application/json", "application/xml"})
public Response getUserLanguagePreference(@Context HttpHeaders headers) {
    return Response.status(200)
            .entity(headers.getAcceptableLanguages().get(0))
            .build();
}
Near逆天2020/03/14 18:13:35

如果只需要支持某些现代浏览器,则可以使用:

navigator.languages

它按用户指定的顺序返回用户语言首选项的数组。

截至目前(2014年9月),该功能适用​​于:Chrome(v37),Firefox(v32)和Opera(v24)

但不支持:IE(v11)

达蒙樱2020/03/14 18:13:35

对于它的价值,Wikimedia的通用语言选择器库具有执行此操作的挂钩:https : //www.mediawiki.org/wiki/Extension :UniversalLanguageSelector

请参阅resources / js / ext.uls.init.js中的getFrequentLanguageList函数。直接链接:https : //gerrit.wikimedia.org/r/gitweb?p= mediawiki/extensions/ UniversalLanguageSelector.git;a=blob;f= resources/js/ ext.uls.init.js;hb=HEAD

它仍然取决于服务器,或更具体地说,取决于MediaWiki API。我显示它的原因是,它可以提供一个很好的示例,以获取有关用户语言的所有有用信息:浏览器语言,接受语言,地理位置(以及从CLDR获取国家/语言信息),当然,用户自己的网站偏好设置。

小胖GO2020/03/14 18:13:35

如果您要开发Chrome应用程序/扩展程序,请使用chrome.i18n API

chrome.i18n.getAcceptLanguages(function(languages) {
  console.log(languages);
  // ["en-AU", "en", "en-US"]
});
2020/03/14 18:13:35

navigator.userLanguage 对于IE

window.navigator.language 用于Firefox / Opera / Safari

西里神奇2020/03/14 18:13:35

没有合适的方法来获得该设置,至少不是独立于浏览器的。

但是服务器具有该信息,因为它是HTTP请求标头的一部分(Accept-Language字段,请参见http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4

因此,唯一可靠的方法是从服务器获取答案。您将需要在服务器上运行的某些内容(例如.asp,.jsp,.php,CGI),并且“内容”可以返回该信息。此处的好例子:http : //www.developershome.com/wap/detection/detection.asp?page=readHeader

Mandy卡卡西2020/03/14 18:13:35

var language = navigator.languages && navigator.languages[0] || // Chrome / Firefox
               navigator.language ||   // All browsers
               navigator.userLanguage; // IE <= 10

console.log(language);

尝试PWA模板https://github.com/StartPolymer/progressive-web-app-template

十三西里GO2020/03/14 18:13:35

2014年更新。

现在,有一种方法可以使用navigator.languages在Firefox和Chrome中获取接受语言 (在Chrome> = 32和Firefox> = 32中有效)

此外,近年来Firefox中的navigator.language反映了内容的首选语言,而不是UI的语言。但是,由于其他浏览器尚未支持此概念,因此它不是很有用。

因此,要尽可能获得最喜欢的内容语言,并使用UI语言作为后备:

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