用VC++实现软件的多语种支持 作者:卞远 发布时间:2001/04/25
文章摘要:
本文介绍了如何编制自己的双语或多语种软件。首先,创建一个包含所有英文资源的DLL,在使用这个资源DLL时,应用程序就会以英文形式出现,即软件为英文版;然后,创建中文DLL,再次运行StateDemo程序,程序就以中文形式出现(即使应用程序未被重新编译)。
关键词 VC++,应用程序,英文资源,中文资源
--------------------------------------------------------------------------------
正文:
用VC++实现软件的多语种支持
前言
只用一套源代码就可以方便地支持多种文字和多个地域,那么这个软件就可以方便地被翻译成本地版本,这个过程叫做地域化(Localization)。怎样才能不修改任何源代码就使之能动态地转换到不同的地域资源上呢?那就是使用Windows的程序特性之一--资源。把在软件中用到的可见资源维系在一个资源DLL(Dynamic Link Library动态链接库)中,就能使地域化很容易地被实现,因为它把具体的文字组件单独提取放在一个文件中,所以,一个可执行文件就可以装载几种不同的语言文字,并且选择用子程序来装载适合的文字DLL。创建一个CString对象的实例,并用该字串的资源标识符(string ID)调用LoadString,即可避免繁琐的字串编码工作。
在大多数情况下,资源包含在应用程序的单元中,如果调用AfxSetResource Handle,就可以指向另一个不同的单元,我下面给出的StateDemo程序就是这样处理的。调用AfxSetResource Handle,从DLL资源中采集软件所需资源,通过替换掉不同语种的DLL资源,程序便可以使用一套完全不同的资源(如String字串、Dialogue对话框、Bmp位图、Menu菜单等)。
初始情况下,作为主执行体的StateDemo不含任何资源。首先,创建一个包含所有英文资源的DLL,在使用这个资源DLL时,应用程序就会以英文形式出现,即软件为英文版;然后,创建中文DLL,再次运行StateDemo程序,程序就以中文形式出现(即使应用程序未被重新编译)。
I. 应用程序的创建与编译
(1)创建StateDemo.EXE文件(1)创建StateDemo工作区
在Microsoft Visual C++ 5.0开发环境下,单击File | New选项,在创建类型选择框New中选择MFC AppWizard(exe)、Projectname:StateDemo,创建新项目StateDemo工作区,应用程序类型选择Multiple Documents,单击Finish完成工作区的建立。
(2)添加字串资源
这步实际上是在为英文资源DLL添加字串资源,因为后面将把英文资源StateDemo.rc从项目中移走,并把它拷贝到英文资源的项目中,而不是刚建立的StateDemo.EXE文件项目,执行体exe文件会引用这个资源,而字串就在资源DLL中。选择StateDemo项目资源中的String Table,在StringTable中单击右键选择New String,添加如下代码,然后选择菜单中File | Save All选项即完成。
ID:IDS_MINE=300 //主框架IDS_MINE定义为300,即ID的值为300
Caption(标题):Hi! it's my demo vc5 program of English version.
(3)添加CStateDemo类的数据成员
本程序要动态地装入包含所有资源的DLL,所以必须保存DLL的Handle(句柄),在后面会释放Handle,并在CStateDemoApp类中添加私有数据成员(代码如下)。
private:
HINSTANCE m_hDemoDLL;//资源DLL handle句柄
可以在MS-VC5的DevelopStudio位于左方的Workspace窗口中选择ClassView标签