对于支持多语言版本的程序来说,一般都是先获取系统的语言,然后根据系统的语言,自动切换到与之对应的语言。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; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)