環境: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分享給大家,無奈檔案太大了,還好這個漢化的步驟不複雜,大家應該都可以成功。如果有問題,歡迎大家留言交流