我有一个MFC项目,其中包含一个美国英语的.rc文件和一个瑞士德语的.rc文件。两个.rc文件相同除了1)我用于测试的单个字符串,以及2).rc文件在顶部使用不同的LANGUAGE
语句:
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US >>> for US English
LANGUAGE LANG_GERMAN, SUBLANG_GERMAN_SWISS >>> for Swiss German
我从一个主.rc文件中包含两个.rc文件。编译主.rc文件,特定于语言的.rc文件设置为“从构建中排除”。
我相信我已正确设置所有内容,因为我可以使用以下代码段从瑞士德语资源文件中成功加载字符串资源:
WORD swissGermanLanguageID =
MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN_SWISS);
WORD swissGermanLCID =
MAKELCID(swissGermanLanguageID, SORT_DEFAULT);
CString teststring;
teststring.LoadString(AfxGetResourceHandle(), IDS_TESTSTRING, swissGermanLCID);
问题是:当我省略语言ID时,例如在以下代码段中,MFC 始终从美国英语资源加载资源,无论我尝试什么:
CString teststring;
teststring.LoadString(IDS_TESTSTRING);
我尝试/检查过的事情:
LoadString
会成功加载瑞士德语测试字符串。我的结论是,如果现在美国英语资源优先于瑞士德国资源。/l 0x0807
,对应瑞士德语。AfxSetResourceHandle()
。好的,最后,这是问题:MFC如何确定它在加载资源时使用的默认语言ID?甚至更好:我如何更改默认语言ID?
以上是我上面提到的用于设置线程区域设置的代码段:
WORD swissGermanLanguageID =
MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN_SWISS);
WORD swissGermanLCID =
MAKELCID(swissGermanLanguageID, SORT_DEFAULT);
SetThreadLocale(swissGermanLCID);
答案 0 :(得分:2)
GetThreadPreferredUILanguages
family of functions获取的首选语言列表(对于用户,进程和线程有一个单独的列表,用于执行资源查找)。可能它可能会被MFC运行时改变,但我不确定。在您的系统上,此列表可能包含4个条目:[de-CH
,de
,en-US
,en
]。