下面我要介绍的是MFC工程多语言切换
首先我们创建工程,创建工程之后添加菜单选项,加入我们需要切换的语言
接下来为我们切换语言添加函数,没有语言都需要添加,这里我只添加了一种
然后添加程序,在我们点击语言的时候切换语言
int m_bRestartFlag = false;
/*获取线程当前语言*/
LCID lcidNew = GetThreadLocale();
if (LANG_ENGLISH == PRIMARYLANGID(LANGIDFROMLCID(lcidNew)))
{
lcidNew = MAKELCID(MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED), SORT_DEFAULT);
}
else
{
lcidNew = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT);
}
// 把语言设置写入配置文件
CFile file;
file.Open(_T("Language.ini"), CFile::modeWrite | CFile::modeCreate | CFile::typeBinary);
file.Write(&lcidNew, sizeof(lcidNew));
file.Close();
// 关闭窗口
m_bRestartFlag = TRUE;
PostMessage(WM_CLOSE, 0, 0);
//重启应用程序
if (m_bRestartFlag)
{
CString strFileName = _T("");
GetModuleFileName(NULL, strFileName.GetBuffer(MAX_PATH), MAX_PATH);
ShellExecute(NULL, _T(""), strFileName, NULL, NULL, SW_SHOWNORMAL);
strFileName.ReleaseBuffer();
}
添加好语言切换的代码后,我们需要在窗口构建之前读取我们的配置文件,修改线程语言
以上代码添加结束之后,我们接下来要做的就是比较麻烦的工作了->翻译窗口
首先为我们每一个窗口文件插入一个副本,副本的语言要和我们需要显示的语言一致
由于MessageBox函数不能切换语言,这里我把MessageBox函数重载了一下暂时没有想到其他的好办法
CString m_BoxText[][2] =
{
{_T("你好"),_T("hello")},
};
int Ctests1Dlg::MessageBox(CString str)
{
for (size_t i = 0; i < (sizeof(m_BoxText)/sizeof(m_BoxText[0])); i++)
{
if (!str.CompareNoCase(m_BoxText[i][0]))
{
AfxMessageBox(m_BoxText[i][1]);
return 0;
}
}
return -1;
}
以上就是我做实验用的测试程序,由于前几天在网上找例程花了很多时间,下载下来的例程也不能用,最后花了点时间完成了这个小程序,如果有大神可以指点一下那是最好了