VB 程式的中文化技術探討
偉乾 & YY (漢化新世紀)
前言:
有人說軟體中文化技術是門專門的電腦技術,我們認為不然,中文化既是一件有益的事情,也是一件有趣的事情。現在流行DIY,玩家玩完硬件DIY之餘,對軟體也開始感興趣了,像桌面修改,系統最佳化等等,這些都屬於軟體DIY範疇,其實軟體中文化也屬於「軟體DIY」的一個部分。「軟體中文化」與「中純文字地化工作」的區別還是很大的,「中純文字地化工作」除了將外文軟體的選單界面、對話框訊息、提示訊息等翻譯成中文,對我們中文化經常忽略的說明文件、軟體的版本、介紹等等純文字文件都翻譯了,連軟體的安裝界面也是中文的,最重要的一點,就是「中純文字地化工作」得到作者的授權。軟體中文化是業餘中文化作者的非盈利工作,限於時間、精力、版權等等條件限制,無法做到「中純文字地化工作」那樣中文化的程度 !
軟體中文化雖然不可以「幾分鐘掌握」的,但只要您對電腦比較熟練,對一般的軟體使用比較瞭解,「幾個小時掌握」還是可能的。軟體中文化從技術上講,不涉及太多的編程技術,您不需要掌握編程的知識 (當然您掌握就更好) 。現在有許多專門的中文化軟體、輔助工具,從這個意義講您只要會使用軟體,您就會中文化。中文化技術是非常簡單的,但中文化作品中文化的完美就不容易了。如果您只是興趣、好玩,拿一二個軟體中文化,自己使用無所謂,但公開給大家使用必須有負責、敬業的精神,除了對中文化翻譯的質量要保證,還要對中文化後的程式進行必要的測試 (有條件在電腦裝多個系統,在不同系統下進行測試) ,對使用者的使用意見、疑問及時回應。
中文化技術簡介
現在的PE程式的格式很多
我們需要中文化資源的格式也有很多種,常見的軟體都是使用Visual C++、Borland
C++和使用Borland的Dephi系列編程系統生成的,要中文化的資源有一些標準的VC類型 (RC類型) 和delphi類型 (RCData類型) , (這裡說的標準其實是中文化作者自己的看法,說他標準就是我們中文化比較方便: -) ) ,還有一些非標準的中文化資源 ASCII 類型、專門的語系文件 (語系包) 等等。中文化資源格式的鑒別辦法,以及對這些類型的化都有比較成熟的方法、專門中文化工具和有大量的中文化文章講解。。
在當前流行的程式設計語系中,VB據說是其中較為易學易用的一門語系,特別是在國內相當流行。可是,VB程式的中文化卻是幾種流行的程式設計語系中難度最大的。目前,基本沒有什麼專門的中文化工具可以方便的實現對這種軟體的中文化。許多朋友紛紛詢問VB的程式能否中文化,我們漢化新世紀成員,一起尋找了一些VB編譯的程式,對程式裡的資源類型進行了研究。發現VB編譯的程式,資源類型很多,有些類似VC的格式,有些類似delphi的rcdata,我們這裡只針對
GoldenBow Vopt99 程式的資源類型,介紹中文化的思路和方法。類似VC格式的資源可以用中文化VC程式的方法中文化,這裡就不涉及了。類似delphi的rcdata的資源類型,中文化的方法與本文介紹中文化
ascii檔案的方法類似。
中文化前的準備
1. FileInfo
偵測文件類型工具
2. Hex
workshop 十六進制編輯工具
3.
exescope 資源查看修改工具
4. 簡體中文-unicode轉換工具
5.
GoldenBow Vopt99 本篇文章的中文化範例軟體
一、軟體類型的判別
要中文化一個軟體,首先必須瞭解該軟體的中文化資源類型,從而根據具體的類型決定使用合適的中文化工具。一般情況下,我們可以利用 ExeScope
查看資源的形式來判斷,通常情況下,使用VC編寫的程式具備標準的對話框、選單、檔案等等;使用Delphi編寫的軟體,一般以資源表單 (RCData) 和檔案的形式出現;而VB程式一般而言是看不到任何資源的。以上判斷方法僅是一種經驗之談,實際上,我們可以利用
FileInfo 這個軟體更準確的判斷軟體的類型。該軟體的使用相當簡單,只需要在 MS-DOS 提示符下鍵入命令:
FI 要檢測的文件名
FileInfo 就能夠報告出該文件的類型。實際上,FileInfo
經常用於判斷加殼文件的殼的類型。用偵測文件類型工具 FileInfo v2.30證實GoldenBow Vopt99是VB 5.0 編譯的。
我們先運行execscope, 看看程式的資源情況。如圖
可以看到Vopt99 主程式中沒有我們通常看到的選單、對話框、檔案、rcdata等這些標準資源。
二、VB中資源的類型
由於目前幾乎沒有什麼中文化工具能夠有效的找出 這個
VB程式的資源,所以幾乎在任何工具中都看不到類似VC或Delphi 的資源形式。經過對這個 VB
程式可中文化資源的摸索,在實際應用當中,我們可以把VB軟體所包含的可中文化資源分為 ASCII 檔案和 UniCode 檔案兩類。其中,ASCII
檔案主要出現在軟體的選單和部分對話框,其在程式中的作用類似VC中選單、對話框的資源文字。而 UniCode
檔案主要體現在程式對話框中的一些特定檔案和出錯提示,其在程式中的作用類似VC程式當中的 ASCII
檔案。
實際上,VB程式中的 ASCII 檔案嚴格來說與VC中的 ASCII
還存在一定的區別,我們只是從目前能夠搜尋此類檔案的方法與搜尋VC中的檔案的方法一致而把它分類為 ASCII
檔案,其中文化方法在下文中將詳細講解。
VB程式中存在大量的
UniCode 檔案,而許多中文化工具 (例如中文工具箱、RRC等) 都無法正確的搜尋出這類檔案,也沒有適合簡體中文的中文化工具可以使用。在研究中,我們發現 CXA 和 BinText 都可以抓這種 unicode
檔案。可惜 CXA是BIG5軟體的,把代碼都轉換成BIG5的了,無法簡體翻譯 (聽說作者正在加入簡體翻譯的功能) 。而 BinText 沒有批量寫入功能,對付這種 unicode
檔案,只能要靠手動中文化,比較麻煩。下面我們分別就這兩種資源類型,詳細介紹中文化的方法。
三、VB程式的中文化
VB程式的資源一般分為兩類,下面就結合 Vopt 99 4.15 的中文化講解VB程式的中文化方式。
(一) 、ascii 檔案
1.一般中文化
在
Vopt99程式中,主要的資源都是以這種形式存在。這些ascii 檔案的格式與
C語系類、pascal類的ascii檔案都有不同。我們先看圖。
XXX的事
ascii檔案的格式是這樣的 **aa00cc00其中**是不同的控件類型,aa 表示檔案的16進制長度,cc代表檔案,從00開始,到00結束。上面的圖,數字1 表示控件類型,數字 2 表示檔案的16進制長度是 07,.數字 4 表示選單資源項的檔案。瞭解了ascii 的格式,我們可以用中文工具箱批量中文化,也可以用 utraedi 手工一個一個中文化。中文化不足部分用00補足,修改表示檔案長度的代碼 (也可以不修改,具體要看程式運行的實際情況) 。(如圖)
2.ascii
檔案加字問題
上面中文化ascii的方法與vc,delphi沒有不同,如何處理中文化後位元組變長的問題,就與vc,delphi相差很大。
我們發現只要保持每個選單項的檔案總數不變,檔案的長度可以互相調整。
我們首先中文化defrag選單項,我們只要保持這個選單項的檔案綜合不超過中文化前的檔案總數,就可以中文化成功
A. 我們把defrag選單項的所有檔案都放在一起,把中文化的檔案放在下一行。排列好首先保證中文化後的檔案數不超過原英文的檔案總數。
&Defrag&Defragment diskDefrag &All
disksE&xit
整理(&D)整理磁碟(&D)整理所有磁碟(&A)退出(&X)
B.我們看中文化的檔案整理(&D)比英文檔案&Defrag多一個檔案,因此,我們需要把後面的內容依次挪後一個檔案。我們從檔案後面的00開始一直選擇到下一個檔案前面的00,複製,然後挪後一個檔案貼上。
C.現在&Defrag多一個位元組的空間,足夠讓我們中文化了。手工輸入整理(&D),現在的檔案的位元組數為 08,把原來的位元組數 07 修改為 08 ;
D. 我們這裡的檔案數增加了一個位元組,後面的位元組數就少了一個位元組,我們把 後面的位元組數 10 改為 0F。 儲存文件。下面是修改後的圖
我們看看中文化前後的對照。
重複A、B、C、D的步驟,我們可以做出完美的選單中文化了。不過大家要注意我們看後面中文化的檔案比英文檔案多 (或少) 的位元組數,要累加前面的檔案多出或少的檔案位元組長度。再決定從檔案後面的00開始一直選擇到下一個檔案前面的00的檔案挪後或移前的位元組數。
比如第二個要中文化的檔案整理磁碟(&D)比英文檔案&Defragment disk少 4個位元組,累計前面中文化檔案多出的 1 個位元組數,現在中文化的檔案比英文檔案少 3 個位元組,所以把英文檔案&Defragment disk從檔案後面的00開始一直選擇到下一個檔案前面的00的檔案移前 3 個位元組。
如果您不想每中文化一個檔案都檢查一次,程式是否正常,D
步驟可以省略。看看現在選單看起來比沒有加檔案處理的順眼多了您。對這軟體的對話框的檔案中文化也可以用這種方法進行處理,這裡就不多說了。
3.ascii
檔案加字的實際操作
在上文中我們講解了有關 ascii
檔案加字的基本原理和方法,在實際操作中,我們可以用以下方法簡便有關操作。
以Vopt99為例,首先用中文工具箱提取檔案:
----------------------------------------------------------------------------------------------------
&Defrag
整理
&D::36885
#--------------------
&Defragment
disk
整理磁碟碎片(&D)::36921
#--------------------
Defrag &All
disks
整理全部磁碟(&A) ::36967
#--------------------
E&xit
退出
::37028
#--------------------
&Disk
磁碟
::37063
#--------------------
&Preferences
參數設定(&P)::37827
#--------------------
D&isplay...
顯示(&I)...::37877
#--------------------
&Defrag...
整理(&D)..::37942
#--------------------
&AutoDefrag...
自動整理(&A)..::37985
#--------------------
&Schedule...
時間安排(&S)::38032
#--------------------
&Tools
工具&T::38075
#--------------------
&Check
disk
檢查磁碟 &C::38113
#--------------------
Check &All
disks
檢查全部磁碟(&A)::38153
#--------------------
&ScanDisk...
磁碟掃瞄(&S)::38198
#--------------------
&Disk
cleanup...
清理磁碟(&D)... ::38265
#--------------------
Delete
coo&kies...
刪除cookies(&K)...::38315
#--------------------
&Delete
&Temporary files...
刪除臨時文件(&D)...
::38365
#--------------------
&HexExplorer
16進制察看
::38440
#--------------------
&Help
說明
::38482
#--------------------
&Topics
主題
&T::38516
#--------------------
&About Vopt99
關於 Vopt99
::38544
------------------------------------------------------------------------------------------------------------------------
然後將所有英文檔案排列成一行,再把中文化後的檔案按順序排列:
------------------------------------------------------------------------------------------------------------------------
&Defrag&Defragment
diskDefrag &All
disksE&xit&Disk&PreferencesD&isplay...&Defrag...&AutoDefrag...&Schedule...&Tools&Check
diskCheck &All disks&ScanDisk...&Disk cleanup...Delete
coo&kies...&Delete &Temporary
files...&HexExplorer&Help&Topics&About
Vopt99
整理(&D)整理磁碟碎片(&D)整理全部磁碟(&A)退出(&X)磁碟(&D)參數設定(&P)顯示(&I)...整理(&D)...自動整理(&A)...時間安排(&S)...工具(&T)檢查磁碟(&C)檢查全部磁碟(&A)磁碟掃瞄(&S)...清理磁碟(&D)...刪除cookies(&K)...刪除臨時文件(&D)...16進制察看(&H)說明(&H)主題(&T)關於
Vopt99(&A)
------------------------------------------------------------------------------------------------------------------------
接著再把中文檔案進行調整,使總長度與英文檔案長度一致:
------------------------------------------------------------------------------------------------------------------------
&Defrag&Defragment diskDefrag &All
disksE&xit&Disk&PreferencesD&isplay...&Defrag...&AutoDefrag...&Schedule...&Tools&Check
diskCheck &All disks&ScanDisk...&Disk cleanup...Delete
coo&kies...&Delete &Temporary
files...&HexExplorer&Help&Topics&About
Vopt99
整理(&D)整理磁碟碎片(&D)整理全部磁碟(&A)退出(&X)磁碟(&D)參數設定(&P)顯示(&I)..整理(&D).自動整理(&A).時間安排(&S).工具(&T)檢查磁碟(&C)檢查全部磁碟(&A)磁碟掃瞄(&S).清理磁碟(&D).刪除cookies(&K).刪除臨時文件(&D).16進制察看(&H)說明(&H)主題(&T)關於
Vopt99(&A)
------------------------------------------------------------------------------------------------------------------------
最後把調整後的檔案排列成以下方式:
------------------------------------------------------------------------------------------------------------------------
&Defrag
整理(&D)
#--------------------
&Defragment
disk
整理磁碟碎片(&D)
#--------------------
Defrag &All
disks
整理全部磁碟(&A)
#--------------------
E&xit
退出(&X)
#--------------------
&Disk
磁碟(&D)
#--------------------
&Preferences
參數設定(&P)
#--------------------
D&isplay...
顯示(&I).
#--------------------
&Defrag...
整理(&D).
#--------------------
&AutoDefrag...
自動整理(&A).
#--------------------
&Schedule...
時間安排(&S).
#--------------------
&Tools
工具(&T)
#--------------------
&Check
disk
檢查磁碟(&C)
#--------------------
Check &All
disks
檢查全部磁碟(&A)
#--------------------
&ScanDisk...
磁碟掃瞄(&S).
#--------------------
&Disk
cleanup...
清理磁碟(&D).
#--------------------
Delete
coo&kies...
刪除cookies(&K).
#--------------------
&Delete
&Temporary
files...
刪除臨時文件(&D).
#--------------------
&HexExplorer
16進制察看(&H)
#--------------------
&Help
說明(&H)
#--------------------
&Topics
主題(&T)
#--------------------
&About
Vopt99
關於Vopt99(&A)
------------------------------------------------------------------------------------------------------------------------
然後用搜尋、貼上的方式,搜尋英文檔案,再把相應中文檔案貼上並替換搜尋到的英文檔案,同時修改原英文檔案前面的檔案長度。
這種方式實際上也是很笨的方法,唯一的優點可能就是能夠保證修改後的總檔案數目保持不變。
至於對話框中的文字調整,方法一致,需要注意的是必須是同一個對話框中的檔案進行調整,具體修改方式就不說了。
在嘗試修改中文化另一個軟體 MultiFormat Editor 碰到的問題主要是:
該軟體的選單部分並不是固定不變的,當開啟的文件類型不同時,相應的選單項也不同,其中有一些是共同部分,但是各自又有自己的特殊選單項目,修改的時候必須根據實際選單項,把共同部分進行調整,保持共同部分的檔案數目不變。然後再根據各自特殊的選單項目進行調整。由於這些選單項目位置看起來是在同一個表單中,所以這種修改是非常麻煩的,很容易出錯。目前我也找不到很好的方法進行判斷,只能靠經驗判斷。
還有,在中文化過程中發現,針對級連選單 (子選單) 也必須獨立中文化,保持總檔案數目不變。
我認為,關於VB的中文化,目前我們能進行的只是很基本的中文化,很多問題還必須靠手動完成,而由於有這種檔案數的限制,要開發出類似VL或L&L的工具相對比較難。
(二) 、unicode 檔案
我們現在看看unicode檔案,Files and folders = 這檔案就是unicode 檔案
我們研究發現,這種unicode 檔案的前面一樣有個表示檔案位元組長度的檔案,他一般在unicode 檔案的前面,中間用000000間隔,看上面的圖,Files and folders = 檔案長度有28 個位元組數。注意這是unicode檔案,英文字母的unicode 的格式是 字母00,統計位元組數的時候不要忘記最後的00這個位元組。
這裡我摘錄一段網友點睛工作室梁利鋒對VB的UniCode
檔案特性的介紹,大家有興趣可以看看全文《VB 與 UniCode
補遺》 | |||||||||||||||||||||||||||||||||||||
VB 中的檔案是 UniCode 格式的,所以一個英文的 VB
檔案「String」在內存中 (編譯後) 應該是這樣的:
其中紅底黃字是表示此檔案長度的長整數;緊跟著的是 UniCode
檔案;最後的黃底紅字是結尾檔案。
從 VB 檔案的格式我們可以知道,取得 VB 檔案的長度不需要檢索整個檔案,只需要取得開頭的長整數就可以了:
|
我們使用公僕先生的gb-unicode碼轉換工具,在要轉換的中文欄中輸入中文化的檔案,按一下轉換按鈕。在對應的unicode 欄中出現中文化檔案的相應的unicode碼。
把unicode 檔案輸入到到相應的位置。後面的多出的位元組一律輸入 00。修改檔案長度的位元組數 28 為 12,存檔。
看看,變成漢字了您。
用這種方法,您可以將剩下的 unicdode 檔案一一中文化。就是累了點 ! 我們希望有類似中文工具箱的專用中文化工具早日出現。
★★在整理這篇文章準備在漢化新世紀站點發表時,發現好友梁利鋒作了 VB 可執行文件中 UniCode 的檔案替換工具,主要對 VB 編譯的可執行文件進行檔案替換的工作,用以輔助中文化 VB 編寫的程式。效果還不錯,大家可以試試 !
(三) 結束語
VB編譯的程式,資源的形式還有很多,我們這裡只針對 vopt99
程式中出現的這兩種資源類型,探討中文化的方法。如果您碰到的VB的程式資源跟我們這裡說的不一樣,請您告訴我們。如果大家對中文化有興趣,歡迎來信與我們探討。
本文只涉及VB程式的中文化,如果您想瞭解更多的中文化方法,請到 漢化新世紀
站點 (hanzify.yeah.net) 。漢化新世紀是由多位自由中文化作者聯合成立的一個非商業性質的自由合作站點,以推動我國電腦使用的普及為己任,為我中華電腦事業盡一份綿薄之力,希望通過我們的世紀站點,能為更多的朋友學習電腦,使用電腦提供方便之門。同時,也為所有有志於軟體中文化的自由中文化作者提供一個交流、學習的場地。站內收集了最新、最全的中文化升級、中文化工具和中文化教學文章。
Email:hanzify@21cn.com
URL
:hanzify.yeah.net