有没有人可以帮助我如何通过win32 API(C/C++)获得Windows操作系统的语言(英语,中文等)??谢谢,索拉布
oxcyiej71#
如果您询问“操作系统菜单和对话框以哪种语言显示”(即安装了哪种MUI -多语言用户界面工具包),请使用以下内容:
更多信息:
nhn9ugyo2#
您可以使用GetUserDefaultLCID获取默认的用户区域设置(我认为这就是您所要求的)。这将为您提供一个ID,可用于确定区域性。请参阅here以获取包含ID及其所代表的区域性的表。对于Vista或Windows 7,Microsoft建议使用GetUserDefaultLocaleName。
6rqinv9w3#
由于这两个答案都是旧的,并且使用了过时的语言id,这是一个新的答案,可以解决这个问题:首先,区域设置和UI语言不是一回事。它们经常相关,但它们不一定必须相同。区域设置基于用户的地理位置和语言,而UI语言决定用户界面应该使用哪种语言。
要获取UI语言,您可能应该使用GetUserPreferredUILanguages函数。它返回语言ID或语言名称,具体取决于参数。由于Microsoft不赞成使用语言ID,因此您应该直接使用该函数来获取语言名称。如果你想获取其他信息而不是语言名称,你可以使用GetLocaleInfoEx。第一个参数是刚刚获得的语言名称,你可以选择LCTYPE,这是你想要检索的信息,可以是各种各样的东西,例如国家,货币或日期格式。
LCTYPE
但是,这些功能仅适用于Windows Vista及更高版本。如果您需要与旧系统兼容,则需要使用(现在不推荐)语言ID。使用GetUserDefaultUILanguage,您可以获取当前用户的UI语言作为语言ID。要将该语言ID转换为语言名称或其他信息,请使用GetLocaleInfoW。它的工作原理类似于GetLocaleInfoEx,只是第一个参数是语言ID而不是语言名称。由于LOCALE_SNAMELCTYPE(返回语言名称)仅在Windows Vista中引入了语言名称的概念,因此您需要使用LCTYPE、LOCALE_SISO639LANGNAME和LOCALE_SISO3166CTRYNAME(分别返回类似en和US的内容)并使用它们构建语言名称。
GetLocaleInfoEx
LOCALE_SNAME
LOCALE_SISO639LANGNAME
LOCALE_SISO3166CTRYNAME
en
US
获取用户区域设置更容易:您只需要使用GetLocaleInfoEx函数。并且,您可以使用常量LOCALE_NAME_USER_DEFAULT而不是语言名称作为第一个参数,这将导致GetLocaleInfoEx直接返回有关当前用户区域设置的信息。要获取语言名称,请使用LOCALE_SNAME作为LCTYPE。
LOCALE_NAME_USER_DEFAULT
与UI语言一样,只有Windows Vista上才支持使用语言名称。如果您需要与旧系统兼容,您可以使用GetLocaleInfoW函数。而不是语言id作为第一个参数,您可以使用常量LOCALE_USER_DEFAULT,这将导致GetLocaleInfoW直接返回有关当前用户区域设置的信息。由于LOCALE_SNAMELCTYPE(返回语言名称)只是在Windows Vista中引入了语言名称的概念,因此您需要使用LCTYPE、LOCALE_SISO639LANGNAME和LOCALE_SISO3166CTRYNAME(分别返回类似于en和US的内容)并使用它们构建您的语言名称。
LOCALE_USER_DEFAULT
GetLocaleInfoW
3条答案
按热度按时间oxcyiej71#
如果您询问“操作系统菜单和对话框以哪种语言显示”(即安装了哪种MUI -多语言用户界面工具包),请使用以下内容:
更多信息:
nhn9ugyo2#
您可以使用GetUserDefaultLCID获取默认的用户区域设置(我认为这就是您所要求的)。这将为您提供一个ID,可用于确定区域性。请参阅here以获取包含ID及其所代表的区域性的表。
对于Vista或Windows 7,Microsoft建议使用GetUserDefaultLocaleName。
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_SNAME
LCTYPE
(返回语言名称)仅在Windows Vista中引入了语言名称的概念,因此您需要使用LCTYPE
、LOCALE_SISO639LANGNAME
和LOCALE_SISO3166CTRYNAME
(分别返回类似en
和US
的内容)并使用它们构建语言名称。本地语言
使用语言名称(Windows Vista+)
获取用户区域设置更容易:您只需要使用GetLocaleInfoEx函数。并且,您可以使用常量
LOCALE_NAME_USER_DEFAULT
而不是语言名称作为第一个参数,这将导致GetLocaleInfoEx
直接返回有关当前用户区域设置的信息。要获取语言名称,请使用LOCALE_SNAME
作为LCTYPE
。使用语言ID(Windows 2000+)
与UI语言一样,只有Windows Vista上才支持使用语言名称。如果您需要与旧系统兼容,您可以使用GetLocaleInfoW函数。而不是语言id作为第一个参数,您可以使用常量
LOCALE_USER_DEFAULT
,这将导致GetLocaleInfoW
直接返回有关当前用户区域设置的信息。由于
LOCALE_SNAME
LCTYPE
(返回语言名称)只是在Windows Vista中引入了语言名称的概念,因此您需要使用LCTYPE
、LOCALE_SISO639LANGNAME
和LOCALE_SISO3166CTRYNAME
(分别返回类似于en
和US
的内容)并使用它们构建您的语言名称。