如何更好的进行VC下多国语言开发,目前遇到的一些menu上的多国语言问题。 现在我做了个小程序,但是编译后,aboutmenu上,出现的都是中文,主要是我的系统是中文的。但是目前这个程序需要支持多国语言,我该如何来做?谢谢各位高人先 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 比较常用的方法就是资源dll吧,具体方法可以到网上搜一下。 偶,看了一些帖子,说资源dll有局限性。但是说实话,我也没有找到一个帖子比较好的,一步一步的说了,如何用资源dll来做这个多国语言支持的工作。最好能有点代码片段,给我一些参考,这样偶实现起来比较方便。偶继续查查看,高人们,还请继续给我点点拨,谢谢 资源dll的原理就是先制作多个资源dll,然后进程有选择的去加载这些资源dll。一般我们开发的时候都是用的默认资源,这些资源都在当前进程内,资源dll就是让当前进程去加载其他dll来替换默认资源。我记得方法也挺简单,Load一下资源dll,然后调用一个XXXResourceXXX之类的api函数就行了。 偶有点晕了。MFC下加载这个方面,我知道了。代码比较简单。把下面的代码加入初始化函数InitInstance的顶部: //调入资源DLL m_hDemoDLL = AfxLoadLibrary(_T("Resource.dll")); //告诉应用程序设置资源句柄m_hDemoDLL; AfxSetResourceHandle(m_hDemoDLL); ExitInstance加入以下代码: AfxFreeLibrary(m_hDemoDLL);//释放DLL资源;现在有个问题。我已经开发过了一些代码。这些代码,已经用了一些资源。我如何做这些不同的DLL文件呢?比如一个纯英文,一个纯简体中文的? 需要再做和你之前加的一模一样的资源,就是ID什么的必须一样,我印象中只要共用一个resource.h就行,但是rc文件得各自修改。当然,必须是所有资源,包括图片对话框字符等等。想想原理就知道了,因为他只是替换,所以资源ID必须保持一样才行。 king820802 大侠,网上我有搜索到这些东东,但是就是不知道具体如何实现。这些想必有些免费的code,可以套用一部分的吧。XML的解析什么的,然后如何更新菜单上的文字什么的?能否给偶点参考?谢谢 我之前做游戏的时候,我们的引擎是分析源代码中所有用到的字符串,然后汇总到一起,等需要多语言支持的时候再把汇总结果翻译一遍生成一个新文件,这个思想应该类似XML做多语。 我刚刚建立了一个MFC static的dll,然后把我的工程里面的rc和res目录下的东西copy过来,去掉了新建的chnrcs的res和rc文件。但是编译遇到下面的错,我的步骤是不是还是有问题,请帮忙指正,谢谢--------------------Configuration: chnres - Win32 Debug--------------------Compiling resources...E:\Work\chnres\chnres.rc (82): error RC2104 : undefined keyword or key name: IDR_MAINFRAMEError executing rc.exe.chnres.dll - 1 error(s), 0 warning(s) 恩,这个感觉和XML差不多,但是这个不需要解析代码了,Windows自己已经带了。但是大家为什么不用这个,而用XML,我想知道为什么?可有什么考虑的原因啊? 我认为用文本的方式(如:INI,用UNICODE编码)实现多语言比用DLL资源好原因是:1.文本的方式可以让任何人翻译成不同的语言版本你只需要制作英文版本即可软件运行时, 根据当前系统的使用的语言加载不同的语言文件, 翻译界面元素2.不用每次都编译DLL资源文件, 方便修改至于LZ说的菜单, 运行时修改菜单文本即可达到多语言的效果 qifa说的,我觉得挺有道理的,毕竟文本翻译工作对于大型软件来说,有很多工作。而且有可能翻译的人并不知道如何来写软件。这个时候用INI或者XML,确实能够得到这些好处。UNICODE的好处是是大家都能显示文本文件内容。谢谢。但是目前我的软件,需要翻译的内容比较少,想先尝试下dll,现在编译新的dll出现了点问题,不知道是哪里步骤错了?各位帮我看看,谢谢 还没有弄好,继续Googling。网上应该有类似的demo的吧,继续找 楼主,你所说的那个左上方的about菜单是会自动随着不同语言的系统而自动改变的,因为这个菜单是系统提供的不然楼主也可以去掉这个菜单 哦,不好意思,偶就一个系统。没法看,随系统自己变,那就无所谓了,谢谢jerry4711偶回去还是要试试,把Dll的弄好。到时候像各位汇报,结贴,谢谢!有问题,偶就要继续盖楼了,各位还请帮我看看。 跪求各位高手回答一个关于图像处理的基础问题 如何在mfc上写倾斜的字 关于VC6 怎么知道他有那些可调用的函数 请问为什么WaitCommEvent()函数总是返回false?(串口编程) 如何判断当前光标? 怎么让对话框里的控件随着对话框的大小变化而变化 怎样在MFC里实现多重继承 求大家了,一定要帮忙,肯定给分,一个非常简单的问题 生成的exe文件的问题 计算类对对话框类的数据共享怎么实现? 大家有没有做二维码图像的识别的,请教及格问题 请大侠们帮忙看看,我需要在线程刚启动的时候弹出对话框,等线程运行10秒后,销毁对话框,结束线程
但是说实话,我也没有找到一个帖子比较好的,一步一步的说了,如何用资源dll来做这个多国语言支持的工作。最好能有点代码片段,给我一些参考,这样偶实现起来比较方便。偶继续查查看,高人们,还请继续给我点点拨,谢谢
一般我们开发的时候都是用的默认资源,这些资源都在当前进程内,资源dll就是让当前进程去加载其他dll来替换默认资源。
我记得方法也挺简单,Load一下资源dll,然后调用一个XXXResourceXXX之类的api函数就行了。
//调入资源DLL
m_hDemoDLL = AfxLoadLibrary(_T("Resource.dll"));
//告诉应用程序设置资源句柄m_hDemoDLL;
AfxSetResourceHandle(m_hDemoDLL);
ExitInstance加入以下代码:
AfxFreeLibrary(m_hDemoDLL);//释放DLL资源;现在有个问题。我已经开发过了一些代码。这些代码,已经用了一些资源。我如何做这些不同的DLL文件呢?比如一个纯英文,一个纯简体中文的?
当然,必须是所有资源,包括图片对话框字符等等。想想原理就知道了,因为他只是替换,所以资源ID必须保持一样才行。
我刚刚建立了一个MFC static的dll,然后把我的工程里面的rc和res目录下的东西copy过来,去掉了新建的chnrcs的res和rc文件。但是编译遇到下面的错,我的步骤是不是还是有问题,请帮忙指正,谢谢--------------------Configuration: chnres - Win32 Debug--------------------
Compiling resources...
E:\Work\chnres\chnres.rc (82): error RC2104 : undefined keyword or key name: IDR_MAINFRAME
Error executing rc.exe.chnres.dll - 1 error(s), 0 warning(s)
原因是:
1.文本的方式可以让任何人翻译成不同的语言版本
你只需要制作英文版本即可
软件运行时, 根据当前系统的使用的语言加载不同的语言文件, 翻译界面元素
2.不用每次都编译DLL资源文件, 方便修改至于LZ说的菜单, 运行时修改菜单文本即可达到多语言的效果
这个时候用INI或者XML,确实能够得到这些好处。UNICODE的好处是是大家都能显示文本文件内容。谢谢。但是目前我的软件,需要翻译的内容比较少,想先尝试下dll,现在编译新的dll出现了点问题,不知道是哪里步骤错了?各位帮我看看,谢谢
哦,不好意思,偶就一个系统。没法看,随系统自己变,那就无所谓了,谢谢jerry4711偶回去还是要试试,把Dll的弄好。到时候像各位汇报,结贴,谢谢!有问题,偶就要继续盖楼了,各位还请帮我看看。