代码之家  ›  专栏  ›  技术社区  ›  SqlRyan

多语言web应用程序-如何在ASP.NET中检测用户的语言?

  •  21
  • SqlRyan  · 技术社区  · 16 年前

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

    有没有人这样做过,或者你有没有想过我应该如何找回这个价值?由于ASP.NET是基于服务器的,所以我似乎无法访问特定的浏览器设置。

    决议 :下面是我最后做的事情。我使用“For Each”遍历“HttpContext.Current.Request.UserLanguages”并搜索我支持的一个。实际上,我只是在检查左边的两个字符,因为我们还不支持任何方言——只支持英语和西班牙语。谢谢你的帮助!

    6 回复  |  直到 15 年前
        1
  •  21
  •   Maxam    12 年前

    在web.config中尝试以下操作:

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

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

        2
  •  6
  •   erlando    12 年前

    article (linked to archive.org as original link is now dead) 可能有助于自动检测浏览器的语言设置。

    article

        3
  •  2
  •   King Friday    14 年前

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

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

        4
  •  2
  •   Peter Mortensen icecrime    12 年前

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

    应该 自动选择用户的浏览器设置并强制 CultureInfo.CurrentCulture 到用户的浏览器语言。您可以在中使用一行强制解决问题 Page_OnInit() 比如:

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

    你如何测试这个?进入浏览器上的“语言”面板并更改设置。

        5
  •  2
  •   Peter Mortensen icecrime    12 年前

    Accept-Language 在HTTP请求头中,使用首选语言的定量评分列表,通常(但不一定)按从最有利到最不利的顺序排列。您可以解析它,但正如Maxam所指出的, ASP.NET 确实有一个代表你这样做的机制。

        6
  •  1
  •   Mazdak Shojaie Jimmy Bogard    11 年前
        /// <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

    推荐文章