Thursday 31 March 2011

Dot.Net: CurrentCulture vs CurrentUICulture

Question:
What is the difference between CurrentCulture and CurrentUICulture and when do I use which one in dot.net?
Should I use CurrentCulture or CurrentUICulture for localization (translation)?
Which culture should I use to parse dates or numbers in c#?


Answer:
First of all, both properties are properties of the current Thread.

CurrentCulture
  • CurrentCulture is the cultural context for formatting and parsing (for ex. to parse dates or numbers) A date is often written like '10/30/2000' by Americans, but '30/10/2000' by Irish people, and 30.10.2000 by Germans etc.
  • CurrentCulture does not support neutral cultures (i.e. "en", "fr" ...). It is always a specific culture (i.e. "en-GB", "de-AT", "pt-BR")

CurrentUICulture
  • CurrentUICulture provides the cultural context for localization, i.e. translation of resources.
  • CurrentUICulture supports neutral cultures (i.e. "en", "fr" ...)


Get resources sample in asp.net
using System.Threading;
using System.Globalization;
  
  string culture = "en";
  Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);
  string hello = (string)HttpContext.GetGlobalResourceObject("myClassKey", "myResourceKey");

  // and now French
  string culture = "fr";
  Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);
  string hello = (string)HttpContext.GetGlobalResourceObject("myClassKey", "myResourceKey");
...

Parse date sample in asp.net
using System.Threading;
using System.Globalization;
  
    DateTime dt;
    // this is a British English date format
    string dateStr = "31/10/2001";

    // parse it with British English culture
    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB");
    bool parseOk = DateTime.TryParse(dateStr, out dt);
    // parseOk: true -- dt: {31/10/2001 00:00:00}

    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
    parseOk = DateTime.TryParse(dateStr, out dt);
    // parseOk: false-- dt: {1/1/0001 12:00:00 AM}
...

well, you get the idea.

No comments: