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

15

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

7个回答

26

不幸的是,之前的回答并不完全正确。

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

此外,还有一个关于此主题的问题(比这个更新)有详细的答案:

在C#中获取操作系统语言


1
这也不对。CurrentCulture 用于格式化日期、数字等,而 CurrentUICulture 用于查找资源。 - Sven
不好意思,Sven,在这个问题上您是错了,Mihai写的是正确的:CultureInfo.InstalledUICulture 似乎是操作系统预定义的区域设置信息。我刚在 http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.installeduiculture.aspx 上查看过,并且他们明确表示这是系统默认的! - quetzalcoatl
1
不是真正的quetzalcoati,Sven是正确的。如果我在控制面板中更改日期、时间和数字格式,这将更改CurrentCulture,但不会更改CurrentUICulture。CurrentUICulture用于显示UI元素,应该使用它。请不要使用CurrentCulture,因为最终用户可能希望显示不同的数字,但仍希望保持一致的UI。她对安装的文化并不在意。 - theking2

9
使用 System.Globalization.CultureInfo 类,您可以确定您想要的文化设置。
使用 CultureInfo.CurrentCulture 可以获取系统设定的文化设置,使用 CultureInfo.CurrentUICulture 可以获取用户设定的文化设置。

15
你对这两个属性的描述是错误的。 CultureInfo.CurrentCulture 是用于格式化日期、数字等内容的区域性,它从用户的地区设置中初始化。而 CultureInfo.CurrentUICulture 则是资源管理器用于查找字符串资源的区域性,并从操作系统的用户界面语言初始化。 - Sven
Sven正确指出了问题,但实际答案在其他地方。请查看我在评论中包含的Mihai的答案和MSDN链接。 - quetzalcoatl

5
"System.Globalization.CultureInfo.CurrentUICulture.DisplayName"。这正是您想要的。

3

您是想了解机器是否配置了英语、法语或日语等语言吗?

可以看一下CultureInfo类,特别是初始化自操作系统当前区域设置的CurrentCulture属性。


我认为我们在同一页面上,但要精确回答他的问题:答案是“System.Globalization.CultureInfo.CurrentUICulture.DisplayName”。 - Lost
请看一下CurrentUICulture。CurrentCulture并不是你想要的。 (请参见上面的评论) - theking2

3

这意味着如果系统区域设置在“区域和语言”中,您可以使用Win32 API函数GetSystemDefaultLCID。其签名如下:

[DllImport("kernel32.dll")]
static extern uint GetSystemDefaultLCID();

GetSystemDefaultLCID函数返回LCID。它可以从以下表格中映射语言字符串。 由Microsoft分配的区域设置ID


1
以上所有答案似乎只能帮你获取操作系统安装区域设置(最多)。我遇到了一个问题,需要知道Windows实际使用的显示语言。例如,用户安装了默认的英文(美国)Windows,但又添加了德语(de-DE)语言包,并将其设置为他们的显示语言。
要获取它,我使用了System.Windows.Input.InputLanguageManager.Current.CurrentInputLanguage

0

System.Threading.Thread.CurrentThread.CurrentCulture


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接