ASP.NET MVC: When to set Thread.CurrentThread.CurrentUICulture?

Robert Claypool picture Robert Claypool · Oct 27, 2009 · Viewed 21.4k times · Source

I am just beginning to localize an ASP.NET MVC application. Most of the strings will be defined in resource files and retrieved via Matt's Localization Helpers. Other strings must be stored in a database.

My Question: Should I set CurrentUICulture early in the request pipeline and use that throughout the application, or directly use Request.UserLanguages[0] whenever needed?

Right now I'm thinking that I should set CurrentUICulture in Application_BeginRequest. The implementation would look something like this:

protected void Application_BeginRequest(object sender, EventArgs e)
{
    var cultureName = HttpContext.Current.Request.UserLanguages[0];
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureName);
}

Is this the best place to set CurrentUICulture and is Request.UserLanguages[0] the best place to get that info?


Update:

Ariel's post shows this can be defined without code, using web.config

<system.web>
  <!--If enableClientBasedCulture is true, ASP.NET can set the UI culture and culture for a Web page automatically, based on the values that are sent by a browser.-->
  <globalization enableClientBasedCulture="true" culture="auto:en-US" uiCulture="auto:en"/>

Answer

Ariel Popovsky picture Ariel Popovsky · Oct 27, 2009

Here is a sample using an HttpModule:

http://weblogs.manas.com.ar/smedina/2008/12/17/internationalization-in-aspnet-mvc/

Other options, create a base Controller class and implement the localization logic there. Or use an action filter attribute, but you'll have to remember to add it on every controller or combine this approach with the base Controller class.