C# 从c语言检测操作系统语言#

C# 从c语言检测操作系统语言#,c#,operating-system,C#,Operating System,有没有一种方法可以从c#类中检测操作系统的语言?使用System.Globalization.CultureInfo类,您可以确定您想要什么 使用CultureInfo.CurrentCulture可以获得系统设置的区域性,使用CultureInfo.CurrentUICulture可以获得用户设置的区域性。您的意思是机器是否配置了(例如)英语、法语或日语 请查看CultureInfo类,尤其是CurrentCulture,它是从操作系统当前区域设置初始化的。System.Threading.T

有没有一种方法可以从c#类中检测操作系统的语言?

使用
System.Globalization.CultureInfo
类,您可以确定您想要什么


使用
CultureInfo.CurrentCulture
可以获得系统设置的区域性,使用
CultureInfo.CurrentUICulture
可以获得用户设置的区域性。

您的意思是机器是否配置了(例如)英语、法语或日语


请查看CultureInfo类,尤其是CurrentCulture,它是从操作系统当前区域设置初始化的。

System.Threading.Thread.CurrentThread.CurrentCulture

不幸的是,前面的答案并非100%正确

CurrentCulture
是正在运行的线程的区域性信息,用于需要知道当前区域性但不显示任何内容的操作
CurrentUICulture
用于格式化显示,例如正确显示
DateTime
。 因为您可能会更改当前线程
Culture
UICulture
,如果您想知道操作系统
CultureInfo
实际上是什么,请使用
CultureInfo.installedCulture

此外,还有一个关于这个主题的问题(比这个问题更近),并给出了详细的答案:


.

“System.Globalization.CultureInfo.CurrentUICulture.DisplayName”
。这正是您想要的。

意味着如果系统区域设置基于区域和语言,则可以使用Win32 API函数GetSystemDefaultLCID。签字如下:

[DllImport("kernel32.dll")]
static extern uint GetSystemDefaultLCID();
GetSystemDefaultLCID函数返回LCID。它可以从下表映射语言字符串。

以上所有答案似乎只能让您了解操作系统安装文化(充其量)。我遇到了一个问题,需要在Windows中使用实际的显示语言。i、 e.用户安装了默认的en US Windows安装,但随后添加了德语语言包(de),并将其设置为显示语言


为此,我使用了

您对这两个属性的描述是错误的
CultureInfo.CurrentCulture
是用于格式化日期、数字等的区域性,并从用户区域设置(区域设置)初始化
CultureInfo.CurrentUICulture
是资源管理器用于查找字符串资源的区域性,它是从操作系统的UI语言初始化的。Sven正确地指出了问题,但实际答案在别处。请看下面Mihai的答案和我在评论中包含的MSDN链接,这也不正确
CurrentCulture
用于格式化日期和数字等,而
CurrentUICulture
用于查找资源。不,在这个例子中,您实际上是错的,Mihai编写了正确的东西:CultureInfo.InstalledCulture似乎是实际操作系统预定义的区域性信息。我刚刚检查了一下,他们清楚地说这是系统默认设置!不是真的格扎尔卡蒂,斯文是对的。如果我在控制面板中更改日期、时间和数字格式,这将更改CurrentCulture,而不会更改CurrentUICulture。CurrentUICulture用于或应该用于显示UI元素。请不要为此使用CurrentCulture,因为最终用户可能希望显示不同的数字,但仍希望具有一致的用户界面。不过,她对安装的区域性不感兴趣。我想我们在同一页上,但要准确地回答他的问题:答案是“System.Globalization.CultureInfo.CurrentUICulture.DisplayName”,请看一看CurrentUICulture。当前文化并不是你真正想要的。(见上文我的评论)