您的位置:首页 > 编程语言 > C语言/C++

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

2016-08-26 16:39 435 查看
对于支持多语言版本的程序来说,可能需要根据操作系统的语言版本来加载不同的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



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

如果用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 多国语 C++ api