Reputation: 23870
I want to set default culture info for specific class or for entire application.
For example in Turkey 3,2 = in English 3.2
So application uses my local culture but I want it to use as default:
System.Globalization.CultureInfo.InvariantCulture
How can I set it to that as default for that specific class or for entire application?
Upvotes: 73
Views: 154575
Reputation: 16409
Find the method below which will set culture information for all threads and also for newly created threads.
This works for .NET Framework 4.5 and above. This also works for .NET Core 3.1. Not tested for next versions.
Use any culture you want to set as default. I am using "en-US" for example.
Call following method at your application start-up.
public static void SetDefaultCulture()
{
CultureInfo cultureInfo = CultureInfo.CreateSpecificCulture("en-US");
Thread.CurrentThread.CurrentCulture = cultureInfo;
Thread.CurrentThread.CurrentUICulture = cultureInfo;
CultureInfo.DefaultThreadCurrentCulture = cultureInfo;
CultureInfo.DefaultThreadCurrentUICulture = cultureInfo;
Type type = typeof(CultureInfo);
type.InvokeMember("s_userDefaultCulture",
BindingFlags.SetField | BindingFlags.NonPublic | BindingFlags.Static,
null,
cultureInfo,
new object[] { cultureInfo });
type.InvokeMember("s_userDefaultUICulture",
BindingFlags.SetField | BindingFlags.NonPublic | BindingFlags.Static,
null,
cultureInfo,
new object[] { cultureInfo });
}
Upvotes: 0
Reputation: 3846
If you use a Language Resource file to set the labels in your application you need to set the its value:
CultureInfo customCulture = new CultureInfo("en-US");
Languages.Culture = customCulture;
Upvotes: 1
Reputation: 3276
With 4.0, you will need to manage this yourself by setting the culture for each thread as Alexei describes. But with 4.5, you can define a culture for the appdomain and that is the preferred way to handle this. The relevant apis are CultureInfo.DefaultThreadCurrentCulture and CultureInfo.DefaultThreadCurrentUICulture.
Upvotes: 60
Reputation: 100630
Not for entire application or particular class.
CurrentUICulture and CurrentCulture are settable per thread as discussed here Is there a way of setting culture for a whole application? All current threads and new threads?. You can't change InvariantCulture
at all.
Sample code to change cultures for current thread:
CultureInfo ci = new CultureInfo(theCultureString);
Thread.CurrentThread.CurrentCulture = ci;
Thread.CurrentThread.CurrentUICulture = ci;
For class you can set/restore culture inside critical methods, but it would be significantly safe to use appropriate overrides for most formatting related methods that take culture as one of arguments:
(3.3).ToString(new CultureInfo("fr-FR"))
Upvotes: 74