如何获取操作系统的语言版本

对于支持多语言版本的程序来说,可能需要根据操作系统的语言版本来加载不同的dll或rc,以实现多国语的目的。
至于如何加载dll或rc,请参考下面链接
http://blog.csdn.net/xiaofeizai1116/article/details/52317583

言归正传,系统提供了获取多个获取语言的API函数:

  • GetSystemDefaultLangID
  • GetUserDefaultLangID
  • GetSystemDefaultUILanguage   
  • GetUserDefaultUILanguage

几个API的区别:

GetSystemDefaultLangID :该函数获取的语言是控制面板 > 区域与语言选项 > 高级tab页中设置的支持的非Unicode语言

GetUserDefaultLangID: 该函数获取的语言是控制面板 > 区域与语言选项 > 区域选项tab页中设置的标准和格式语言

GetSystemDefaultUILanguage: 该函数获取原始系统安装的语言

GetUserDefaultUILanguage: 暂未知,应该和GetSystemDefaultUILanguage差不太多  


几个API的共同点:

返回值类型LANGID: 各语言对应的ID

各语言对应的ID详情,请参考下面链接

https://msdn.microsoft.com/en-us/library/windows/desktop/dd318693(v=vs.85).aspx


如果用GetSystemDefaultUILanguageGetUserDefaultUILanguage,则如果用户变更系统语言,软件显示的语言不会跟着变更

如果用GetSystemDefaultLangID ,则不支持Unicode语言

故最好的是用GetUserDefaultLangID


LANGID COMGetUserDefaultLangID()
{
	LANGID lLangId;
	BYTE   byteHigh = 0x00;

	LANGID lUserLangID = GetUserDefaultLangID();
	// LOBYTE()是取得16进制数最低(最右边)那个字节的内容
	switch (LOBYTE(lUserLangID)) {
	case 0x11:								
		lLangId = 0x0411;				
		break;
	case 0x04:   
		// HIBYTE()是取得16进制数最高(最左边)那个字节的内容
		byteHigh = HIBYTE(lUserLangID);
		switch (byteHigh) {
		case 0x08:
			lLangId = 0x0804;          
			break;
		case 0x04:
		default:
			
			lLangId = 0x0404;          
			break;
		}
		break;
	case 0x12:                             
		lLangId = 0x0412;
		break;
	}
	return (lLangId);
}


你可能感兴趣的:(Windows)