vc项目如何汉化,我把资源里的英文都改成中文以后,出现乱码的现象。

解决方案 »

  1.   

    要把资源的属性也改为P.R.C Chinese
      

  2.   

    如何翻译VC++软件中的资源文件。在VC编程中最先碰到的语言问题是当我们选择新建一个MFCAppWizard程序时,VC将询问我们选择何种的语系。如果我们需要生成支持双字节的软件的话,必须使用支持远东语系的DLL。这些DLL在缺省安装时并没有安装,需要你自己手动安装。这些文件在VisualC++光盘的\Bin\IDE目录中,具体如下所述:日语       appwzjpn.dll
    简体中文 appwzchs.dll
    台湾中文 appwzcht.dll如果你想在你的软件中支持中文,你必须把上面的appwzchs.dll复制到你安装Vusial C++的目录下的\Bin\IDE目录下,然后选择中文的AppWizard。否则,即使在中文环境下,你的软件也不能支持中文。那么,选择中文的AppWizard会有哪些变化呢?有兴趣的朋友可以在文本状态下打开资源文件(*.rc),你会发现其中有这么两段代码:#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
    #ifdef _WIN32
    LANGUAGE 4, 2
    #pragma code_page(936)
    #endif //_WIN32

    #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
    #ifdef _WIN32
    LANGUAGE 4, 2
    #pragma code_page(936)
    #endif //_WIN32
    #include "res\\New.rc2"       // non-Microsoft Visual C++ edited resources
    #include "l.chs\\afxres.rc"        // Standard components
    #include "l.chs\\afxprint.rc"       // printing/print preview resources
    #endif其中AFX_TARG_CHS与936定义了资源文件的简体中文属性。
    英文属性中为AFX_TARG_ENU与1252,
    日文属性中为AFX_TARG_JPN与932,
    繁体中文属性中为AFX_TARG_CHT与950。
    翻译时必须改成相应的语言属性。注意下面两句也应改动:
    #include "l.chs\\afxres.rc"        // Standard components
    #include "l.chs\\afxprint.rc"       // printing/print preview resources
    英文为:
    #include "afxres.rc"        // Standard components
    #include "afxprint.rc"       // printing/print preview resources
    日文为:
    #include "l.jpn\\afxres.rc"        // Standard components
    #include "l.jpn\\afxprint.rc"       // printing/print preview resources
    繁体中文为:
    #include "l.cht\\afxres.rc"        // Standard components
    #include "l.cht\\afxprint.rc"       // printing/print preview resources有些朋友从网上下载了一些原代码,但发现即使将菜单,字符串等翻译成中文也不能正确显示,就是由于没有改这些语言属性。另外,直接在文本状态下改资源文件比类似一个对话框接一个对话框的改
    Chinese(P.R.C.)要省事许多。BTW,要把中文Help文件变成英文也可以在文本状态下打开*.hpj文件,然后将Chinese (P.R.C.)改成English (U.S.)。改完语言属性之后,再去改菜单及字符串就不会有问题了(当然还要小心诸如双字节的%或╲等字符的正确翻译)。上面讲的是在能得到资源文件原代码的前提下讲翻译工作,那么要是没有原代码怎么办呢?其实没有原代码翻译软件在Windows下并不是一件不可能的事。当然,这要归功与Windows设计人员高超的思想。大家知道,VC++编译程序时将资源文件单独编译成*.res文件,然后再与其他的目标文件连接成可执行文件。这就使我们可以通过某种工具将可执行文件中的资源单独提取出来。例如,VC++中的资源编译器,就可完成这个工作,不过必须是在Windows NT下,在Window 9x中只能编辑,不能保存。有兴趣的朋友可以利用VC++打开一个exe文件,但注意在Open对话框中的Open As组合框中选Resources,而不要选Auto,这样打开之后,你会发现出现的即为该可执行文件的所有资源,包括菜单,对话框,及字符串等。不过这时翻译时的语言属性问题不能在文本状态下改了,只能一个一个地改。你可以在相应的资源ID上单击右键,然后在跳出的上下文菜单中选属性,接着在属性页中修改Language。有朋友可能会注意到,如果一个应用程序将它的所有字符串都放在String Table中的话,通过这种方法就可以将该软件彻底翻译成另一种语言了,于是便会情不自禁地感叹:怪不得weizhenjiang经常教导我们要将所有的字符串放入String Table,原来如此。:-)从上面所述看来,一个软件要利于地域化的话,最好将所有的资源均放入*.rc,但我觉得,其实最好的方法是将资源单独作成一个dll文件(如resource.dll),然后在程序运行时通过如下方法载入资源:
    m_hRC = AfxLoadLibrary(_T("resource.dll"));
    /*remember to free resource library at exiting,
           such as:
            if(m_hRC)
              AfxFreeLibrary(m_hRC);*/
    if(m_hRC)
            AfxSetResourceHandle(m_hRC);这样你就可以象利用可执行体自身的资源一样地利用所有resource.dll中包含的资源了。这种方法的好处是显而易见的,以后将该软件地域化时,只需改动resource.dll就可以了,很省事。一个真正优秀的软件就应该做长远打算。