Xtreme Toolkit Pro v11.2.1 汉化全过程(转)

本文曾在CSDN上首次发表,因内容有些遗漏,所以作了相应的补充,并对一些用词进行了调整,使之更加准确。现再次发表到博客园,欢迎博客园的朋友们多提意见。另外在这次修改中参考了网友红马天下的相关文章http://www.cnblogs.com/homer/archive/2008/04/22/1166105.html,在此表示感谢。同时也非常愿意与之交流XtremeToolkitPro使用心得。

前言

XtremeToolkitPro作为VC++/MFC平台下目前最流行的GUI界面库之一,笔者在此不作过多介绍。不了解的朋友请访问其官方网址:

官方网址:http://www.codejock.com/

试用版下载地址:到笔者写此文章时为v12.0.0

http://www.codejock.com/downloads/

笔者手上的是v11.2.1 Full.Source版本,所以它能支持Visual Studio 6.0Visual Studio 2003Visual Studio 2005Visual Studio 2008,不过笔者汉化仅限在Visual Studio 2005中完成,并未在别的Visual Studio版本下试用过,但我想也应该没有什么问题,感兴趣的朋友可以自己尝试着应用到别的Visual Studio版本下,笔者在此非常有兴趣与大家一起相互交流经验。

由于上述原因,本文只针对Visual Studio 2005作详述,并且请大家对应上XtremeToolkitPro中相应的文件夹vs8.0的相应内容。

认识XtremeToolkitPro的文件夹结构及文件用途

       XtremeToolkitPro安装后,其文件夹结构如下图所示:
XtremeToolkit目录树
 

前面的几个文件夹就不用我说了,重点说说Utils里面的文件夹。

AppWizard很显然是XtremeToolkitPro应用程序工程生成向导的文件夹,这一点后面再作详解。

Package此文件夹里有一个动态库文件CodejockPackage.dll和一个1033的文件夹,文件夹1033及其下的CodejockPackageUI.dll应该是与UI有关的E文资源包。而DLL文件是被注册在注册表中VisualStudio\8.0\Packages项下的,应该是用作本地化的,具体用途是为Visual Studio提供本地化资源,还是作别的什么用途就不是很清楚了,因为笔者对本地化不是很了解,望有这方面经验的达人指点指点,呵呵。

Translations文件夹是为ToolkitPro提供的多语言资源库。方便大家开发多语言版本的软件项目。

另外Utils文件夹下还有两个.exe文件,CommandBarsDesigner.exeResourceEditor.exe,前者就不用我说了,是开发界面风格的工具,help中有它的使用说明手册。后者呢,是开发多语言版的资源编辑工具,不但可以用来编辑修改Translations文件夹下的资源动态库文件(.DLL),生成新的语种资源动态库,还可以提取.exe中的资源(String TableMenuDialogs中的字符串)生成.xml文件,然后Export to DLL,生成新的资源动态库。

然后是Workspace文件夹,在此之下的Resource文件夹是XtremeToolkitPro 支持的各国语言资源文件夹,其下又包括多个以ResourceXXX命名的文件夹,且每个文件夹下均包括Resource.rcResourceXXX_vc80.slnResourceXXX_vc80.vcproj三个文件(XXX代表语言名称)。打开.sln文件,整个解决方案里就只包括Resource.rc,由此可看出该工程仅仅是用来编译资源文件的。

Resource文件夹下有.mak文件(Resource.mak)、项目文件(Resource_vc80.sln)、资源包的定义文件ResourcePackage.hResourcePackage.rc。由此可看出是为批量编译资源文件用的。

Samples文件夹下全是 各个Sample.sln文件。

ToolkitPro文件夹下面是编译XtremeToolkitPro各种版本动态库用的项目文件。如果你修改了ToolkitPro的原文件(如果你是这种牛人:->),你可以打开ToolkitPro_vc80.sln再次编译ToolkitPro界面库便可生成Unicode版本的动态库,或非Unicode动态库。

总结,由上述可以看到,XtremeToolkitPro不但为开发者提供了漂亮的界面库,而且为开发者开发多国语言的程序提供现成的界面相关语言资源库。顺便告诉大家,ToolkitPro还提供了类CXTPResourceManager,处理资源问题应该很方便哦,呵呵。使用方法在help里能找到。

笔者之前通过ToolkitPro向导生成项目,结果界面部分却总是E文的,所以总感觉很不爽。至此,想要ToolkitPro显示中文,不再是难事了。哈哈!!

让你的应用程序界面--ToolkitPro显示中文

打开ToolkitPro_vc80.sln项目,然后查看ToolkitPro.rc源代码,拉到文件最后,会发现如下的定义:

 

 1#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
 2
 3#ifdef _WIN32
 4
 5LANGUAGE 91
 6
 7#pragma code_page(1252)
 8
 9#endif //_WIN32
10
11#include "XTToolkitPro.rc"  // non-Microsoft Visual C++ edited resources
12
13#include "afxres.rc"         // Standard components
14
15#endif
16
17

代码中定义包含的文件

"XTToolkitPro.rc"  是在ToolkitProSource文件夹下的,"XTToolkitPro.rc"  文件集中定义的是界面库中各种控件的资源文件,咱们再打开"XTToolkitPro.rc"文件,我们发现文件开头几行定义说明了一切问题。

 1 
 2#define LANGUAGE_DEFAULT(ProdName) <##ProdName##\res\Resource.rc> 
 3
 4#ifdef _XTP_RESOURCE_LANGUAGE
 5
 6    #define LANGUAGE_LOCALIZED__(ProdName, LangName) <##ProdName##\res\Resource_##LangName##.rc>
 7
 8    #define LANGUAGE_LOCALIZED_(ProdName, LangName) LANGUAGE_LOCALIZED__(ProdName, LangName)
 9
10    #define LANGUAGE_LOCALIZED(ProdName) LANGUAGE_LOCALIZED_(ProdName, _XTP_RESOURCE_LANGUAGE)
11
12#else
13
14    #define LANGUAGE_LOCALIZED(ProdName) LANGUAGE_DEFAULT(ProdName)
15
16#endif
17 
18
19#if !defined(_XTP_EXCLUDE_CALENDAR)
20
21#include LANGUAGE_LOCALIZED(Calendar)         // _XTP_INCLUDE_CALENDAR
22
23#endif
24 
25
26#if !defined(_XTP_EXCLUDE_COMMANDBARS)
27
28#include LANGUAGE_LOCALIZED(CommandBars)      // _XTP_INCLUDE_COMMANDBARS
29
30#endif
31//..
32
33 
34
35

第一行定义了缺省的语言,第二行的标识

_XTP_RESOURCE_LANGUAGE可以看出该标识是为使用不同的语言资料文件而定义标识的。那么只要在程序库中定义了该标识就可以让ToolkitPro使用相应的语言资源库了。HoHo! 打开Source文件夹,在每一个控件包含的文件夹下都可以看到许多后缀为.rc的资源文件,由资源文件的名称,再由定义语句:

 

#define LANGUAGE_LOCALIZED__(ProdName, LangName) <##ProdName##\res\Resource_##LangName##.rc> 

可以很容易猜得到中文的定义为zh_CN,自然可以猜到定义中文资源的语句即为: 

 

#define _XTP_RESOURCE_LANGUAGE zh_CN

那么应该定义在哪。我的做法是定义在ToolkitPro.rc文件的头几行,因为该文件是编译界面库的项目文件中的文件,与ToolkitPro的源代码没有关系,因此尽可能不影响源代码为佳。

接下来再找到下面一行:

LANGUAGE  LANG_ENGLISH, SUBLANG_ENGLISH_US

改为-->

LANGUAGE  LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED

再次重新生成一下各种版本的动态库(编译你需要的版本就够了,全编译很费时的!:D),然后再运行你的应用程序,Bingo!界面元素的窗口、工具条等等,比如工具条自定义窗口都变成中文了。

Ps: 我想说说ToolkitPro.rc文件中的

 

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)

………

#endif

标识AFX_RESOURCE_DLL我猜想应该是为制作多国语言资源所用。因为定义了它,其后的资源文件就不会被定义了。也就是不会把资源编译进ToolkitProDLL中。若哪位达人做过多语言版本方面的软件研究,还望不吝赐教。

初识Visual Studio 2005的向导模板

现在让我们来看看Visual Studio 2005的向导都由哪些文件组成,并且向导是如何工作的。若你创建过“自定义向导”工程,对下面的内容应该熟悉了,那么可以跳过下面表的内容。      

下表描述由自定义向导创建的文件

文件

说明

Project.vsz

它标识向导引擎并提供上下文和可选的自定义参数

Project.vsdir

 Visual Studio 外壳程序与向导项目中的项之间提供路由服务的文本文件。

HTML 文件(可选)

向导可以包含用户界面 (UI),即 HTML 界面。没有 UI 的文件不包含任何 HTML 文件。

Default.htm 是指定用户界面中的功能的文件。如果在自定义向导应用程序设置中指定多个页,则每个附加文件均命名为 Page_PageNum.htm

脚本文件

向导访问脚本引擎并为每个项目创建一个 JScript 文件 Default.js。它还包括 Common.js。这些文件包含访问Visual C++ 向导、代码和环境对象模型以自定义向导的 JScript 函数。可以在向导项目的 Default.js 文件中自定义和添加这些函数。

模板

向导模板是包含指令的文本文件的集合,这些指令根据向导用户的选择被分析并插入符号表中。模板文本文件根据用户输入呈现并添加到项目中。获取适当信息的方法是直接访问向导控件的符号表。

Templates.inf

文本文件,列出与项目关联的所有模板。

Default.vcproj

.xml 文件,包含有关项目类型的信息。

Sample.txt

模板文件,显示如何使用向导指令。

ReadMe.txt

模板文件,包含自定义向导所创建的每个文件的摘要。

Images(可选)

可以提供任何图像(如图标、GIFBMP  HTML 支持的其他图像格式)增强向导的 UI。没有 UI 的向导不需要图像。

Styles.css(可选)

定义 UI 样式的文件。如果向导没有用户界面,则自定义向导不创建 .css 文件。

 

打开ToolkitPro 的文件夹Utils\AppWizard\vc80\vcProjects会发现有三个向导配置文件。

XTPAppWizard.ico

XTPAppWizard.vsdir

XTPAppWizard.vsz

  这三个文件在运行Deploy.exe 的时候,会被复制到VS路径的VC\vcprojects文件夹下。

  vcWizards\ XTPAppWizard文件夹下是Toolkit Pro的模板文件,包括向导界面的Html文件、工程模板(.h啦,.cpp啦等 等),在该文件夹下你可以找到与上表对应的所有文件。细心的你会发现该文件夹下及html scriptstemplates三个文件夹下都有“1033”的文件夹,这是美国英语的LCID,那么简体中文的LCID为“2052”,所以要汉化 Toolkit Pro就先把所有的“1033”复制一份后改文件夹名为“2052”,这样向导便有了“简体中文”语言选择了。

 

复制的做法是为了保留原来美国英语,你若需要创建E文程序,在上图界面中选英语就可以了。

Toolkit Pro应用程序向导变成中文

知道了模板文件的结构和组成,实现汉化已经不难了,打开html文件夹下的文件,该文件夹下全是.html格式的文件,是为向导界面所准备的文件,将其全部汉化便完成了向导的汉化工作。在此笔者告诉大家一点诀窍,因为Toolkit Pro应用程序向导与MFC应用程序向导极其相似,所以完全可以将其两者对照着进行汉化,工具使用Ultra Compare进行文件比较,这样比较方便,但有一点要注意,Toolkit ProMFC多那么一个页面,所以要小心其标识的不同,不能整行的完全替换。比如:

 

<SPAN CLASS="ACTIVELINK" ID="XTToolkitPro" TITLE="Specify Xtreme Toolkit Pro General Settings" onClick="onClick(this);" TABINDEX="7">Toolkit Pro Features</SPAN>

其中的

TABINDEX="7"关系到向导面页面跳转的逻辑,因此不能被改动了。

其实只要把TITLE=""内的文字和<SPAN></SPAN>之间的文字汉化就够了。前者是tooltip后者是显示文字,这点了解html的朋友都知道。
 

再次需要修改工程向导文件AppType.htm,搜索PopulateLanguages(),修改内容:

 

 

//var strInstalledLangs = window.external.GetInstalledLangs();
 var strInstalledLangs = "1033"

替换为:

var strInstalledLangs = window.external.GetInstalledLangs();
 
//var strInstalledLangs = "1033"

 

其目的是为了让向导在生成工程过程中调用相应的言语模板,即templates下的对应文件夹。

最后修改文件frame.cpp,替换_T("Menu Bar")_T("菜单栏"),替换_T("Standard")_T("标准")。这样这两个菜单的标题才会是中文。不过更好的方法是直接在模板的资源文件中定义两个STRING TABLE资源ID,用加载资源的方法载入:

CString toolname ;
VERIFY(toolname.LoadString(IDS_TOOLBAR_STAND));

至此,向导的汉化就算完成了。

Toolkit Pro应用程序向导生成的应用程序带中文资源

最后一步,我们要让Toolkit Pro应用程序的资源完全是中文的。打开templates2052文件夹(请先将1033文件夹复制并改名为2052),文件夹中有三个.rc文件,汉化这三个文件即可。分别打开这三个文件,你会发现其中除了该有的资源代码外,还有些像程序流程语句一样的标识,如:[!if DOCVIEW && !APP_TYPE_DLG] [!endif]。 这些是生成向导的指令语言,对应的标识符为向导控件的符号,代表了该标识是否在向导中被你使用或者说被你选中。

有关这些命令的详细说明,不在本文的讲解范围内,有兴趣的朋友可以参考msdn上有关如何创建自定义工程模板的资料,笔者也有兴趣做这方面深入的探索,待有结果后,再会系统的写出有关如何创建自定义工程模板的简易教程,供大家参考交流。

汉化的方法很简单,用UltraEdit打开MFC下的相同文件,这回是采用替换的方法,因为资源中有很多地方是一样的。我们只要替换文字就OK了。MFC的文件中没有的文字,自己做个翻译也不是难事。同时,采用替换是因为可能不只一个地方有这段文字。另一个原因就是MFCToolkit Pro的资源文件中,象[!if DOCVIEW && !APP_TYPE_DLG][!endif]的指令结构已经有了很大的不同,所以替换文字更为安全并且快捷。

最后的说明

至此,我们已经对XtremeToolkitPro作了全部汉化,只差最后一步了,呵呵。那么是什么呢,当然是运行Deploy.exe了。在此再教大家一招,在安装XtremeToolkitPro时运行到Deploy向导时直接退出,然后将汉化好的文件复制到XtremeToolkitPro相应目录下后,再次运行Deploy.exe,那么所有的汉化文件,都会被Deploy.exe复制到Visual Studio的相应目录下。接下来就感受下一切尽是中文的畅快感觉吧!!!呵~~呵呵~

PS:由于笔者在汉化时,并未了解到相关Visual Studio自定义模板的知识,因此花费了一个白天和一个晚上的时间。——中午也没忙得休息,佩服下自己,呵呵。——另外,在笔者的资源下载中有已经汉化好的文件包,但包中的deploy是手动复制到Visual Studio目录的方式完成的,并不像上述文章中所讲方法,大家可以按包里的汉化说明完成deploy,也可以按本文中所述方法完成,由大家喜好!!

最后欢迎大家就XtremeToolkitPro的问题与我交流,包括文章有说的不对的地方也希望得到大家的指证。

 

作者:张楠

网名:Summerheart

EmailCostware@163.com

Blog http://summerheart.cnblogs.com/

       http://blog.csdn.net/SummerHeart

汉化包:http://download.csdn.net/source/424857

注:(2008.06.14) v12.0.0版汉化已经出:http://download.csdn.net/source/496344
注:(2009.12.2) v13.2.1版汉化已经出:
http://download.csdn.net/source/1873993
日期:200856

posted @ 2010-11-29 16:43  Kane_BJ  阅读(560)  评论(0编辑  收藏  举报