我正在构建一个ASP.NET Web应用程序,我的所有字符串都存储在一个资源文件中。我想在我的应用程序中添加第二种语言,理想情况下,我想自动检测用户的浏览器语言(或Windows语言)并默认使用,而不是让他们选择除英语之外的其他语言。目前,我正在手动处理所有资源填充,因此从我的角度来看,添加第二个资源文件和语言是微不足道的,如果我有一种简单的方法可以自动找出要显示的语言。
有没有人这样做过,或者你对我如何找回这个价值有什么想法?由于ASP.NET是基于服务器的,因此我似乎无法访问特定的浏览器设置。
解决方案:这就是我最终要做的事情。我使用“For Each”来浏览“HttpContext.Current.Request.UserLanguages”并搜索我支持的一个。我实际上只是检查左边两个字符,因为我们还不支持任何方言 - 只有英语和西班牙语。谢谢你的帮助!
答案 0 :(得分:21)
在web.config中尝试:
<globalization culture="auto" uiCulture="auto" />
这将导致ASP.NET从请求标头中自动检测客户端的文化。您也可以通过Page属性在每页基础上设置它。
答案 1 :(得分:6)
此article (linked to archive.org as original link is now dead)可能有助于自动检测浏览器的语言设置。
[编辑]是的。引用的文章不使用ASP.NET。这article确实如此。
答案 2 :(得分:2)
这是一个很好的问题,因为许多开发人员忽略了ASP.NET中的本地化。
ASP.NET 会自动选择用户的浏览器设置并强制CultureInfo.CurrentCulture
使用用户的浏览器语言。您可以使用Page_OnInit()
中的一行来强制解决问题:
Thread.CurrentThread.CurrentCulture = new CultureInfo(HttpContext.Current.Request.UserLanguages[0]);
你怎么测试这个?在我们的浏览器中输入语言面板并更改设置。
答案 3 :(得分:2)
客户端通常在HTTP请求标头中设置Accept-Language,其中包含首选语言的定量评分列表,通常(但不一定)按照最受青睐的顺序排列。你可以解析它,但正如Maxam所指出的那样,ASP.NET确实有一种代表你这样做的机制。
答案 4 :(得分:2)
ASP.NET 4中的Request.UserLanguages将其解析为字符串数组。
答案 5 :(得分:1)
/// <summary>
/// Sets a user's Locale based on the browser's Locale setting. If no setting
/// is provided the default Locale is used.
/// </summary>
public static void SetUserLocale(string CurrencySymbol, bool SetUiCulture)
{
HttpRequest Request = HttpContext.Current.Request;
if (Request.UserLanguages == null)
return;
string Lang = Request.UserLanguages[0];
if (Lang != null)
{
// *** Problems with Turkish Locale and upper/lower case
// *** DataRow/DataTable indexes
if (Lang.StartsWith("tr"))
return;
if (Lang.Length < 3)
Lang = Lang + "-" + Lang.ToUpper();
try
{
System.Globalization.CultureInfo Culture = new System.Globalization.CultureInfo(Lang);
if (CurrencySymbol != null && CurrencySymbol != "")
Culture.NumberFormat.CurrencySymbol = CurrencySymbol;
System.Threading.Thread.CurrentThread.CurrentCulture = Culture;
if (SetUiCulture)
System.Threading.Thread.CurrentThread.CurrentUICulture = Culture;
}
catch
{ ;}
}
}
这篇文章的来源是: How to detect browser language