Detect browser locale using Javascript
On Chrome and Firefox 32+, navigator.languages contains an array of locales in order of user preference, and is more accurate than navigator.language, however to make it backwards-compatible (Tested Chrome / IE / Firefox / Safari), then use this:
function getLang()
{
if (navigator.languages != undefined)
return navigator.languages[0];
else
return navigator.language;
}
I tested this against a more complex technique by making an ajax call to a service that returns the HTTP headers, and parsing the Accept-Language.
The server side code as follows;
<%@ Import Namespace=”System” %>
<%@ Page Language=”c#”%>
<script runat=”server”>
public string ServerSideFunction()
{
Response.AddHeader(“Access-Control-Allow-Origin”, “*”);
int loop1;
NameValueCollection coll;
coll=Request.Headers;
String[] arr1 = coll.AllKeys;
Response.Write(“{“);
string seperator = “”;
for (loop1 = 0; loop1<arr1.Length; loop1++)
{
Response.Write(seperator + “\”” + arr1[loop1] + “\”:”);
// Get all values under this key.
String[] arr2=coll.GetValues(arr1[loop1]);
Response.Write( “\”” + Server.HtmlEncode(arr2[0]) + “\””);
seperator = “,”;
}
Response.Write(“}”);
return “”;
}
</script>
<% =ServerSideFunction() %>
Which is called by some JQuery script as follows;
$(init);
function init()
{
$.ajax({
url: “http://xxxx.xxxxx.net/Headers.aspx”,
success: function(data){
var strLanguage = data[“Accept-Language”].split(“,”)[0];
$(“#output”).html(strLanguage);
},
dataType: “json”
});
}