使用 CXA 遇到的問題及特別功能

(黃權燊)

 


1) 不能找到有用的英文字串
2) 翻譯出來的程式不能執行
3) 翻譯出來的程式在執行中突然停止
4) 出現了不正確的符號而不是文字

 


1) 不能找到有用的英文字串
a.    因為 CXA 是使用找尋ascii英文字母的方法去找字串, 所以如果用於非英文(或美式英文)的程式, 就會找不到英文字串, 如果您一定要翻譯這些程式, 請您使用 ckit, 或最好是使用 execope .

b.    程式經過壓縮, 這種程式, 您一定要先把它解壓縮. 要知道某個程式是否經過壓縮, 最簡單的方法, 是用ascii模式找出字串檔案一次, 如果您在內找到 .htmack 這幾個字的單獨字句, 這就是說, 它是被 aspack 壓縮了, 如果有UPX的字串短句, 就是用UPX壓縮了, 總之壓縮的方法頗多. 現在還沒有完全能解aspack壓縮的方法, 但市面上有多種解aspack的程式, 一般都叫unaspack的, 都可以解壓一或多種版本的aspack. 本人推介是gb網站的漢化新世紀的收錄程式 unaspack1090.zip. 它能解壓縮大部份的aspack, 但不一定能正常執行, 您一定要先測試. 至於其他的解壓縮, PDump32.zip是一個好幫手.

2) 翻譯出來的程式不能執行
    原因很多, 最主要有以下幾點.
a.     有一些未分割好的字串, 因為直接翻譯了, 原來是代表跳越的字串被更改了, 就不能執行.

b.     把副程式的名稱翻譯了, 在unicode模式下,  脫瞉的指令最易搞錯. 在ascii模式下, 極容易有這種事, 由於都是由ascii字串組成, 副程式的名稱和所顯示的文字很難分辨, 所以很多翻譯家都視此為一挑戰. 要確保副程式的名稱不被刪改, 程式才能執行. 還有其他的不明原因, 總之在測試時, 發現不能正常執行, 就要不譯, 或刪去. 在ascii模式, 要翻譯的句幾前, 如果不是要翻譯的, 最好是保留不譯而非刪去. 這一點在翻譯delphi 或c++ builder時最為重要.?/font>

c.     程式保護的原因. 有一些程式是加上不許修改的程式, 一般是不准修改作者名稱, 試用版等等的字句. 亦有一些是因為中文字字母比較大, 整句文字就會超出文字方塊的範圍, 程式會以為出錯而自動停止. 如果遇到這個問題, 最容易的方法是把中文字串的字數減少, 要減多少, 要試過才能確定. 一般來說, 保留中文字串長度, 是英文字串長度的一半.

3) 翻譯出來的程式在執行中突然停止
   原因和第(2)段一樣, 只是叫用的副程式在執行中才開始載入.最常發生的情況是開啟或儲存對話盒的檔案選擇filter, 例如 all(*.*)|*.*, 在分割成兩句之後, 有時 all(*.*)這一句都不能翻譯.

4) 出現了不正確的符號而不是文字
    在ascii模式中, 用錯了不相同的字型編碼的翻譯檔, 或在unicode模式中, 用錯了內碼檔, 都會出現錯碼, 但在unicode模式, 有時也會出現一些不明的字串而非用錯了內碼檔. 原因是32bits模式中有unicode及non-unicode兩個模式, 這個時候, 請您在出碼句幾的行號列中, 在#之後加上! 以作識別, cxa 就會正確翻譯它. 這類情況, 在 winzip 最為常見.

CXA的特別功能

1. 填補
2. 快速鍵
3. #/----
4. #!----

(1)填補
完全用vb, delphi, c++ builder開發的程式是可以選用填補0x00或0x20.
但由於大部份的可執行程式都是用vc編寫或編寫了部份組件, 而這類程式是不能選用填補0x00,
只能選用填補0x20. 所以CXA預設為填補0x20.

以下圖片是winxfiles, 選用填補0x20及保留快速鍵.
xfile2.jpg

以下圖片是選用填補0x00及不保留快速鍵. 您是否覺得很美觀大方?
xfile1.jpg

 



(2) 快速鍵
在ascii模式, 中文字佔兩個字串, 英文字母佔一個字串.
在unicode模式, 中文字和英文字母同樣是佔兩個字串.
因此在ascii模式中, 快速鍵常常沒有足夠位置安放.
要增加字串的長度而又要保持程式的正常運作, 只可以使用execsope等資源重組的工具. 一個字一個字去修改. 鑒於中文和英文快速鍵的文字意義並無相關.
如果不保留快速鍵, 能用的位置就多了一個, 而要放入的文字更少了四個, 難題就能輕易解決.
但由於要保持原作者的意念, 所以CXA預設為保留快速鍵.

請三閱上面的winxfiles及下面的irfan_view的圖片.

 



(3) #/------
在不能選用填補0x00的程式, 一般來說, hint 都是可以選用0x00填補.
這些單行及個別行列的改變, 只要在行數列#之後加上/, 即是 #/--------
另外還有一些button, menu都可能適合, 但要試過才能確定是否可用.

以下圖片是iview, 選用填補0x20, 保留快速鍵.
iview1.jpg

以下圖片是選用填補0x20, 不保留快速鍵, 及在hint加上/號, 提示後面的空白處減去了.
iview2.jpg

 



(4) #!------
在unicode模式下也會見到亂碼, 這是非unicode的編碼.
只要在行數列#之後加上!, 即是 #!--------

以下是winzip未加上!, 請注意第425行已加上了!號.
winzip2.jpg

以下是所有出現亂碼的行列都加上!號. 沒有亂碼, 是最基本的要求.
winzip1.jpg

 



回教學