c++ 获取操作系统语言(本地化信息)的Win32 API?

jhiyze9q  于 2023-04-08  发布在  其他
关注(0)|答案(3)|浏览(262)

有没有人可以帮助我如何通过win32 API(C/C++)获得Windows操作系统的语言(英语,中文等)??
谢谢,索拉布

oxcyiej7

oxcyiej71#

如果您询问“操作系统菜单和对话框以哪种语言显示”(即安装了哪种MUI -多语言用户界面工具包),请使用以下内容:

更多信息:

nhn9ugyo

nhn9ugyo2#

您可以使用GetUserDefaultLCID获取默认的用户区域设置(我认为这就是您所要求的)。这将为您提供一个ID,可用于确定区域性。请参阅here以获取包含ID及其所代表的区域性的表。
对于Vista或Windows 7,Microsoft建议使用GetUserDefaultLocaleName

6rqinv9w

6rqinv9w3#

由于这两个答案都是旧的,并且使用了过时的语言id,这是一个新的答案,可以解决这个问题:
首先,区域设置和UI语言不是一回事。它们经常相关,但它们不一定必须相同。区域设置基于用户的地理位置和语言,而UI语言决定用户界面应该使用哪种语言。

UI语言

使用语言名称(Windows Vista+)

要获取UI语言,您可能应该使用GetUserPreferredUILanguages函数。它返回语言ID或语言名称,具体取决于参数。由于Microsoft不赞成使用语言ID,因此您应该直接使用该函数来获取语言名称。
如果你想获取其他信息而不是语言名称,你可以使用GetLocaleInfoEx。第一个参数是刚刚获得的语言名称,你可以选择LCTYPE,这是你想要检索的信息,可以是各种各样的东西,例如国家,货币或日期格式。

使用语言ID(Windows 2000+)

但是,这些功能仅适用于Windows Vista及更高版本。如果您需要与旧系统兼容,则需要使用(现在不推荐)语言ID。使用GetUserDefaultUILanguage,您可以获取当前用户的UI语言作为语言ID。要将该语言ID转换为语言名称或其他信息,请使用GetLocaleInfoW。它的工作原理类似于GetLocaleInfoEx,只是第一个参数是语言ID而不是语言名称。
由于LOCALE_SNAMELCTYPE(返回语言名称)仅在Windows Vista中引入了语言名称的概念,因此您需要使用LCTYPELOCALE_SISO639LANGNAMELOCALE_SISO3166CTRYNAME(分别返回类似enUS的内容)并使用它们构建语言名称。

本地语言

使用语言名称(Windows Vista+)

获取用户区域设置更容易:您只需要使用GetLocaleInfoEx函数。并且,您可以使用常量LOCALE_NAME_USER_DEFAULT而不是语言名称作为第一个参数,这将导致GetLocaleInfoEx直接返回有关当前用户区域设置的信息。要获取语言名称,请使用LOCALE_SNAME作为LCTYPE

使用语言ID(Windows 2000+)

与UI语言一样,只有Windows Vista上才支持使用语言名称。如果您需要与旧系统兼容,您可以使用GetLocaleInfoW函数。而不是语言id作为第一个参数,您可以使用常量LOCALE_USER_DEFAULT,这将导致GetLocaleInfoW直接返回有关当前用户区域设置的信息。
由于LOCALE_SNAMELCTYPE(返回语言名称)只是在Windows Vista中引入了语言名称的概念,因此您需要使用LCTYPELOCALE_SISO639LANGNAMELOCALE_SISO3166CTRYNAME(分别返回类似于enUS的内容)并使用它们构建您的语言名称。

相关问题