21

我正在构建一个 ASP.NET Web 应用程序,我的所有字符串都存储在一个资源文件中。我想在我的应用程序中添加第二种语言,理想情况下,我想自动检测用户的浏览器语言(或 Windows 语言)并默认使用该语言,而不是让他们选择英语以外的其他语言。目前,我正在手动处理所有资源填充,因此从我的角度来看,添加第二个资源文件和语言是微不足道的,如果我有一种简单的方法来自动找出要显示的语言。

有没有人这样做过,或者您对我如何检索该值有任何想法?由于 ASP.NET 是基于服务器的,我似乎无法访问特定的浏览器设置。

解决方案:这就是我最终要做的。我使用“For Each”浏览“HttpContext.Current.Request.UserLanguages”并搜索我支持的一个。我实际上只是检查左边的两个字符,因为我们还不支持任何方言——只有英语和西班牙语。感谢所有的帮助!

4

6 回答 6

21

在 web.config 中试试这个:

<globalization culture="auto" uiCulture="auto" />

这将导致 ASP.NET 从请求标头中自动检测客户端的文化。您还可以通过 Page 属性在每页的基础上进行设置。

于 2008-11-01T23:28:25.500 回答
6

这篇文章(链接到archive.org,因为原始链接现已失效)可能有助于自动检测浏览器的语言设置。

[编辑] 是的。引用的文章不使用 ASP.NET。这篇文章可以。

于 2008-11-01T23:19:50.227 回答
2

这是一个很好的问题,因为许多开发人员都忽略了ASP.NET中的本地化。

ASP.NET应该自动获取用户的浏览器设置并强制使用CultureInfo.CurrentCulture用户的浏览器语言。您可以使用以下行来强制解决问题Page_OnInit()

Thread.CurrentThread.CurrentCulture = new CultureInfo(HttpContext.Current.Request.UserLanguages[0]);

你怎么能测试这个?在我们的浏览器上输入语言面板并更改设置。

于 2008-11-01T23:25:21.760 回答
2

客户端通常在 HTTP 请求标头中设置Accept-Language并使用定量评分的首选语言列表,通常(但不一定)按照最受青睐到最不受青睐的顺序排列。您可以对其进行解析,但正如 Maxam 所指出的,ASP.NET确实具有代表您执行此操作的机制。

于 2008-11-02T03:34:52.537 回答
2

ASP.NET 4 中的 Request.UserLanguages 将其解析为字符串数组。

好信息:http ://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

于 2011-04-23T17:23:06.497 回答
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
        { ;}
    }
}

本文出处: 如何检测浏览器语言

于 2013-07-08T16:51:57.303 回答