如何为整个C#应用程序设置默认的文化信息

68

我希望为该类或整个应用程序设置默认的区域性信息。

例如,在土耳其,3.2 = 在英语中的 3.2.

因此,应用程序使用我的本地设置,但我想将其作为默认设置。

System.Globalization.CultureInfo.InvariantCulture

我该如何将其设置为特定类别或整个应用程序的默认值?


2
我必须补充说明,非不变版本的<TNumber>.ToString()速度要慢得多,并且“Thread.CurrentThread.CurrentCulture”没有任何区别。 - gatopeich
3个回答

69

不适用于整个应用程序或特定类。

可以像这里所讨论的那样,为每个线程设置CurrentUICulture和CurrentCulture。您无法更改InvariantCulture。

更改当前线程的区域设置的示例代码:

CultureInfo ci = new CultureInfo(theCultureString);
Thread.CurrentThread.CurrentCulture = ci;
Thread.CurrentThread.CurrentUICulture = ci;

在类中,您可以在关键方法中设置/恢复区域性,但对于大多数需要将区域性作为参数之一的格式化相关方法,使用适当的重写会更加安全:

(3.3).ToString(new CultureInfo("fr-FR"))

1
那么我该如何为我正在工作的窗体窗口设置它呢?它无法识别该线程。 - Furkan Gözükara
1
我并不是特别想为每个转换定义。难道不能为表单线程设置它吗?你知道当你创建一个新的窗口表单项目时吗? - Furkan Gözükara
3
好的,我找到了如何制作的方法: System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US", false); System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", false); - Furkan Gözükara

59

1
谢谢大家,但是4.0 CurrentThread...版本对我不起作用。 - gatopeich

1
如果您使用语言资源文件来设置应用程序中的标签,则需要设置其值:
CultureInfo customCulture = new CultureInfo("en-US");
Languages.Culture = customCulture;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接