如何强制本地化文化到整个应用程序的en-US

时间:2009-08-15 15:46:14

标签: c# .net localization multithreading

我在我的某个应用程序中遇到了一些字节转换和一些计算问题。我能够将它贡献给运行它的人在Windows中拥有意大利文化设置。所以我的问题是:在运行我的应用程序的任何计算机上“en-US”的最佳方法是什么。我在下面有一个代码示例,但我不确定我使用的任何线程是否会包含它。

[STAThread]
static void Main()
{
    System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
    System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");

    ...
}

2 个答案:

答案 0 :(得分:14)

您描述的问题是InvariantCulture存在的原因。您应该使用不变文化进行幕后数据操作/持久化,然后让用户的文化决定值的呈现方式,而不是改变应用程序的文化。

答案 1 :(得分:12)

您的代码将设置当前线程的文化,但是创建的任何新线程都不会将此文化“继承”。你必须自己设定所需的文化。 (我相信任何新线程都将使用已安装的Windows文化创建,但我已经准备好被证明是错误的。)

这篇文章回答了这个问题: Is there a way of setting culture for a whole application? All current threads and new threads?

就个人而言,我觉得这种行为很烦人,但就是这样。