对于支持多语言版本的程序来说,一般都是先获取系统的语言,然后根据系统的语言,自动切换到与之对应的语言。Windows sdk 也提供了获取语言的API函数:

  • GetSystemDefaultLangID
  • GetUserDefaultLangID
  • GetSystemDefaultUILanguage
  • GetUserDefaultUILanguage

那么我们到底该用哪一个?先说结论:推荐使用GetUserDefaultUILanguage。以win10为例,因为通过修改“Windows显示语言”,该Api的返回值就会发生改变。而修改“Windows显示语言”的操作,与用户的心理预期是一致的。


示例代码:

namespace
{struct countryLang{LANGID langId;//char country[16];//国际代码缩写char lang[32];//char userLang[32];//};const countryLang COUNTRY_LANG[] = {{0x0804, "CN", "zh", "zh_CN"},//中国{0x0409, "US", "en", "en_US"},//美国{0x0412, "KR", "ko", "ko_KR"},//韩国{0x0411, "JP", "ja", "ja_JP"},//日本{0x0421, "ID", "en", "en_ID"},//印度尼西亚{0x0407, "DE", "de", "de_DE"},//德国{0x040c, "FR", "fr", "fr_Fr"},//法国{0x0410, "IT", "it", "it_IT"},//意大利{0x0416, "BR", "pt", "pt_BR"},//葡萄牙{0x0c0a, "ES", "es", "es_Es"},//西班牙{0x0419, "RU", "ru", "ru_RU"},//俄国{0x041f, "TR", "tr", "tr_TR"},//土耳其{0x042a, "VI", "vi", "vi_VI"},//越南{0x041e, "TH", "en", "en_TH"},//泰国{0x0809, "GB", "en", "en_US"}//英国};
}
//
bool GetDefaultLang(std::string& country, std::string& lang, std::string& userLang)
{bool bFind = false;//LANGID lang_id = GetSystemDefaultLangID();LANGID lang_id = GetUserDefaultUILanguage();//"win10>设置>语言>Windows显示语言"int size = sizeof(COUNTRY_LANG) / sizeof(COUNTRY_LANG[0]);char _country[16] = { 0 };//国际代码缩写strcpy_s(_country, "US");char _lang[32] = { 0 };//语言strcpy_s(_lang, "en");char _userlang[32] = { 0 };//用户语言strcpy_s(_userlang, "en_US");for (int i = 0; i < size; i++){if (lang_id == COUNTRY_LANG[i].langId){memset(_country, 0, sizeof(_country));memset(_lang, 0, sizeof(_lang));memset(_userlang, 0, sizeof(_userlang));strcpy(_country, COUNTRY_LANG[i].country);strcpy(_lang, COUNTRY_LANG[i].lang);strcpy(_userlang, COUNTRY_LANG[i].userLang);bFind = true;break;}}country = std::string(_country);lang = std::string(_lang);userLang = std::string(_userlang);return bFind;
}

C++ 如何获取Windows操作系统的语言相关推荐

  1. VC++获取Windows操作系统的语言版本(附源码)

    目录 1.系统提供的多个获取语言版本的API函数 2.各个函数在MSDN上的说明

  2. 在C#里怎样获得当前Windows操作系统的语言种类?以及如何知道当前Windows版本?...

    MessageBox.Show(System.Globalization.CultureInfo.InstalledUICulture.NativeName);    MessageBox.Show( ...

  3. Python获取Windows系统语言

    >>> import ctypes >>> dll_h = ctypes.windll.kernel32 >>> hex(dll_h.GetSys ...

  4. VB获取Windows操作系统所有版本

    '**************************************************************************** '人人为我,我为人人 '枕善居汉化收藏整理 ...

  5. 转:使用DOS命令chcp查看windows操作系统的默认编码以及编码和语言的对应关系

    代码页是字符集编码的别名,也有人称"内码表".早期,代码页是IBM称呼电脑BIOS本身支持的字符集编码的名称.当时通用的操作系统都是命令行界面系统,这些操作系统直接使用BIOS供应 ...

  6. 获取windows程序界面数据

    文章目录 结论 可以尝试的其他方向 最后的挣扎 基础知识 win7/win10查看某个进程的句柄数 句柄的概念 Windows MFC.SDK和API的区别和联系 Windows MFC(C++开发) ...

  7. 操作系统的语言ID(LCID)

    操作系统的语言ID(Language Identifier)基本上等同于LCID(Locale Identifier,也叫做区域标识),可以认为两者是相同的. 一个LCID由主语言标识和子语言标识组成 ...

  8. Windows操作系统的各进程的作用

    btwdins.exe是为了微软Windows操作系统支持蓝牙技术的程序. cisvc.exe是微软Windows操作系统自带的程序.它用于监测CIDAEMON.exe内存使用状态,防止可用内存过低问 ...

  9. 这段百度问答,对我相关有对啊!!!----如何获取Windows系统登陆用户名

    如何获取Windows系统登陆用户名 http://zhidao.baidu.com/link?url=Hva9PkVwYZv8KSEWftSqTWe8fqM1dhoq59BurnfADmcOvFjF ...

最新文章

  1. 网络营销外包专员浅析尽管快照不见了网络营销外包仍在继续
  2. 实地址模式与保护模式下的中断与异常处理
  3. android 之ExpandableListView详解
  4. 5分钟解析Facebook最新推荐算法
  5. android webservices 返回多行多列数据,Pandas: 如何将一列中的文本拆分为多行?
  6. leetcode-无重复字符的最长子串
  7. 获取组件的方式(方法)
  8. Office 2016中Excel的部分快捷方式
  9. 什么是SNAT、DNAT?
  10. linux 下运行libnids,libnids出错
  11. 通过示例休眠–第1部分(删除孤儿)
  12. [html] android手机的微信H5弹出的软键盘挡住了文本框,如何解决?
  13. Mybatis 在 IDEA 中使用 generator 逆向工程生成 pojo,mapper
  14. steam一键授权工具_半个东的时间让你省了一个亿 Steam免费游戏一键领取
  15. Sublime中查找重复行的正则表达式
  16. 关于 async 与 await的个人理解
  17. Android 源代码中的res
  18. 【剑指offer】之字形打印二叉树,C++实现
  19. Spring Boot Actuator 监控和管理应用程序
  20. cad线性标注命令_CAD中线性标注的快捷命令是什么

热门文章

  1. 着色器(Shader)之像素着色器
  2. windows linux目录相互同步,使用cwRsync在Windows的目录之间增量同步文件
  3. java练习 家庭收支管理小练习
  4. Java字符串和数组相互转换
  5. ci/cd自动化测试_自动化CI / CD并花费更多时间编写代码
  6. CString 包含头文件
  7. ElasticSearch7.17权限控制和规划实战
  8. html标签助手,TidExpress(HTML代码编辑优化助手)V2.0.2.1 正式版
  9. [MATLAB]将.m文件生成dll文件
  10. 【C系列综合1】游戏达人I