我将哪个 CultureInfo 属性设置为在所有应用程序线程中使用它

Posted

技术标签:

【中文标题】我将哪个 CultureInfo 属性设置为在所有应用程序线程中使用它【英文标题】:Which CultureInfo-property do i set to use it in all application threads 【发布时间】:2017-02-09 10:42:56 【问题描述】:

我正在使用 VS 2015 开发 WPF 应用程序,用户可以在其中更改应用程序语言在运行时。

目前我们还没有使用多个线程,但也许这会到来。

最大的问题是,CultureInfo 类的哪个属性最好为应用程序的所有线程设置?

有四个候选人:

    CultureInfo.CurrentCulture

    CultureInfo.CurrentUICulture

    CultureInfo.DefaultThreadCurrentCulture

    CultureInfo.DefaultThreadCurrentUICulture

根据这个article,它似乎是 CultureInfo.DefaultThreadCurrentCulture 和 CultureInfo.DefaultThreadCurrentUICulture,但我不确定。

提前致谢!

【问题讨论】:

WPF 是 tricky(重复?)。 .NET 4.6 的重大变化,标记的答案不再正确。文化现在自动流动,最好的事情就是什么都不做。当然,你不能改变已经在运行的线程的文化,这种文化没有改变。 @HansPassant,很高兴知道,谢谢。我们仍在使用 4.5 和所有那些糟糕的解决方法。 4.5 不再受 Microsoft 支持,升级到 4.6 非常简单。 【参考方案1】:

CultureInfo.DefaultThreadCurrentCultureCultureInfo.DefaultThreadCurrentUICulture

Set default thread culture for all thread?

Culture 和 UICulture 的区别在于前者影响格式(日期、货币等),而后者影响资源:

What is the difference between Culture and UICulture?

【讨论】:

非常感谢mm8。 你错过了wpf标签,控件有使用自己的文化。我什至不得不创建custom binding 来克服一些奇怪的问题(即控制面板中当前文化设置的更改,这些不是自动进行的)。否则答案是正确的(它会为例如 winforms 应用程序做这件事)。 控件是在 UI 线程上创建的。 CultureInfo.DefaultThreadCurrentCulture 和 CultureInfo.DefaultThreadCurrentUICulture 属性会影响应用程序可能创建的其他线程。问题是关于“多线程”,不是吗?您不会在后台线程上创建控件。 @Sinatr :在我们的例子中,我们通过属性从数据库中读取标题和内容的文本。我知道它也适用于 RESX 文件。 @PatrickPirzer,仍然,如果你不改变文化properly 你的TextBox 突然不能正确识别用户输入的数字(因为绑定将尝试使用默认 en- 设置源值美国文化)。我只是想预测您的下一个非常可能的问题。

以上是关于我将哪个 CultureInfo 属性设置为在所有应用程序线程中使用它的主要内容,如果未能解决你的问题,请参考以下文章

为十进制值设置全局cultureinfo

为国家、语言组合创建自定义 CultureInfo

在 WPF 绑定中使用“真实”CultureInfo.CurrentCulture,而不是 IetfLanguageTag 中的 CultureInfo

CultureInfo.NumberFormat 隐藏逗号

.NET 中 CultureInfo 的 CurrentCulture 和 CurrentUICulture 属性有啥区别?

新 CultureInfo(string Name) 构造函数 - .NET (C#)