我需要将一个中文软件翻译成英文。也为了以后方便维护。
我将资源文件单独做成了dll,有英文dll和中文dll.
原来代码里的所有显示的字符串基本都是MessageBox("你好");
现在我都改成了CString str; str.LoadString(ID_NIHAO);MessageBox(str);
而ID_NIHAO是在资源dll里定义的。
这种方法我是在网上看到的。
现在由于我的软件很庞大,里面就有很多各种各样的字符串,我估计有几千个,如果要中英文都有的话,这样就要定义很多资源字符串,我的rc文件就很大。
而且每个显示语句基本都变成三行。实在写的我累死了。
而且以后维护也不是很简单。
请问高手们,有没有简单一点的方法呢?

解决方案 »

  1.   

    简单的方法是“查找并替换”!MessageBox("××"); 替换为 CString str; str.LoadString(××);MessageBox(str); 太多的话做一个小程序替换,有一个 中文 到 资源ID的对应表,自动替换!
      

  2.   

    不是做成一个文件,让DLL根据操作系统的语言自己选择吗?不管怎样,这个代码里面硬编码的地方必须一个个改的,无捷径可循。
      

  3.   

    当初做了hard code,所以后面就只能自己来修改了..
    可以用编译器带的 “查找”功能来找到并替换
      

  4.   

    可以自己重载MessageBox和其它显示文字的函数,把函数参数中的字符串指针改成资源ID,函数内部LoadString再调用原函数。
      

  5.   

    你可以从一个文件中读取所有的语言资源,比如xml。虽然用dll可以切换语言,不过如果是自己写程序,俺还是直接写,因为不用附加一个dll.
      

  6.   

    MessageBox("××"); 替换为 CString str; str.LoadString(××);MessageBox(str);建议定义一个函数,比如
    CString CVRT(int iID)
    {
        CString str; 
        str.LoadString(××);
        return str;
    }程序中:
    "xx"替换为 CVRT(xx)这样处理可以省不少手工,以后再有改变,只需要维护CVRT函数
      

  7.   

    你可以从一个文件中读取所有的语言资源,比如xml
    这样会不会读起来比较慢,每次都要读文件。还是一开始都读好,那这样初始化不是很慢吗?
      

  8.   

    MessageBox这一条语句定义为宏?
    #define MESSAGEBOX() .....