C++ 如何获取Windows *** 作系统的语言

C++ 如何获取Windows *** 作系统的语言,第1张

C++ 如何获取Windows *** 作系统的语言

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

GetSystemDefaultLangIDGetUserDefaultLangIDGetSystemDefaultUILanguageGetUserDefaultUILanguage

那么我们到底该用哪一个?先说结论:推荐使用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;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5712042.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存