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

12 .net c# multithreading localization

我在我的一个应用程序中遇到了一些字节转换和一些计算问题.我能够将它贡献给运行它的人在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");

    ...
}
Run Code Online (Sandbox Code Playgroud)

dah*_*byk 15

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


And*_*ndy 12

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

这篇文章回答了这个问题: 有没有办法为整个应用程序设置文化?所有当前线程和新线程?

就个人而言,我发现这种行为令人讨厌,但事实就是如此.