【问题标题】:detect os language from c#从 c# 检测操作系统语言
【发布时间】:2010-10-03 12:27:18
【问题描述】:

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

【问题讨论】:

    标签: c# operating-system


    【解决方案1】:

    很遗憾,之前的答案并非 100% 正确。

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

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

    Get operating system language in c#.

    【讨论】:

    • 这也不对。 CurrentCulture 用于格式化日期和数字等,CurrentUICulture 用于查找资源。
    • No Sven,在这一篇中,您实际上是错的,而 Mihai 写的是正确的东西:CultureInfo.InstalledUICulture 似乎是实际操作系统的预定义文化信息。我刚刚检查了msdn.microsoft.com/en-us/library/…,他们清楚地说这是系统默认的!
    • 不是真正的 quetzalcoati,sven 是对的。如果我在控制面板中更改日期、时间和数字格式,这将更改 CurrentCulture,但不会更改 CurrentUICulture。 CurrentUICulture 用于或应该用于显示 UI 元素。请不要为此使用 CurrentCulture,因为最终用户可能希望显示不同的数字,但仍需要一致的 UI。不过,她不会被安装的文化所困扰。
    【解决方案2】:

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

    CultureInfo.CurrentCulture 获得系统设置文化,CultureInfo.CurrentUICulture 获得用户设置文化。

    【讨论】:

    • 你对这两个属性的描述是错误的。 CultureInfo.CurrentCulture 是用于格式化日期、数字等的文化,并从用户区域设置(区域设置)初始化。 CultureInfo.CurrentUICulture 是资源管理器用来查找字符串资源的文化,由操作系统的 UI 语言初始化。
    • Sven 正确指出了问题,但实际答案在别处。请参阅下面的 Mihai 的答案以及我在评论中包含的 MSDN 链接
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • 我认为我们在同一页上,但要准确回答他的问题:答案是“System.Globalization.CultureInfo.CurrentUICulture.DisplayName”
      • 改为查看 CurrentUICulture。 CurrentCulture 并不是您真正想要的。 (见上面我的 cmets)
      【解决方案5】:

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

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

      GetSystemDefaultLCID 函数返回 LCID。它可以从下表映射语言字符串。 Locale IDs Assigned by Microsoft

      【讨论】:

        【解决方案6】:

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

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

        【讨论】:

          【解决方案7】:

          System.Threading.Thread.CurrentThread.CurrentCulture

          【讨论】:

            猜你喜欢
            • 2017-04-10
            • 1970-01-01
            • 2015-10-14
            • 2011-08-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多