ASP.NET Change Language / Culture At Runtime

By Robbe Morris

Here's a quick tip for setting user defined languages and cultures in ASP.NET applications at runtime.

We'll need to override the Page's InitializeCulture() method.  The example below iterates through all of the languages defined in the user's browser and sets the current thread's culture to the first one it finds.  The current thread's culture is what drives .NET's dynamic handling of the proper culture for resources files.

protected override void InitializeCulture()
{

   CultureInfo cultureInfo = null;
   if (Request.UserLanguages == null)  return;
   if (Request.UserLanguages.GetLength(0) <1)  return;

   foreach(string userLanguage in Request.UserLanguages)
   {
  
     cultureInfo = GetCultureInfo(userLanguage,true);
        
     if (cultureInfo != null)
     {
       Thread.CurrentThread.CurrentUICulture = cultureInfo;
       Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureInfo.Name);
       break;
     }
   }
  
}

protected virtual CultureInfo GetCultureInfo(string userLanguage,bool useUserOverride)
{
      int semiColonIndex = userLanguage.IndexOf(";");

      try
      {

         if (semiColonIndex != -1)
         {
              userLanguage  = userLanguage.Substring(0,semiColonIndex);
         }

          return new CultureInfo(userLanguage,useUserOverride);

       }
      catch (ArgumentException) {  return null;  }
          
}
        

ASP.NET Change Language / Culture At Runtime  (2539 Views)