使用.NET获取客户端默认语言的几种方法对比
时间:2010-10-12 来源:花和尚
最近在做一个涉及多语言的网站,在IE下通过Request.ServerVariables["HTTP_ACCEPT_LANGUAGE"]获取到相应的值后存入Cookies.然后调用与cookies值相同名称的语言包,如zh-CN;
大致代码如下
System.Web.HttpCookie lang= System.Web.HttpContext.Current.Request.Cookies["lang"];
lang= new System.Web.HttpCookie("lang");
lang.Value = Request.ServerVariables["HTTP_ACCEPT_LANGUAGE"];
lang.Expires = System.DateTime.Now.AddYears(1);
System.Web.HttpContext.Current.Response.Cookies.Add(lang);
此段代码在IE浏览器下运行正常,能正常识别到语言及调用相应的语言包,但当通过Firefox测试时发生错误,后使用Opera再测试,同样发生错误,跟踪调试结果看到
方法一
Response.Write(Request.ServerVariables["HTTP_ACCEPT_LANGUAGE"]);
浏览器 | 返回内容 | |
IE系列 | zh-CN | |
Firefox | zh-cn,zh;q=0.5 | |
Opera | zh-CN,zh;q=0.9,en;q=0.8 |
方法二
方式是从获取客户端语言首选项的排序字符串数组,代码如下:
Response.Write(Request.UserLanguages[0].ToString());
浏览器 | 返回内容 | |
IE | zh-CN | |
Firefox | zh-cn | |
Opera | zh-CN |
方法三
代码如下
Response.Write(Request.Headers["Accept-Language"].ToString());
IE | zh-CN | |
Firefox | zh-cn,zh;q=0.5 | |
Opera | zh-CN,zh;q=0.9,en;q=0.8 |
对比可见方法一与方法三得到结果相同,均为多个参数,在非IE浏览器下需要再次分解一下得到最终的值,方法二输出结果可以直接赋值,不需要再次处理。最后使用如下代码在3个浏览器下均调试通过。
System.Web.HttpCookie lang= System.Web.HttpContext.Current.Request.Cookies["lang"];
lang= new System.Web.HttpCookie("lang");
lang.Value = Request.UserLanguages[0].ToString();
lang.Expires = System.DateTime.Now.AddYears(1);
System.Web.HttpContext.Current.Response.Cookies.Add(lang);