Make your own free website on Tripod.com


TRANS使用指南

壓縮檔名稱: TRANS001.LZH
程式名稱: TRANS - Translate text for executable file. (Public Domain)
作者: Fox Chen, ! 立德資訊站】6:721/117@fidonet
取得: Leader BBS 6:721/117@fidonet 886-6-239-3556 24Hr


寫作動機:

□.解決中文化問題︰

由於目前中文化問題仍是諸多 User & Sysop 的麻煩, 每當程式一有新版,常常大家又得忙著將訊息中文化與改中文沖碼.

而訊息中文化不僅僅是費神費力的工作, 更缺乏工具可使用, 往往只能用PCTOOLS 一字字的更改. 而當您好不容易等到別人改好的中文化程式, 卻又往往對其之翻譯不甚滿意, 然而卻也沒那種閒功夫慢慢去修改.

另一方面, 對所有 User 來說, 常常得浪費時間與金錢去抓一份原版程式又得再浪費時間去抓一份中文化主程式.

以上這些現象也許是所有中國人的夢靨, 也許您早已習以為常, 然而希望本程式能結束這些浪費金錢、時間與空間的無聊工作.

中文化範例 1 :

    假設我們目前手上有 TELIX 3.12 的中文版主程式, 而現在我們拿到新版    Version 3.15 的程式. 以下說明如何只要 30 秒就可獲得 TELIX 3.15    中文版.

    (1) 先找來一份原版英文 TELIX 3.12 , 然後執行

    DIFFT telix.lst telix.exe ctelix.exe

    則 DIFFT 將會把英文版 Telix 3.12 (telix.exe) 跟 中文版    (ctelix.exe) 比較, 然後造出一個『翻譯對照檔』telix.lst

(2) 此由 DIFFT 自動產生的『翻譯對照檔』telix.lst 格式如下:

    line 1:Press any key to continue ...
    line 2:請按任意鍵繼續, 謝謝 ...
    line 3:"
C50="452
    line 4:"
C50槎E52
....

    其中 line 1 對應 line 2 的翻譯, 故此時您可以用您熟悉的編輯器來編修『翻譯對照檔』, 把一些無用的亂碼除去, 並美化一下字串.

    PS: 此檔不僅可代換翻譯, 亦可改沖碼 (程式), 如上 line 3為 cmp al,0 je +02 改為 line 4: cmp al,0 jmp +02

(3) 修改滿意後, 執行以下命令將新版 Telix 3.15 轉成中文化:

    TRANS telix.lst telix315.exe tel315c.exe

    則 TRANS 將會把英文版 Telix 3.15 (telix315.exe) 依照    『翻譯對照檔』telix.lst 轉換成 中文版 Tel315c.exe

(4) 將 telix.lst 妥善保存, 以後每逢有新版 Telix, 您只要重複一次步驟 (3) 即可. 萬一遇到新版有更動訊息以致有些翻譯無法代換, 您只要稍加修改 telix.lst 並新增一些新訊息的翻譯即可. (一般而言, 由於程式設計師往往不會去更動該data segment 的內容, 故大部份訊息在新版仍會相同!!, 但改沖碼之修改程式部份可能會有不同)

中文化範例 2 :

    凡事總有起頭, 假設我們是第一個翻譯者, 目前手上僅有 TELIX 3.12 的    英文版主程式, 而現在我們要來翻成中文版.

(1) 執行 FINDT, 把 telix.exe 中所有可能的英文訊息一句不漏的找出 :

    FINDT telix.lst telix.exe

    (2) 我們將可得到一個『英文訊息檔』, 此時我們只要編修此檔將它翻譯成『翻譯對照檔』格式. 如此我們可直接使用文書編輯器來做編修,而不必用 PCTOOLS 痛苦的輸入中文同時還怕有些訊息可能遺漏. 又可以存檔以備日後修改.

    (3) 修改滿意後, 執行以下命令將 Telix 3.15 轉成中文化程式

    TRANS telix.lst telix315.exe tel315c.exe

    則 TRANS 將會把英文版 Telix 3.15 (telix315.exe) 依照    『翻譯對照檔』telix.lst 轉換成 中文版 Tel315c.exe

(4) 將 telix.lst 妥善保存, 以後每逢有新版 Telix, 您只要重複一次步驟 (3) 即可. 萬一遇到新版有更動訊息以致有些翻譯無法代換, 您只要稍加修改 telix.lst 並新增一些新訊息的翻譯即可. (一般而言, 由於程式設計師往往不會去更動該data segment 的內容, 故大部份訊息在新版仍會相同!!)


□.解決版權問題︰

常常一些軟體在執行所產生的結果檔都有一些『刺眼』的字句, 諸如 :Unregisted xxxx / (Eval) / ^APID: RA 1209 / ...而影響畫面之美觀, 甚至引起版權糾紛, 故本程式亦可做這方面之應用!先來看看兩個例子, 之後或許您會破不及待的找尋本程式 ... <Grin>

版權範例 1 :

    在一些 File Lister 如: FEBBS / XLIST / ... 產生的檔案清單中, 往往會有一些標示 [Unregisted Copy] 之類的警語, 不僅礙眼而且還有沖
碼的字元. 以 FEBBS (一個產生檔案清單的工具程式)為例, 它會產生如下字串於檔尾.

闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡ww
□ This list created by Febbs 1.91 (c) 1990,91 FenrisUlven Data ww
闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡ww
□ This is an UNREGISTERED copy of Febbs. Please register ww
闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡ww

若我們能把它換成如下 , 則一來沒有沖碼產生, 二來沒人知道我們是否合法註冊, 甚至連我們用那個程式都不知道. ;-)

>>--------------------------------------------------------------------------ww
□ This list created by [Leader BBS] @fidonet.org Sysop: Fox Chen ww
$$--------------------------------------------------------------------------ww
□ Welcome for your F/Req except for Zone Mail Hours! ww
>>--------------------------------------------------------------------------ww

若要達成上面需求, 我們只要把經由 FEBBS 所產生的清單經由 TRANS轉換即可, 而『翻譯對照檔』可以如下:

闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡ww
>>--------------------------------------------------------------------------ww
□ This list created by Febbs 1.91 (c) 1990,91 FenrisUlven Data ww
□ This list created by [Leader BBS] @fidonet.org Sysop: Fox Chen ww
闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡ww
$$--------------------------------------------------------------------------ww
□ This is an UNREGISTERED copy of Febbs. Please register ww
□ Welcome for your F/Req except for Zone Mail Hours! ww
闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡ww
>>--------------------------------------------------------------------------ww

版權範例 2 :

若我們使用某些『未註冊』的信件處理程式, 往往在包出的信包會有一些『附贈品』加在 Tear Line 或放在 "PID" 中, 這些往往也很討人厭, 萬
一您是共用別人的『Regist Code』, 或自己找『Regist Code』或以破解方式『強迫註冊』, 則您信包中的的 PID 或 Tear Line 會留下『馬腳』,故此類『線索』也可用本程式(TRANS)除去. 例如您可在您的信包掃出後與壓縮前, 執行本程式以置換掉一些信包中的字串.

&#07;5D&#07;51PID: RA 7909&#07;5D <--- &#07;51 為 ^A, 故此行用來改 ^APID
&#07;5D&#07;51PID: LEADER &#07;5D
&#07;5D&#07;5A--- Via Silver Xpress V2.28 [NR] <--- 此行把產品名除去.
&#07;5D&#07;5A---
&#07;5D&#07;5A--- QBBS 2.64 (Eval) <--- 亦用來換掉一些『礙眼』字串
&#07;5D&#07;5A--- TRANS0.01 <Grin>
&#07;5D&#07;5A--- DB B1032/020202
&#07;5D&#07;5A---
&#07;5D--- GoldED 2.40&#07;5D
&#07;5D--- Fox Chen &#07;5D

PS: 以上僅僅是範例, 您可以依自己需要來設定置換字串, 唯欲置換字串(奇數行) 亦不能太短, 否則會有誤換情況發生. 如上面為避免誤換,故在 "---- QBBS 2.64 (Eval) " 之前還加上 &#07;5D&#07;5A 此為『換行』與『歸位』(LF & CR) 碼, 如此在引言中的 "--- QBBS 2.64 (Eval)"就不會被誤換. 您可以用一些程式如: Pctools, List, ... 來觀看您掃瞄出的原始信包內容, 茲以決定『欲置換字串』, 因為每個程式對於『換行』碼的設定並不同, 有的是 0D & 0A, 有的僅有 0D

相反的, "目的字串" (偶數行) 可以很短, 甚至為空字串, 但不能比原字串長

此外, 您必須正確的設定您的批次檔, 當 TRANS 把原檔置換後, 能把舊檔刪除, 而產生的檔案有正確的檔名.


命令列參數: 本公用程式相關程式分別為 - DIFFT, TRANS, 與 FINDT ...

(1) DIFFT - 當您不加任何參數時將出現本程式之使用說明, 如下:

    DIFFT 1.1 - Find defferent codes from executable files. By: Fox Chen
    Usage : DIFFT diff_file src_file dest_file [switch]
    diff_file - difference between src_file and dest_file.
    src_file - source which will be compared with dest_file.
    dest_file - destination file.
    /E<xx> - Setup escape ctrl code. Default: /E82 ('□)
    /G<xx> - Gap length, refer doc. Default: /G05
    CAUTION: Please refer the document for details.

以下說明各參數代表之意義:

diff_file : 此為『翻譯對照檔』之輸出檔名, DIFFT 找出 src_file與 dest_file 的不同處, 然後寫至此檔.

src_file & dest_file : 通常英文原版程式放在 src_file 位置, 而中文化主程式放在 dest_file, 如此 diff_file 才能成為 英文 -> 中文 之對應方式.

/E<xx> : 因為有時在訊息中會含有一些控制碼, 此類控制碼有時會小於 ASC 32, 以致無法正常存放在 diff_file, 讓一般文書編輯器可以編輯. 或者有時您需要代換一些二進位碼, 以達到修改程式目的, 如:

cmp al,0 3C 00 改 為 cmp al,0 3C 00
je +2 74 02 ---------> jmp +2 BE 02

此時本程式可以利用一個『脫離碼』來輸入 16 進位碼,例如上面可寫成:

line 2n+1:"
C&#07;50="4&#07;52
line 2n+2:"
C&#07;50槎E&#07;52

其中 '□ ( 0x82 or 130 ) 是本程式內定的『脫離碼』因為此碼不會跟 BIG-5 中文沖碼, 亦可看成 'e' 多一點 (表示 escape), 可按住 Alt 再輸入鍵盤右邊數字鍵130 然後放開 Alt 鍵即可得 '□ 字元.

另外, 萬一遇到恰好原訊息也含有 '□ 此字元時, 本程式也會自動將其以 ="2 表示, 故不會有問題產生.

一般而言, 並不建議您更改此預設之『脫離碼』('□)然而您在必要時亦可自設『脫離碼』, 目前跟中文不相沖的尚有 0x80, 0x81, 0x83

例如: /E80 將改變『脫離碼』為 0x80, 萬一遇到恰好原訊息也含有 '□ 此字元時 , 本程式也會自動將其以 ="0 表示.

/G<xx> : 因為有時在訊息中會含有一些相同的字元, 如下:

line 2n+1:Can't find %s! No %s !
line 2n+2:無法找到此 %s! 無 %s !

如果, 硬把不相同的字元才放在『翻譯對照檔』將造成上述完整的翻譯被拆成兩段 :

line 2n+1:Can't find
line 2n+2:無法找到此
line 2n+3:No
line 2n+4:無

而萬一遇上被"分解"的字句過短, 以致有太多地方有同一字句 (如上面的 "No"), 將會有誤換的情形發生.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
故本程式內定: 當有一字句不同時, 一旦遇到相同的字仍然會沿續 5 個字, 如果第 6 字仍相同才刪去. 故上例中 "find" 之後有 " %s! " 相同, 但第 6 字又不同,故會被連貫在一起.

而您可依自己需要來設定此值, 例如: /G07 (不可寫為/G7, 一定要兩位數) 把 gap 值設為 7.

PS: 太短容易有字串被切割情形發生。太長又有可能使所有字串連在一起, 不過這可以自己稍加判斷而手動切割, 一般並不建議使用小於 5 的 gap 值.

Ex: line 1:Press any key!蝸 <-- 多餘的亂碼 !!
line 2:請按任意鍵 ! 蝸 <-- 乃因 gap 造成
^^^^
如上句末多餘的亂碼乃因 gap 造成, 可手動除去.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
而美化成:

line 1:Press any key!
line 2:請按任意鍵 !

(2) TRANS - 當您不加任何參數時將出現本程式之使用說明, 如下:

TRANS 1.4 - Translate text for executable file. By: Fox Chen
    Usage : TRANS diff_file src_file dest_file [switch]
    diff_file - difference between src_file and dest_file.
    src_file - source which will be translated into dest.
    dest_file - destination file of translation.
    /W - Write sorted diff_file.
    /D - Display replace times for each line.
    /E<xx> - Setup escape ctrl code. Default: '□ (0x82)
    CAUTION: Please refer the document for details.

以下說明各參數代表之意義:

diff_file : 此為『翻譯對照檔』之輸入檔名, TRANS 利用此檔對照找出 src_file 之訊息, 翻譯後寫出 dest_file.

src_file & dest_file : 通常英文原版程式放在 src_file 位置, 而欲產生的中文化主程式放在 dest_file.

/E<xx> : 請參照 DIFFT 的 /E 功能, 通常如果您的 diff_file由 DIFFT 產生, 則此值須設成跟 DIFFT 一樣, 內定值為 0x82. (即 /E82 ).

/D : 顯示每一對翻譯被置換的次數, 這可以用來檢試在新版中那些訊息已經被更動, 以致於找不到. 另一方面可以讓您確認是否有些"破解"改錯地方. :-)

/W : 將您的 diff_file 排序後存回, 由於可能您的代換字串會有重疊情形, 例如:

line 1:not
line 2:不
line 3:I do not know!
line 4:我並不清楚耶!?

若先找到 "not" 把它換為 "不", 則以後將永遠找不到"I do not know!",因為原程式早成了"I do 不t know!"

所以, 其實 TRANS 在代換前都先執行排序 diff_file,但如果您也希望寫回排序後的 diff_file, 您可以加上/W, 同時若您的 diff_file 已經過排序,將可稍微加快速度.

(3) FINDT - 當您不加任何參數時將出現本程式之使用說明, 如下:

    FINDT 1.1 - Find text string from executable files. By: Fox Chen
    Usage : FINDT list_file src_file [switch]
    list_file - strings list contained in src_file.
    src_file - binary source file.
    /E<xx> - Setup escape ctrl code. Default: /E82 ('□)
    /M<xx> - Min. string length. Default: /M05
    CAUTION: Please refer the document for details.

以下說明各參數代表之意義:

list_file : 此為『英文訊息檔』之輸出檔名, FINDT 會找出 src_file 中的可讀字串, 然後以放在此檔中. 您可以編修此檔, 再做成 『翻譯對照檔』以當成 TRANS 的輸入.

src_file : 通常英文執行檔放在 src_file 位置, 而 FINDT 找出此檔中含有的英文字串, 並存放於 list_file 中.

/E<xx> : 請參照 TRANS 及 DIFFT 的 /E 功能, 通常如果您要用list_file 當成以後 TRANS 的 diff_file, 則您 /E應該設成跟 TRANS 一樣. 內定值為 0x82 (即 /E82 ).

/M<xx> : 設定最短字串的長度. 因為在實作(implement)此程式會有一些困難, 那些是有意義的字串, 那些是無意義的機器碼並不容易分辨, 因此利用此值可以設定要當成字串最短需要多少個字元. 舉例如下: 若 src_file 有如下一段碼

a b c e f g h i a ? ^^^^^ ^^^^^^^^^ ^
若 /M06 則以上並沒有一字串段落長度大於 6 個字元.

若 /M03 則以上產生的 src_file 將含有
"abc"
"efghi"
兩個長度大於 3 的字串.

若 /M01 則以上產生的 src_file 將含有
"abc"
"efghi"
"a"
三個長度大於 1 的字串.

而內定值為 /M05 , 若您把它設的很長, 那麼您可能會忽略掉一些短字串, 相反地, 若您設得太短, 那麼您會找出一大堆無意義的亂碼.

PS1:本程式並不如想像中容易, 因為在 src_file 此檔中之"有意義"字串並不容易定義, 尤其 PASCAL 編譯(compile) 後之程式, 其字串中之開頭為字串長度之二進碼: (以下字串取自 XPMAIL.EXE)

Area &#15; Not Available!

上面之 '&#15;' 為 " Not Available!"的長度,而以上當印出時會在 "Area " 和 " Not Available!" 中間插入其它參數如:

Area 120 Not Available!

若我們因為 "Area "和" Not Availbale!" 中間有'&#15;' 而硬把它拆成兩個短字串, 如:

Area
信區
Not Available!
無法選取!

那麼在翻譯成中文時彈性會太小, 甚至會有誤換,上例中, "Area" 此字串太短了, 可能程式中不相關的字串中恰有 "Area" 也被誤換了. 而下例中:

Area &#15; Not Available!
信區 &#15; 並不存在!

則不僅不會有誤換 (因為長度夠長), 同時甚至您還可改成:

Area &#07;5F Not Available!
無法選取 &#07;5B 信區耶 !!

因為我們算好長度即可自由變換.

PS2:另外, 本程式產生的 list_file 中的字串未必每個您都想中文化, 故您可以把不需要的英文字串刪去, 留下您想要的英文字串並把它翻成中文即可.
同時有時會有好幾個字串擠在一行, 您亦可適當斷句, 舉例如下:
^^^^^^^^^^^
No Mail Areas Selected.3Selected Message Areas now have new last read msg #

您不仿分成

No Mail Areas Selected.
Selected Message Areas now have new last read msg #

然後分別翻譯中文

No Mail Areas Selected.
您並沒有選擇任何信區耶!
Selected Message Areas now have new last read msg #
現在已經更動您所選擇的信區之最後讀信指標至信件編號#

如此, 即成了『翻譯對照檔』, 以後可當成 TRANS 的輸入.

附註 :

1.本程式能應用的範圍很多, 各位不仿多用用想像力 ... <Grin>

2.如上所見, 經由本程式應該可以減輕您不少中文化的負擔, 同時也希望大家寫好 diff_file 後能夠散佈出來, 因為:

(a) 免去大家重複 Download 龐大主程式的麻煩.
(b) 便於大家能修改翻譯, 以適合個人需要.
(c) 避免病毒感染過的程式之流通, 因為每個人都能檢視翻譯檔.
(d) 同時也避免了"版權"問題. 因為按照大多數套裝軟體規定, 並不
能把程式以不完整包裝散佈, diff_file 將可避免此類問題.

3.另一方面, 也希望一些破解版的傳送能以 diff_file 來交換:

(a) 一方面避免 BBS 站台的困擾.
(b) 節省大家的時間與金錢.

4.不過, 只是不知道 User 的配合程度 ? 一般 User 總是希望能多多Upload 一些大檔, 以致各位站長的硬碟往往滿是垃圾 :-( ,很懷疑是否有人願意捨 *.EXE 而擇 diff_file. <Grin>

Bugs Report:

若您發現任何 Bug, 或有任何建議, 可以用 NetMail 以下列方式通知小弟.

1. Fidonet: Fox Chen (6:721/117@fidonet.org)
2. TANet: cmh@sun4.ncku.edu.tw
cmh@hp4.ncku.edu.tw
cmh@dec1.ee.ncku.edu.tw
3. BitNet: nckus176@twnmoe10.bitnet
4. InterNet: nckus176@twnmoe10.edu.tw
cmh@sun4.ncku.edu.tw
5. BBS: 886-6-239-3556 (6:721/117@fidonet)

附註: 因本程式為 Public Domain, 作者得視情況接受您之建議與要求,作者並無義務持續本程式之維護及更正任務. 僅聲明之.

注意事項:

1. 本程式宣告為 PD (Public Domain) Software, 故一切規定悉如一般 PD 之聲明與通俗認定. (e.g.可自由拷貝; 不得任意修改程式而散佈; 作者不負保證責任; 不可使用於商業環境或販售謀利; 不得混合於其它軟體包裝, ..)
小弟不再一一贅言. :-)

 



回教學