获取CultureInfo中的当前语言

73
如何使用 CultureInfo 识别操作系统的语言?例如,如果在 Windows 中设置了法语语言,则需要识别法语并加载 fr 资源文件的数据。

1
你的答案可能就在这里 https://dev59.com/ZXRC5IYBdhLWcg3wVvjL - Raymund
4
如果你正在使用.NET资源文件(后缀为.resx的文件),那么系统会自动处理这些事情。 - Travis Gockel
是的,我知道,但我没有添加中文资源文件,而且电脑默认语言设置为中文,所以我正在努力解决。谢谢。 - Sharpeye500
6个回答

97

我认为像这样做可以获得当前的CultureInfo:

CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;

这是你在寻找的吗?


6
我会使用CultureInfo.CurrentCulture,它与原文中提到的方法相同,但书写更短。不幸的是,CurrentCulture和CurrentUICulture都不能返回操作系统语言。前者返回当前格式设置,后者返回用户首选的用户界面语言。 - Paweł Dyda
用户可以设置系统语言,这与文化设置没有任何共同之处...因为它们是两个完全不同的设置。 - RTDev

34

这是我使用过的内容:

var culture = System.Globalization.CultureInfo.CurrentCulture;

它正在运作中 :)


11

使用以下方式检索当前系统语言:

  CultureInfo.InstalledUICulture
"

获取表示安装在操作系统中的区域性的CultureInfo。

InstalledUICulture

要将其设置为线程的默认语言,请使用:

"
   System.Globalization.CultureInfo.DefaultThreadCurrentCulture=CultureInfo.InstalledUICulture;

6

我尝试使用{CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;},但是它对我没有用,因为我的UI文化与我的数字/货币文化不同。所以我建议您使用:

CultureInfo currentCulture = Thread.CurrentThread.CurrentUICulture;

这将为您提供UI的文化(窗口上的文本,消息框等)。

6

要获取2个字符的ISO 639-1语言标识符,请使用:

System.Threading.Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName;

2
Windows.System.UserProfile.GlobalizationPreferences.Languages[0]

这是获取当前设置的系统语言的正确方法。系统语言设置与文化设置完全不同,你们需要从中获取语言。
例如:用户可以同时使用“en-GB”语言和“en-US”文化。使用CurrentCulture和其他文化,你将得到“en-US”,希望你明白其中的区别(在GB-US方面可能不太明显,但对于其他语言呢?)。

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