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

对于支持多语言版本的程序来说,可能需要根据操作系统的语言版本来加载不同的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);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值