Make your own free website on Tripod.com

VB類程式中文化
         --IcoFolder3.0中文化之實驗報告

何知宇


    其實本不該我來寫這篇文章,像梁利鋒偉乾WeiPing阿濤他們都寫過VB中文化的文章,我也是看他們幾位的文章才逐漸掌握了一點皮毛,尤其是梁利鋒weiping基本上是在網路上「手把手」地幫我解決了一些很關鍵的問題,在這裡,非常感謝上述幾點陣圖我的幫助,現在將我的一些體會和心得寫出來,由於本人水平實在有限,對於編程基本一無所知,在很多地方難免出秕漏,錯誤之處在所難免,還望各位高手不吝賜教。
    由於VB程式的特殊性,很長時間VB的中文化一直困擾著中文化作者,使用傳統的中文化工具要麼是找不到資源,要麼是用十六進制編輯器中文化時,不僅工作量奇大,容易出錯,最常見的是很可能會造成程式的某局部功能喪失。前一段時間,梁兄利鋒寫了好幾篇  關於VB中文化及VB字型字號修改的文章,從編程的角度上加以分析,並開發了字串替換器,為廣大中文化作者中文化VB類程式提供了嶄新的思路及方法。
    今天我們要舉的例子是IcoFolder 3.00,是一個改變文件夾圖示、可挖掘exe,dll等文件內部圖示的工具,先來看看它的主要界面。
    下面的兩幅圖就是該程式的主要界面,好,現在開始中文化,我使用的工具是梁利鋒開發的字串替換器,現在最新版本是0.93,不僅在擷取VB字串,在ASCII字串的擷取方面也是威力強大,與該工具功能類似的另一強力工具是由香港黃權燊先生編寫的CXA 10.2,我這裡主要介紹字串替換器, (因為我用的比較熟,嘿嘿) 。

圖1

    程式還有一個關於界面及一個幫助界面,有兩個輔助用法,一個是調用sysinfo32.exe,顯示系統信息,另一個顯示Windows 版本信息,說這些的原因,是因為我在最初中文化的時候因為過渡中文化或中文化方法不當,而造成部分功能不能調用甚至喪失,大家一定要注意喲,小心變成一個「庸醫」喲。
    好了,現在開啟字串替換器,界面如下:

圖2

    首先確認程式功能處於尋找VB字串項內,然後通過瀏覽鍵選定程式文件名,就是VB主程 ! coFolder.exe啦,程式會自動生成對照文件名IcoFolder.exe.txt,如圖設定為尋找「英文與符號」,點擊「尋找字串」進行尋找。

圖3

    尋找完畢,點擊確定鍵後,程式將自動進入編輯界面 (如下圖) 。

圖4

    此時我的習慣是將對照文件分割為字典文件,編輯完後再寫入對照文件,所以我的操作如下: 點擊「編輯」選單欄內的「分割對照文件」,選擇「偏移量方式」,點擊分割對照文件,將對照文件分割成字典文件 (這種提法我也不知是否恰當,暫且這樣稱呼您 ^O^)

圖5

    分割完成,將字串替換器最小化在任務欄內,開啟程式目錄內的 IcoFolder.exe.txt.dic字典文件,開始翻譯,這大家都應該知道了,奇數行不能動,偶數行需翻譯,注意翻譯後的字符個數不要超過奇數純文字的長度,若有必須超出的,先不要翻譯,留在後面解決。在這裡,我想再多說幾句,針對該程式在此時翻譯時,要注意某些字符不能譯,譯後會有問題出現,比如下圖左顯示的「PATH」不能譯,譯後會導致系統信息調用功能的喪失;「ICONFILE=」也不能自作聰明的譯為「圖示文件=」,我在測試時當初沒有發現,從表面上程式都很正常,到了才發現文件夾圖示不能更換了,後來是WeiPing兄幫我找到了原因 (多謝 ! ) 只好返工,很痛苦。
    那位說了,您太笨了,那是大寫,不能翻譯的 ! 嘿嘿,您說的也不全對,如下圖右的「exit」也不能譯為「退出」,否則您的文件夾圖示同樣不能更換 ! 這是因為該程式在更換文件夾圖示時過程中生成了一個bat文件,exit是bat文件的最後一行,DOS能認得「退出」嗎 ? 嘿嘿。
    說這麼多的原因,還是希望大家在中文化一個軟體之前,應盡可能先要用好它,看看它的功能是如何實現的,最關鍵的時候修改完一部分,一定要進行多次測試,並不是說程式可以執行就萬事大吉了,要所有的功能都要能夠正常使用,才好進入下一步,要不然...,那位又說了,我所中文化的程式很大,功能也很多,無法一一測試,該怎麼辦 ? 發給我好了,我幫您測試呀 ! (您說這可能嗎 ? ) ,或者找個比較簡單的軟體開始中文化,像我就專找「軟柿幾」捏,哈哈。
    大塊頭的軟體要一個人中文化確實難度很大,最近我看到在有些中文化論壇裡中文化作者WISE正在招人準備集體中文化3D max,對人選的甄別及中文化過程的準備等方面考慮得很周到,我認為這種方法很好,這是對付大塊頭的一條必由之路,不是說「眾人拾菜火焰高」嘛。希望他們能夠合作成功,讓那些辦MAX學習班騙錢的傢伙們見鬼去您 !
    咦,好像扯遠了,對不起,繼續我們的翻譯工作,一切做好了,我們進入下一步,根據字典文件進行對照文件的翻譯,這一步就不用您絞盡腦汁了,交給字串替換器去幹您。

圖6

    啟動剛才在任務欄待命的字串替換器,點擊「編輯」選單欄內的「翻譯新版本」選項,則進入如圖界面,點擊瀏覽鍵盤選定字典文件,也就是您剛才費了九牛二虎之力翻譯的那個文件,再點擊「翻譯新版本」。

圖7

瞧下圖,這時,程式已根據您的字典文件生成了翻譯好的對照文件。

圖8

    下一步,我們將利用譯好的對照純文字進行字串替換,以寫入程式,注意替換方式應設為VB字串,否則..哼哼,程式有問題可別怨我: ) ,點擊替換字串按鈕進行替換。

圖9

    字串替換成功後,將會出現提示,源文件被保存為bak文件,好了,開啟您的exe文件,執行測試去您,看看功能是否完整,看看VB替換了哪能些字串,如果有問題,請仔細分析一下,可利用分批匯入的功能找出那些字符不能中文化,常做備份是個好習慣,可以降低您的工作量喲。

圖10

    那位又說了,程式完全正常,怎麼還有這麼多的英文字符啊 ? 字型也不對頭呀 ? 先說說那些沒有中文化的字符就是ASCII字符,我們下一步就來說說ASCII字符的中文化,其實關於ASCII碼的中文化也不應該讓我寫,前幾天偉乾的三篇關於ASCII碼字串的中文化就給我上了極其生動的一課,受益非淺,豁然開朗。建議同志們都去讀讀,我的這篇三腳貓不讀也罷。: )
    好了,大家都回來了,讀了偉乾的文章嗎 ? 再去讀讀Weiping關於中文化Vopt99的文章,還有梁利鋒的幾篇VB字型字號的文章。
    噢,都讀完了,太好了。這下我可省事了 (竊笑狀) 。
    關於ASCII字符的擷取我們仍採用字串替換器,和前面講的方法及例圖類似,需要注意的是,這次擷取的不是VB字串,而是ASCII字串,如下圖所示,選擇「尋找ASCII字串」選項。

圖11

    ASCII字串尋找界面如下,瀏覽選中程式文件,生成相應的對照文件名,IcoFolder.exe.a.txt,注意,那個a就是表示ASCII字符,預設選項最短為4,最長256。點擊「尋找ASCII」即可。

圖12

    ASCII字串尋找完畢,還是用老辦法,先把它生成為字典文件,點擊「編輯」選單內的「分割對照文件」,選擇「偏移量方式」,點擊「分割對照文件」按鈕,生成字典文件,如圖所示。

圖13

    ASCII字串分割完畢後,下一步就又該您自己干了,字典文件的翻譯又開始了。等等,我又要開始囉嗦了,大家可能會在這個字典文件裡發現有些字符長度不足,無法完美中文化,比如圖1右圖的選單,&File,&Open, E&xit,大家如果閱讀了上面我提到的幾篇文章,應該很清楚解決辦法了您 ? 是的,只要我們保持同一窗體內字符串總長度相等,就可以實現完美中文化。就拿圖1舉例來說,我們在純文字編輯器裡將長度不足的字符串排列為一行,將譯後的排為一行,長度不夠,就去看看同一窗體有那些字符可以拿來一用,經挑選比較結果如下圖所示,兩行字符長度相等,我們借用了本窗體中的字符串 Icon Selected:及IcoFolder Search,所以在翻譯字典文件時,這些字符我就沒有翻譯 (包括那兩個「借來的」字符串) ,準備放在最後再調整。

圖14

    在這個程式的其它部分也有類似情況,如在Windows版本信息窗內有一個&Close,在關於對話窗內還有一個&OK,處理方法如上,我就不多說了,需要注意的是「借用的」字串必需來自於同一窗體。有些可能和控件有關,也就是說,不一定是同一窗體的字串拿來就可以用的,因我做的VB中文化還很少,所以不太清楚是否具有普遍性,朋友們可以多試試,有新發現別忘了告訴我喲 ! 另外由於我們設定最長的字符串為256,所以超長的字串擷取可能不完整,比如關於窗內的警告信息及說明視窗內的說明內容等,在這裡也可暫不翻譯,留到最後再處理,很輕鬆的。
    翻譯ASCII字典的工作終於完成了,好了我們可以利用字串替換器的「翻譯新版本」和「替換字串」功能進行ASCII字串的替換工作了,其方法與替換VB字串的過程相似,注意在選擇字典文件和替換方式時注意一下就可以了,這裡就不重複了。
    那位又說了,嗯,測試了,功能都完整,可是字型很難看,有些還是英文字型。好,我們再來尋找替換一下unicode字符您。啟動字串替換器,如下圖,選擇尋找UniCode選項進行尋找。

圖15

尋找結束後,可採用上述針對VB字串及ASCII字串的翻譯編輯及替換方法進行,不再重複。替換結束後,如圖所示。

圖16

    這裡必須強調一下,字型因為我們目前還未修正,所以確實很難看,回顧我們剛才在翻譯替換Unicode字串時,在字典文件裡翻譯的「瀏覽」及「應用圖示」變成了如圖16左所示的狀況,這是我們不想看到的。並且仍然有英文字符出現,造成這種狀況的原因是由於我們只修改了字串的內容,而並未對字串長度進行修改造成的。所以從這個例子來看,用字串替換器替換VB程式中的unicode字串不太理想, (也可能是我不大會用,請高手指正。)
    我的經驗是像這種界面外觀上很明顯也很重要的unicode字串,在翻譯字典文件時可暫不翻譯,留到下一步用十六進制編輯器進行修正,推薦ChinEase兄中文化的 Hex-workshop來繼續修訂。假設此時我們已恢復至ASCII字符替換狀態,並且已進行了unicode字串的替換,但保留了「Browse」及「Apply Icon」為英文狀態。 (看出常做備份的好處了您,另提示一下,尋找不同類型字串前,以前的字典文件應該換名保存,以便隨時返工) ,嘿嘿,「您才說 ? ! 我都...」,這位兄弟不能怪我喲,我也是個半瓶子瞎晃蕩,都是偉@偉乾要我寫的,要不您們去找他的算賬,他家的地址是..... (話未說完,大宇已被打昏過去...) 。
    開啟Hex-Workshop,讀入exe文件,尋找unicode字符「Browse」,方向向下,界面如圖所示。

圖17

    尋找結果如圖所示,注意高亮顯示部分為查到的unicode字串,在VB程式內,位於字串前與字串以3個00相隔的位置,則是該字串的長度標識符,本例中為06 (十六進制) ,所以我們在修改字符串內容的同時,還需修改字串長度標誌符。

圖18

    使用Hexworkshop的替換功能進行unicode字串的替換修改,冗余部以零填充,因為我們把browse改為「瀏覽」,不要忘了把字串長度值由06改為04 (十六進制) ,如圖所示。

圖19

    我再來舉個例子,比如圖16中的unicode字串,「Search my computer for more icons」,我們在Hexworkshop中查到如圖所示。其中21表示該英文字串的長度。

圖20

    使用Hexworkshop的替換功能進行unicode字串內容的替換修改,冗余部以零填充,因為我們把該字串的改為「搜尋電腦以獲取更多圖示」,所以還需把字串長度值由21改為18 (十六進制) ,就是十進制的24啦,如圖所示。

圖21

    方法就是這樣,依次類推,我們將其餘的字符如「About」、「Close」、「Clear」、「 Save as」依次中文化修改後,主界面如下:

圖22

    大家請注意,此時unicode字符已悉數處理,好多了您 ? 什麼,那位又講了,字型很難看,好的,我們下一步就來修改字型,梁利鋒兄阿濤在這方面很早就有文章出籠,我只是照樣原搬,決無剽竊之意喲 ! 在VB程式內字型字號的修改一般分為兩類,第一類是VB可執行文件中的含有字型框的,我們現在根據例子實際來看一下,用hexworkshop開啟exe文件,尋找Ascii字串「Ms sans serif 」,第一個查到的字串如圖23,圖24高亮顯示的部分表示整個字型框含字型名稱,圖25高亮顯示的為字型框。

圖23

圖24

圖25

    為了實現新細明體,9號,我借用梁兄及濤兄的方法給大家簡要分析一下,圖25高亮顯示的第一個00指的是語系,英文為00,中文為86;第三個00表示普通字型,02表示斜體,04表示下劃線;90 01表示正常字型,BC 02表示粗體,44 42 01表示為8號字,若改為90 5F 01則表示為9號字。好了,我們需要修改的地方就是語系、字型大小,至於後面的字型名稱好像是不用改的。如果您對此還想多瞭解一點,就去看梁兄及濤兄的文章,我若在這裡繼續轉述,那可就真的成了剽竊啦 !
    如我們碰到的這種情況,只需把0000 0090 0144 4201改為8600 0090 0190 5F01即可,若碰到粗體或斜體時,應保持與原程式的一致性。在本程式中,我們還會碰到如 0000 00BC 0244 4201的情況,只需改為 8600 00BC 0290 5F01即可保持粗體顯示。
    大家可自行修改,這裡我就不重複了,將程式內所有的「Ms sans serif」字串前的字節按照上述辦法修改完畢,儲存即可實現該程式含字型框部分的字型修改。順便說一句,有些VB程式調用的有可能是「Arial」或者是其它字型,前幾天Ronnier兄發來一個VB程式,裡面就有什麼verdanaf、tahoma等很少見到的字型,尋找時可使用「0000 0090 01」進行尋找,找到後,往後再看看,就能看到這些怪字型了,然後再利用這些字型尋找修改即可實現字型框的修改。將所有字型框字型修改後,如圖所示。噢,本程式中就有一個tahoma字型,記著修改前面的字型框喲 !

圖26

圖27

    大家可以看到,如圖26,有些字型顯示仍不好,如「目錄名稱」、「圖示路徑」及「瀏覽:」,這些字型的修改不能通過上面的辦法來實現,因為它們沒有字型框可用來修改,所以......,我只好再次引用梁兄的方法來實現字型的修正,〔在「IcoFolder.exe」文件中尋找「VB5!」,找到後,再向後的第三個字節是「*」,十六進制是「2A」,後面是一大串「00」,只要把從這個「*」開始的地方修改「vb5chs.dll」,程式就可以正常顯示「新細明體,9」了。〕,原來這樣就行嗎 ? 答案是肯定的,我們來實際操作一下。我們將查到及修改後分別如下圖所示。

圖28

圖29

    結果如圖27所示,所有的字型都顯示為新細明體9號了,字型修改完成,留給我們下一步的工作就中文化那些長度不足的字串,見圖14,我們只要保持同一窗體的字串總長度與中文化後字串總長度相等就可實現完美中文化,還是以下圖為例,當我們用編輯器進行修改時,字串前用一個00相隔的字符則表示該字串的長度,這個也要一同修改,還是放上兩幾個對照圖您,請大家注意不僅要替換內容,還要根據中文化後字串長度改寫程式中字串長度標識符。

圖30

圖31

圖32

    這是修改後的對照圖,可以是基本實現完美中文化了,對於其它視窗的字串我就不再舉重複了,請大家自行體會。

圖33

    就拿這個程式來講,還有一些較長的ASCII字符尚未中文化,還有一些需要微調,這些都屬於最後的修繕和美化,這裡我就不多說了。我已經聽到有人說這一篇像某某的裹腳布啦,還是就此打住您。嘿嘿。
    因本人涉足中文化日淺,以前也未曾寫過類似的文章,在寫作的過程中,自已也被一些概念所迷惑, (一般情況下我會唔唔帶過) ,如果您認為本文有明顯錯誤及值得商榷之處,那是再正常不過的了,歡迎您到我的首頁留話或者發信給我,本人感謝不盡。再次強調的是,這不是一篇教學文章,只能算是我中文化icofolder的試驗報告您,期待著各位朋友及高手們的指教。順便補充一句,這兩天我在為國慶獻禮製作升級檔的測試中,發現中文化後的程式在NT下不能執行, (原程式可以正常執行) ,這是因為我們在中文化無字型框時調用的vb5chs.dll在NT下無此連結資料庫文件,所以...而98則不存在這種情況,大家只需把98下的vb5chs.dll拷入NT環境下的 winnt/system32目錄下即可,誰叫VB不是咱中國人寫的呢,呵呵。
    在本報告結束之際,特別感激偉乾梁利鋒WeiPing阿濤的教學文章,使我得以初步掌握VB類程式的中文化方法,沒有偉@偉乾的一再督促,可能我也會一再偷懶,不知拖到什麼時候,才會寫這篇試驗報告。



回教學