【问题标题】:Get operating system language in c#c#获取操作系统语言
【发布时间】:2011-08-08 06:47:36
【问题描述】:

我们如何在 c# 中使用 Win32_OperatingSystem 类和 OSLanguage 变量获取当前操作系统语言? 谢谢..

【问题讨论】:

  • Win32_OperatingSystem吗?
  • 有一秒钟我以为这是要求获取编写操作系统所用的编程语言。

标签: c#


【解决方案1】:

像这样:

static int Main( string[] argv )
{
    CultureInfo ci = CultureInfo.InstalledUICulture ;

    Console.WriteLine("Default Language Info:" ) ;
    Console.WriteLine("* Name: {0}"                    , ci.Name ) ;
    Console.WriteLine("* Display Name: {0}"            , ci.DisplayName ) ;
    Console.WriteLine("* English Name: {0}"            , ci.EnglishName ) ;
    Console.WriteLine("* 2-letter ISO Name: {0}"       , ci.TwoLetterISOLanguageName ) ;
    Console.WriteLine("* 3-letter ISO Name: {0}"       , ci.ThreeLetterISOLanguageName ) ;
    Console.WriteLine("* 3-letter Win32 API Name: {0}" , ci.ThreeLetterWindowsLanguageName ) ;

    return 0 ;
}

【讨论】:

  • 比如我安装的是英文版的Windows 7。后来我决定下载另一种语言的 UI 翻译并将其配置为我的会话语言和新帐户默认语言。我希望我的应用程序在配置文件不存在并且正在创建(可能是在首次运行或安装期间)时以该辅助语言而不是英语显示文本。我应该使用 InstalledUICulture 还是 CurrenUICulture?
  • CurrentUI 是(更近的)用户决定。所以你应该这样做。
  • 这不会为您提供 Windows 默认显示语言,而是为您提供用户所在的区域,如果您想将此数据用于翻译目的,这是错误的。
  • @lukad:你可能想要read the documentation for CultureInfo.InstalledUICulture——它被定义为“代表随操作系统安装的文化的CultureInfo...... .在本地化操作系统中,如日文版 Windows,此属性返回操作系统的文化。此属性等效于 Windows API 中的GetSystemDefaultUILanguage"
  • @NicholasCarey 谢谢尼古拉斯。时代变了,我不得不承认你的答案超越了完整性(和我的:-))让你赞了
【解决方案2】:

也许是为了更清楚一点(或不),Installed、CurrentUI 和 Current 三种文化的设置方式并不那么明显。

如果在英国英语系统(Windows 10 技术预览版)的控制面板中,我指定以下程序的输出为德语(瑞士)日期/时间格式:

        CultureInfo ci = CultureInfo.InstalledUICulture;
        Console.WriteLine("Installed Language Info:{0}", ci.Name);
        ci = CultureInfo.CurrentUICulture;
        Console.WriteLine("Current UI Language Info: {0}", ci.Name);
        ci = CultureInfo.CurrentCulture;
        Console.WriteLine("Current Language Info: {0}", ci.Name);

是这样的:

Installed Language Info:en-GB
Current UI Language Info: en-GB
Current Language Info: de-CH

意思是 Installed 不受影响,但在安装时设置,但 CurrentUI 和 Current 可以不同。 CurrentUI 可能意味着操作系统的本地化(语言设置),而 Current 仅说明数字日期和时间的显示方式(区域设置)。

我经常遇到将 Current 作为首选语言的安装程序,如果使用 CurrentUI,它可能会提供更一致的最终用户体验。

【讨论】:

  • “已安装的文化”对于某些事情也很重要。 IE。内置帐户名称:英语:“BUILTIN\Administrators”与德语“VORDEFINIERT\Administratoren”。无论用户实际使用哪种语言,这些名称都遵循已安装的文化本地化。
【解决方案3】:
using System;

class Program {
    static void Main(string[] args) {
        Console.WriteLine("You are speaking {0}",
            System.Globalization.CultureInfo.CurrentCulture.EnglishName);
        Console.ReadLine();
    }
}

【讨论】:

  • 不完全。这仅显示应用程序当前使用的语言环境。它可能是系统的默认值,但不是必须的。我们通常编写双语应用程序,本机和英语,实际上,Current 只是 CURRENT 设置,它控制应用程序如何查找本地化资源。它可以很容易地更改,即使在运行时也是如此。尼古拉斯的回答指出了正确的事情(我的意思是,关于原始发帖人的问题。毫无疑问你的代码是好的,它只是检查不同的事情)-> msdn.microsoft.com/en-us/library/…
  • 好吧,很明显,如果用户更改了系统区域设置,那么她就不再说同一种语言了。
  • 不,汉斯。我不是以英语为母语的人,但我更喜欢用英语使用操作系统和所有应用程序。但是,我确实更改了系统区域设置以从区域日期/时间和数字格式中受益。当软件查看我当前的语言环境并尝试以我的母语显示资源时,这是不一致和烦人的。
  • 这就像在中国度假,并希望每个人都能理解你说斯瓦希里语。那只会产生很多恼火的中国人。如果您的软件没有 Visual Studio 的工具 + 选项、环境、国际设置、语言等功能,那么您需要购买更好的软件。