小妹求助!!VC如何让实现多国语言动态切换

keer_ 2014-10-29 07:14:58
可以不重启软件实现动态切换吗?用LoadLibrary加载对应语言的dll,为什么菜单项未实现切换,必须重启后才能实现,拜托大家帮忙
...全文
2276 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
mayudong1 2015-04-22
  • 打赏
  • 举报
回复
主菜单重新加载一次就变过来了 SetMenu(NULL); SetMenu(菜单资源)
12304108 2015-04-22
  • 打赏
  • 举报
回复
动态加载资源信息
孤客天涯 2015-04-22
  • 打赏
  • 举报
回复
做多语言切换,不建议用LoadLibrary的方式来做,否则每对应一种语言,你都要做一个dll,多语言最好是自己做一个字典库,字典库中包含你的原始串,程序中都通过原始串,从字典库中查出当前语种对应的翻译串,用户如果觉得某些地方翻译不对,用户可以自行修改,动态切换语言效果可以参考人上传的资源http://download.csdn.net/detail/jason_wentzel/8588325
「已注销」 2014-12-09
  • 打赏
  • 举报
回复
將多國語言保存在 dll 裡,用 LoadString 之類的方法來加載字符串,而資源本身不包含字符串。設置語言後,所有的字符串都要重新設置一遍才能做到實時更新。
vocanicy 2014-12-06
  • 打赏
  • 举报
回复
引用 5 楼 keer_ 的回复:
我本身的资源已经分离了,有各自的中英文资源,加载dll,AfxSetResourceHandle(dll)后 对话框中的语言都改变了,只有界面上菜单栏的文字没改变
这是因为菜单对象已经创建了,你在修改资源句柄不会起作用的 其他资源如模态对话框,则是在显示前从资源加载创建的 对于菜单资源你可以在切换后,重新创建一次Menu对象然后SetMenu设置窗口菜单
wyx100 2014-12-05
  • 打赏
  • 举报
回复
引用 10 楼 cvbtvbwu 的回复:
我是用ini文件来做的,中文一个,英文一个。当选择不同的语言种类的,将所有的显示的文字都重新设置一次,setwindowText之类的。 类似下面代码:

/***********************************************************
** 功能描述: 国际化界面
************************************************************/
void CMainManage::InternationalizationInterface()
{
	CString szTemp;

	//标题
	szTemp = GetLanguageString(_T("Key_1"));
	SetWindowText(GetHWND(), szTemp);

	//修改主菜单文字
	CMenu *pMainMenu= m_pDelegate->GetMainMenu();

	pMainMenu->ModifyMenu(0, MF_BYPOSITION | MF_STRING, 0, GetLanguageString(_T("Key_5")));

	pMainMenu->ModifyMenu(1, MF_BYPOSITION | MF_STRING, 0, GetLanguageString(_T("Key_6")));

	pMainMenu->ModifyMenu(2, MF_BYPOSITION | MF_STRING, 0, GetLanguageString(_T("Key_7")));

	pMainMenu->ModifyMenu(3, MF_BYPOSITION | MF_STRING, 0, GetLanguageString(_T("Key_8")));
}
这不是鸭头 2014-12-05
  • 打赏
  • 举报
回复
请到我的资源里下载,以前给同事写的例子。虽然写的很简单,但是可以参考
lis2012 2014-10-30
  • 打赏
  • 举报
回复
动态生成加载
keer_ 2014-10-30
  • 打赏
  • 举报
回复
引用 2 楼 chenlycly 的回复:
可以考虑用动态创建的菜单,不要用资源中的静态菜单
谢谢,我本身的资源已经分离了,有各自的中英文资源,加载dll,AfxSetResourceHandle(dll)后 对话框中的语言都改变了,只有界面上菜单栏的文字没改变
keer_ 2014-10-30
  • 打赏
  • 举报
回复
我本身的资源已经分离了,有各自的中英文资源,加载dll,AfxSetResourceHandle(dll)后 对话框中的语言都改变了,只有界面上菜单栏的文字没改变
SiGoYi 2014-10-30
  • 打赏
  • 举报
回复
动态加载吧!
叶恭介叶恭介 2014-10-30
  • 打赏
  • 举报
回复
我是用ini文件来做的,中文一个,英文一个。当选择不同的语言种类的,将所有的显示的文字都重新设置一次,setwindowText之类的。 类似下面代码:

/***********************************************************
** 功能描述: 国际化界面
************************************************************/
void CMainManage::InternationalizationInterface()
{
	CString szTemp;

	//标题
	szTemp = GetLanguageString(_T("Key_1"));
	SetWindowText(GetHWND(), szTemp);

	//修改主菜单文字
	CMenu *pMainMenu= m_pDelegate->GetMainMenu();

	pMainMenu->ModifyMenu(0, MF_BYPOSITION | MF_STRING, 0, GetLanguageString(_T("Key_5")));

	pMainMenu->ModifyMenu(1, MF_BYPOSITION | MF_STRING, 0, GetLanguageString(_T("Key_6")));

	pMainMenu->ModifyMenu(2, MF_BYPOSITION | MF_STRING, 0, GetLanguageString(_T("Key_7")));

	pMainMenu->ModifyMenu(3, MF_BYPOSITION | MF_STRING, 0, GetLanguageString(_T("Key_8")));
}
赵4老师 2014-10-30
  • 打赏
  • 举报
回复
MSDN中有现成的例子吧。
笨笨仔 2014-10-30
  • 打赏
  • 举报
回复
其实原理不难,就是所有涉及文字处,必须用资源定义,切换语言时同时切换文本资源。但编程中确实很烦,不能直接使用字串,所有地方只能引用。我的程序中动态变换没有问题。 我的程序是面向对话框的,在通用参数中定义了一个资源结构,其中包含全部字串定义,需要时切换一下。
dvlinker 2014-10-29
  • 打赏
  • 举报
回复
如果有UpdateCmdUI消息,也可以在这个映射中去人为的去修改文字
dvlinker 2014-10-29
  • 打赏
  • 举报
回复
可以考虑用动态创建的菜单,不要用资源中的静态菜单
大树学长 2014-10-29
  • 打赏
  • 举报
回复
我做的是做多种语言都做出来,然后根据判断只显示相应的一种。 比如要显示“确定”,我会做几个静态文本框。分别显示中文、英文、俄文、阿拉伯文········· 然后弄个变量。进行判断,显示那种,别的文本框都隐藏

2,586

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 资源
社区管理员
  • 资源
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧