Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Setting Culture (en-IN) globally in WPF application

I have an application, which is based for India, and I'm setting Culture as:

Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-IN"); 

The above code is called before the Window.InitializeComponent() method is called.

Still this is showing $ as CurrencySymbol in all TextBoxes.

If I bind a TextBox as following, it shows Rs. as CurrencySymbol:

Text="{Binding Salary,Mode=TwoWay,StringFormat=C,ConvertCulture=en-IN}". 
like image 925
Varun Jain Avatar asked Sep 17 '11 10:09

Varun Jain


2 Answers

I think you will need to add the following.

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-IN"); Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-IN"); FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(             XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag))); 

Read more here:

http://www.west-wind.com/weblog/posts/2009/Jun/14/WPF-Bindings-and-CurrentCulture-Formatting

Just to give you an example, this is how I initialize the Culture in my program, based on the user setting, but you can simply replace UserSettings.DefaultCulture and UserSettings.Default.UICultrue with your wanted Culture.

private static void InitializeCultures() {     if (!String.IsNullOrEmpty(UserSettings.Default.Culture))     {         Thread.CurrentThread.CurrentCulture = new CultureInfo(UserSettings.Default.Culture);     }     if (!String.IsNullOrEmpty(UserSettings.Default.UICulture))     {         Thread.CurrentThread.CurrentUICulture = new CultureInfo(UserSettings.Default.UICulture);     }      FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(         XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag))); } 
like image 82
eandersson Avatar answered Sep 19 '22 08:09

eandersson


For me just works, if i put this code to the OnStartup overrided method:

public partial class App : Application {       public App()       {                       }        protected override void OnStartup(StartupEventArgs e)       {           var vCulture = new CultureInfo("de-DE");            Thread.CurrentThread.CurrentCulture = vCulture;           Thread.CurrentThread.CurrentUICulture = vCulture;           CultureInfo.DefaultThreadCurrentCulture = vCulture;           CultureInfo.DefaultThreadCurrentUICulture = vCulture;            FrameworkElement.LanguageProperty.OverrideMetadata(           typeof(FrameworkElement),           new FrameworkPropertyMetadata(                         XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));            base.OnStartup(e);       } } 
like image 39
Bence Végert Avatar answered Sep 23 '22 08:09

Bence Végert