系统提供了获取多个获取语言多个API函数:GetSystemDefaultLangID、GetUserDefaultLangID、GetSystemDefaultUILanguage和GetUserDefaultUILanguage。看上去这些函数都可以使用,到底应该使用那个呢?通过查阅MSDN,发现这几个还是有很大区别的,最终还是要使用GetUserDefaultUILanguage的。
GetSystemDefaultLangID在MSDN上的说明:
Returns the language identifier for the system locale. This is the language used when displaying text in programs that do not support Unicode. It is set by the Administrator under Control Panel > Clock, Language, and Region> Administrative tab. 由说明可知,该函数获取的语言是控制面板 > 区域与语言选项 > 高级tab页中设置的支持的非Unicode语言,即如下图所示:
GetUserDefaultLangID在MSDN上的说明:
Returns the language identifier for the current user as set under Control Panel > Clock, Language, and Region > Formats tab > Format dropdown. 由说明可知,该函数获取的语言是控制面板 > 区域与语言选项 > 区域选项tab页中设置的标准和格式语言,即如下图所示:
GetSystemDefaultUILanguage在MSDN上的说明:
Retrieves the language identifier for the system default UI language of the operating system, also known as the "install language" on Windows Vista and later. For more information, see User Interface Language Management.
GetUserDefaultUILanguage在MSDN上的说明:
Returns the language identifier for the user UI language for the current user. If the current user has not set a language, GetUserDefaultUILanguage returns the preferred language set for the system. If there is no preferred language set for the system, then the system default UI language (also known as "install language") is returned. For more information about the user UI language, see User Interface Language Management.
综上所述,GetSystemDefaultLangID和GetUserDefaultLangID获取的语言,受区域语言设置中的选项影响,所以这两个函数是不能用的。我们需要获取的是操作系统本身的语言版本。GetSystemDefaultUILanguage的应用场景较单一,使用GetUserDefaultUILanguage应该是最有效的。所以最终使用的是GetUserDefaultUILanguage函数。
附加说明:各种语言ID列表的查看
到VC6对应的2001版本的msdn中搜索GetSystemDefaultLangID,通过页面中的链接找到“Language Identifiers”点进去,在弹出的页面中,找到“Table of Language Identifiers”即可。VS2008自带的msdn竟然找不到GetSystemDefaultLangID函数,所以有时这两个版本的MSDN帮助要混合着用。语言列表如下所示(截图中只有部分语言,全部列表可自行去查看):