如何获取操作系统的语言版本
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);
}
至于如何加载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);
}
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android Manifest 用法
- 什么是 GraphQL?
- Spark RDD API详解(一) Map和Reduce
- 如何重装TCP/IP协议
- 关于指针的一些事情
- Spring Boot 开发微服务
- Windows 8 官方高清壁纸欣赏与下载
- 谁是桌面王者?Win PK Linux三大镇山之宝
- 对《大家都在点赞 Windows Terminal,我决定给你泼一盆冷水》一文的商榷
- Windows Clang开发环境备忘
- 从Windows系统下访问Linux分区相关软件
- 对《大家都在点赞 Windows Terminal,我决定给你泼一盆冷水》一文的商榷
- Windows下搭建本地SVN服务器
- lwn拾遗:[sn3218 led drivers]-api解释-1
- 使用Windows原生命令一键清空剪贴板
- 页面元素查找之Selectors API
- c++ primer 第五版 笔记前言