现在的位置: 首页 > 综合 > 正文

Xtreme.Toolkit.Pro v11.2.1汉化方法

2013年10月29日 ⁄ 综合 ⁄ 共 2303字 ⁄ 字号 评论关闭

环境:Xtreme.Toolkit.Pro v11.2.1+vs2008sp1

在工作中用到了CXTPCommandBars,但是按照默认的,是英文的,这样拿给客户,肯定是不行的,所以需要改成中文。我想着改一下资源文件里面的内容(我理解就是改一下宏)。这样改了以后,发现中文会出现乱码。然后我设想设置一下setlocale,但是,事实证明,我这个拍脑袋的想法行不通。最后,认真查看了资料,发现其实Xtreme本身就提供了多语言的支持,不需要自己改资源文件,已经有现成的资源文件了。

现在,开始我们的汉化。

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

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE 9, 1
#pragma code_page(1252)
#endif //_WIN32
#include "XTToolkitPro.rc"  // non-Microsoft Visual C++ edited resources
#include "afxres.rc"         // Standard components
#endif

  代码中定义包含的文件"XTToolkitPro.rc"  是在Toolkit.Pro的Source文件夹下的,"XTToolkitPro.rc"  文件集中定义的是界面库各种控件的资源文件。

二、打开"XTToolkitPro.rc"文件,我们发现文件开头几行定义说明了一切问题。

#define LANGUAGE_DEFAULT(ProdName) <##ProdName##\res\Resource.rc>

#ifdef _XTP_RESOURCE_LANGUAGE
    #define LANGUAGE_LOCALIZED__(ProdName, LangName) <##ProdName##\res\Resource_##LangName##.rc>
    #define LANGUAGE_LOCALIZED_(ProdName, LangName) LANGUAGE_LOCALIZED__(ProdName, LangName)
    #define LANGUAGE_LOCALIZED(ProdName) LANGUAGE_LOCALIZED_(ProdName, _XTP_RESOURCE_LANGUAGE)
#else
    #define LANGUAGE_LOCALIZED(ProdName) LANGUAGE_DEFAULT(ProdName)
#endif

  #define LANGUAGE_DEFAULT(ProdName) <##ProdName##\res\Resource.rc>      定义了缺省的语言

#ifdef _XTP_RESOURCE_LANGUAGE

    定义的标识_XTP_RESOURCE_LANGUAGE可以看出定义的即是语言的标识。那么只要在程序库中定义该标识就可以使界面库应用相对应的语言资源库了。

三、打开Source文件下每个控件的文件夹下都可以看到许多后缀为.rc的资源文件


由资源文件的名称(Resource_zh_CN.rc),再由定义 

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

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

#define _XTP_RESOURCE_LANGUAGE zh_CN

这个定义我习惯放在XTToolkitPro.rc文件的开头

#include "afxres.h"

#define _XTP_RESOURCE_LANGUAGE zh_CN

#define LANGUAGE_DEFAULT(ProdName) <##ProdName##\res\Resource.rc>

#ifdef _XTP_RESOURCE_LANGUAGE
    #define LANGUAGE_LOCALIZED__(ProdName, LangName) <##ProdName##\res\Resource_##LangName##.rc>
    #define LANGUAGE_LOCALIZED_(ProdName, LangName) LANGUAGE_LOCALIZED__(ProdName, LangName)
    #define LANGUAGE_LOCALIZED(ProdName) LANGUAGE_LOCALIZED_(ProdName, _XTP_RESOURCE_LANGUAGE)
#else
    #define LANGUAGE_LOCALIZED(ProdName) LANGUAGE_DEFAULT(ProdName)
#endif

  当然也可以放在其他地方,只要在#ifdef _XTP_RESOURCE_LANGUAGE之前就好了。

四、在ToolkitPro.rc文件中找到

LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US

修改为

LANGUAGE  LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED

五、重新编译一下,就可以使用了。

注:我的编译后有一个函数使用的时候有点问题,不保证编译后,E文正确的中文也正确。本来想把汉化好的bin和lib分享给大家,无奈文件太大了,还好这个汉化的步骤不复杂,大家应该都可以成功。如果有问题,欢迎大家留言交流

抱歉!评论已关闭.