Multi-lingual web application - how do I detect the user's language in ASP.NET?

后端 未结 6 790
说谎
说谎 2020-12-15 05:20

I\'m building an ASP.NET web application, and all of my strings are stored in a resource file. I\'d like to add a second language to my application, and ideally, I\'d like t

相关标签:
6条回答
  • 2020-12-15 05:53
        /// <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
            { ;}
        }
    }
    

    The source of this article is here: How to detect browser language

    0 讨论(0)
  • 2020-12-15 05:58

    Try this in the web.config:

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

    This will cause ASP.NET to auto-detect the client's culture from the request header. You can also set this on a per-page basis via the Page attribute.

    0 讨论(0)
  • 2020-12-15 05:58

    This is a great question, as localization in ASP.NET is overlooked by many developers.

    ASP.NET should automatically pick up on the user's browser settings and force the CultureInfo.CurrentCulture to the user's browser language. You can force the issue with a line in Page_OnInit() like:

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

    How can you test this? Enter the languages panel on our browser and change settings.

    0 讨论(0)
  • 2020-12-15 06:01

    This article (linked to archive.org as original link is now dead) might be helpful with auto detecting the browser's language setting.

    [EDIT] Yes. The quoted article does not use ASP.NET. This article does.

    0 讨论(0)
  • 2020-12-15 06:04

    The client generally sets Accept-Language in the HTTP request header with a quantitatively scored list of preferred language, conventionally (but not necessarily) in order of most favored to least favored. You can parse that, but as Maxam has noted, ASP.NET does have a mechanism for doing that on your behalf.

    0 讨论(0)
  • 2020-12-15 06:06

    Request.UserLanguages in ASP.NET 4 parses this as a string array.

    Good info: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

    0 讨论(0)
提交回复
热议问题