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

Posted

技术标签:

【中文标题】如何为整个 c# 应用程序设置默认文化信息【英文标题】:how to set default culture info for entire c# application 【发布时间】:2012-11-01 11:54:44 【问题描述】:

我想为该类或整个应用程序设置默认文化信息。

例如在土耳其 3,2 = 英语 3.2

所以应用程序使用我的本地,但我希望它用作默认值

System.Globalization.CultureInfo.InvariantCulture

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

【问题讨论】:

我必须补充一点,.ToString() 的非不变版本要慢得多,并且“Thread.CurrentThread.CurrentCulture”没有任何区别。 Is there a way of setting culture for a whole application? All current threads and new threads?的可能重复 【参考方案1】:

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

CurrentUICulture 和 CurrentCulture 可按线程设置,如Is there a way of setting culture for a whole application? All current threads and new threads? 所述。你根本无法更改InvariantCulture

更改当前线程文化的示例代码:

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

对于类,您可以在关键方法中设置/恢复文化,但是对于大多数将文化作为参数之一的格式相关方法使用适当的覆盖将是非常安全的:

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

【讨论】:

那么我如何为我正在处理的表单窗口设置它。它无法识别线程 我对定义每个过渡并不真正感兴趣。是不是可以为表单线程设置它。你知道什么时候创建一个新的窗体项目吗? 好的,我找到了制作方法:System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US", false); System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", false);【参考方案2】:

在 4.0 中,您需要按照 Alexei 的描述设置每个线程的文化来自行管理。但是在 4.5 中,您可以为 appdomain 定义一种文化,这是处理此问题的首选方式。相关api为CultureInfo.DefaultThreadCurrentCulture和CultureInfo.DefaultThreadCurrentUICulture。

【讨论】:

谢谢大家,但是 4.0 CurrentThread... 版本不适合我。【参考方案3】:

如果您使用语言资源文件在应用程序中设置标签,则需要设置其值:

CultureInfo customCulture = new CultureInfo("en-US");
Languages.Culture = customCulture;

【讨论】:

以上是关于如何为整个 c# 应用程序设置默认文化信息的主要内容,如果未能解决你的问题,请参考以下文章

C#:如何为部分类中的属性设置默认值?

如何为编码的 UI 测试设置文化以从资源文件中获取本地化文本?

如何为 Blazor 服务器应用设置显示宽度?

Android - 如何为整个应用程序设置自定义字体[重复]

如何为 Tailwindcss 全局更改默认、活动和悬停状态的链接颜色?

目标c如何为整个应用程序上的所有UIbuttons设置独家触摸