从c#中检测os语言

有没有办法从ac#class中检测操作系统的语言?

使用System.Globalization.CultureInfo类,您可以确定所需的内容。

使用CultureInfo.CurrentCulture您可以获得系统集文化,使用CultureInfo.CurrentUICulture可以获得用户设置文化。

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

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

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

在c#中获取操作系统语言 。

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

你的意思是说机器是用英语,法语还是日语配置的(例如)?

看一下CultureInfo类 – 特别是CurrentCulture,它是从OS当前的区域设置初始化的。

意味着如果系统区域设置在Region和Language上,则可以使用Win32 API函数GetSystemDefaultLCID。 签名如下:

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

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

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

为此,我使用了System.Windows.Input.InputLanguageManager.Current.CurrentInputLanguage

System.Threading.Thread.CurrentThread.CurrentCulture