我一直在尝试使用JavaScript检测浏览器语言首选项。
如果我在IE的“工具>Internet选项>常规>语言”中设置浏览器语言,如何使用JavaScript读取此值?
火狐也有同样的问题。我无法检测工具>选项>内容>语言使用导航器.language的设置。
使用导航器。userLanguage,它检测设置通过
打开>ControlPanel>RegionalandLanguageOptions>Regional Options选项卡。
我已经用navigator测试过了。browserLanguage和navigator。systemLanguage但都不返回第一个设置的值(Tools>InternetOptions>General>Languages)
我找到了一个详细讨论这个问题的链接,但这个问题仍然没有答案:(
如果你控制了一个后端并且使用django, Dan的想法的4行实现是:
def get_browser_lang(request):
if request.META.has_key('HTTP_ACCEPT_LANGUAGE'):
return JsonResponse({'response': request.META['HTTP_ACCEPT_LANGUAGE']})
else:
return JsonResponse({'response': settings.DEFAULT_LANG})
然后在urls.py中:
url(r'^browserlang/$', views.get_browser_lang, name='get_browser_lang'),
在前端:
$.get(lg('SERVER') + 'browserlang/', function(data){
var lang_code = data.response.split(',')[0].split(';')[0].split('-')[0];
});
(当然,你必须在settings.py中设置DEFAULT_LANG)
如果你使用的是ASP . net MVC,你想从JavaScript中获得accept - languages头,那么这里有一个不涉及任何异步请求的变通例子。
在你的.cshtml文件中,将头部安全地存储在div的data- attribute中:
<div data-languages="@Json.Encode(HttpContext.Current.Request.UserLanguages)"></div>
然后你的JavaScript代码可以访问这些信息,例如使用JQuery:
<script type="text/javascript">
$('[data-languages]').each(function () {
var languages = $(this).data("languages");
for (var i = 0; i < languages.length; i++) {
var regex = /[-;]/;
console.log(languages[i].split(regex)[0]);
}
});
</script>
当然,您也可以像其他人提到的那样,对其他服务器技术使用类似的方法。