khiav
資深會員
積分 3589
發文 335
註冊 2006-8-15
狀態 離線
|
#1 [本地化交流] .NET 類型軟體的中文化
Quote: | 前言:
從這拿走了一些教學文章轉到我 Web 上,補兩篇 .net 中文化的教學過來!
第一部份是入門,只是介紹工具的用法及修改的著眼點.
第二部份介紹的比較雜,主要是根據我自身遇到的問題下去做教學以及一些別人的技術教學.
工具在底下的回覆文內.
修正圖片編排順序..... |
|
DotNet Helper V1.30 簡易使用說明:
首先,現在以 net 來編寫的小軟體開始多了起來,但目前為止我還沒用過那個軟體可以直接編寫資源項目,前一陣子在大陸的論壇看到這個小工具,我就順手把它繁體化,心想著總會有用到的一天!
直接進入主題,我拿一個小軟體開刀,Subtool 是大陸的軟體,用來處理影片字幕的,用 peid 偵測結果為 net 編程的軟體:
開啟 DotNet Helper 預設用 Unicode 編碼,其它的選項我沒動,直接按反編譯:
注:選項的部份就請自行測試了,我幫不上忙!
底下選取的四個檔為反編譯匯出的資源檔,但不管匯出多少檔案,我們只要先看 *.il 這個檔案就好!
用文字編輯軟體開啟副檔名為 il 的檔案,在裡面我們可以找到很多包含數字的 ( ),這些數字就是我們要修改的目標,它們為 UniCode 編碼,如下圖:
注:據觀察,本例中我們要修改的目標應為 bytearray ( ) 內的東西,當然也會有不同的情況, 請自行實驗!
我們就修改一組,把原本應為 87 65 F6 4E 0D 54 ==文件名改為 94 6a 48 68 0D 54 ==檔案名(編碼之間是否留空,在另一篇有做測試,似乎不限定如: 946a48680D54),至於那些要改,我是建議,軟體執行時看得到的部份才改,免得多改多錯!
改完後,用 DotNet Helper 執行編譯,在輸出檔案一欄中就告訴你編譯完的檔案會用什麼檔名存檔!
以下為對照圖!
[ Last edited by 澄澄 on 2010-1-24 at 12:04 AM ]
|
|
2008-9-8 03:30 AM |
|
khiav
資深會員
積分 3589
發文 335
註冊 2006-8-15
狀態 離線
|
#2
.NET 類型軟體的中文化
照慣例,直接進入教學,本文以模擬器 Rom 管理工具 Swift.ROM 為中文化對像,這個軟體是用來管理 Nes;Gba;Nds 這三個遊戲 Rom 的工具,由內地的人所開發的,主要的功能為管理 Rom 並從官網的資料庫進行遊戲 Rom 的資料庫更新,圖片的下載,以及當作各模擬器的前端來使用!
首先看一下軟體的外觀:
以 Peid 查看為 .NET 類型軟體:
基本:
在一開始有兩種做法:
1.使用中文化工具如:Passolo 或 Sisulizer(需安裝 .NET SDK) 或其它可解析 .NET 程式的軟體!
2.反編譯對源碼做修改再組譯成執行檔!
在這裡先介紹 Passolo 的做法,就像一般的中文化過程即可!
修改完會生成 Zh-TW 的資料夾,裡面放著的就是繁體中文的語系檔,只需把 Zh-TW 這個資料夾放入 Swift.ROM 的目錄中,軟體即會以作業系統的語系開啟,這一點跟 D 類的程式很像!
以下為英文和中文的對照:
然而很不幸的,以目前來說似乎沒有一個中文化工具能完完全全的解析 .NET 的資源項目(可能是因為 .NET 的資源格式用法因人而異,當碰上不是官方的標準語法時,就無法解析了!)如下圖,在主視窗上,還是看得到簡體字,這時就要用第二個方法,以反編譯的方式來動手了!
反編譯的方法在上一篇中有提到!
附註:
DotNet 為一個 GUI 前端工具,主要是執行以下三個檔案的功能:
ildasm.exe - .NET 反編譯檔
ilasm.exe - .NET 編譯檔
sn.exe - key 產生檔
至於這三個東西的詳細用法請至 MicroSoft 的網站查詢:
http://msdn.microsoft.com/library/CHT/cptools/html/cpconNETFrameworkTools.asp
另外說一下,這三個東西包含在 .NET SDK 內!
先以 DotNet 反編譯,在反編譯時要注意的是,如果對像軟體是經過保護的即 .NET 上所謂的公鑰私鑰或內地說的強簽名, 則官方的 ildasm 將會無法對該檔案進行反編譯(需要用到破解過的版本),然而 .net 上還是有一些特殊的加密方法(如鎖定機器碼的保護方式...)這個只能自行研究了!
反編譯出來後除了原本的 .exe 執行檔外還多了一些檔案:
說明:
*.il - 為主結構,大多數需要改的東西都在這裡面!
*.resources - 資源檔,為軟體執行時的各部內碼,大多為程式功能碼,但有時也會包含需要修改的字串(UTF-8 格式)
*.res - 同樣為資源檔!
*.* - 其它,不詳,自行試吧!
以下為用文字編輯器開啟 *.il 的樣子:
在 *.il 檔內,首先要找的為 bytearray ( ) 內的東西,這裡面的數字為 16 進制的編碼格式,如下圖:
附注:
*.il 內主要修改目標為 bytearray ( ) 內的字串;但 ldstr " " 這個語法中 " " 內的字串也可能為修改目標,也有可能除了這兩個地方還有別的語法,總之要自己多試!
下圖為修改後的編碼(經實驗,數字編碼之間有無留空格,好像沒有差!),只改了一個字來實驗!
如下圖,執行組建,會出現一個新編譯好的檔案:
執行之後可以看到修改的成果!
進階:
以上說的只是流程及大略的做法,接下來說一些可以省事的方法:
*.il 這個檔案,雖然可以用一般的文字編輯器來修改,但你會發現裡面的程式碼很長,很密密麻麻的,有沒有什麼方法可以省事一點?這時又要用到 Passolo 了,只要給 Passolo 新增一個解析規則,就可以用 Passolo 來修改 *.il 檔案,請將以下文字存為 *.dat 檔再用 Passolo 以文本解析項目安裝:
[Rule]
name=".NET 程式 il 檔案(*.il)"
ext="il"
string="ldstr """,""" ","0","0","0","1","0","1",""
string="+ """,""" ","0","0","0","1","0","1",""
string="bytearray(",")","0","0","5","1","0","1",""
但要注意的是,就像前文說過的,程式編寫的習慣因人而異,所以還是會遇上無法抓到的字串,所以還是要人工查閱!
*.resources 檔案,在前文說過是 UTF-8 格式,所以只能用支援 16 進制及多國編碼的軟體如:UE;MadEdit 等編輯器來進行修改,但最近發現了一個可以直接編輯的軟體 Resourcer for .NET 執行畫面如下:
Resourcer for .NET 官網:http://www.aisto.com/roeder/dotnet/
補充:
1.物件的位置及大小調整(摘自漢化新世紀):
*.il 程式碼:
IL_0a0a: ldfld class [System.Windows.Forms]System.Windows.Forms.Label WinMD52.WinMD5Form::alertLabel
IL_0a0f: ldc.i4 0x1a4
IL_0a14: ldc.i4.8
IL_0a15: newobj instance void [System.Drawing]System.Drawing.Point::.ctor(int32,
int32)
IL_0a1a: callvirt instance void [System.Windows.Forms]System.Windows.Forms.Control::set_Location(valuetype [System.Drawing]System.Drawing.Point)
IL_0a1f: ldarg.0
IL_0a20: ldfld class [System.Windows.Forms]System.Windows.Forms.Label WinMD52.WinMD5Form::alertLabel
IL_0a25: ldstr "alertLabel"
IL_0a2a: callvirt instance void [System.Windows.Forms]System.Windows.Forms.Control::set_Name(string)
IL_0a2f: ldarg.0
IL_0a30: ldfld class [System.Windows.Forms]System.Windows.Forms.Label WinMD52.WinMD5Form::alertLabel
IL_0a35: ldc.i4.s 112
IL_0a37: ldc.i4.s 16
IL_0a39: newobj instance void [System.Drawing]System.Drawing.Size::.ctor(int32,
int32)
IL_0a3e: callvirt instance void [System.Windows.Forms]System.Windows.Forms.Control::set_Size(valuetype [System.Drawing]System.Drawing.Size)
IL_0a43: ldarg.0
IL_0a44: ldfld class [System.Windows.Forms]System.Windows.Forms.Label WinMD52.WinMD5Form::alertLabel
IL_0a49: ldc.i4.s 12
IL_0a4b: callvirt instance void [System.Windows.Forms]System.Windows.Forms.Control::set_TabIndex(int32)
IL_0a50: ldarg.0
IL_0a51: ldfld class [System.Windows.Forms]System.Windows.Forms.Label WinMD52.WinMD5Form::alertLabel
IL_0a56: ldstr "發現錯誤"
IL_0a5b: callvirt instance void [System.Windows.Forms]System.Windows.Forms.Control::set_Text(string)
如上述,可以看到“發現錯誤”的控件名稱為“alertLabel”,向上看到“Control::set_Size”和“System.Drawing.Size::.ctor”兩行,再上面的“IL_0a35: ldc.i4.s 112”和“IL_0a37: ldc.i4.s 16”就是定義控件大小,本例中此處控件大小不需修改。
再向上可看到“ldstr "alertLabel"”字串,而其上面可以找到“Control::set_Location”和“System.Drawing.Point::.ctor”,那麼其上面的“IL_0a0f: ldc.i4 0x1a4”和“IL_0a14: ldc.i4.8”兩行代碼,就是其位置定義了。
上行為 x 坐標,下行為 y 坐標,現在我們將 x 坐標“0x1a4”改為“0x1d8”,其意義就是將 x 坐標向右移。
那麼 y 坐標如何改呢?原句為“ldc.i4.8”,似乎后面沒有賦值參數,其實“.8”就是其參數,沒關系,現在我們可以將“.8”刪除,然后增加空格,與上行對齊,自己給它重新賦值,賦值為“0x9”,其意義就是將 y 坐標向下移。
這里說明一下:參數值從 0 到 9 十個數字和 a 到 f 六個字母組成。字母值比數字值大,其依次順序為:
0、1、2……9、a、b、……f、10、11、……1a、1a1、……1b、1b1、……a1、a11、……b1、b11、……依次類推。f 后跟隨的數值為最大。
即:
System.Windows.Forms.Control::set_Size 定義控件大小,上面有兩行數字/字母值的緊跟語句就是參數代碼。
System.Windows.Forms.Control::set_Location 定義控件位置,上面有兩行數字字母值的緊跟語句就是參數代碼。
記住、熟悉、分析,就能看懂這種較明顯的賦值語句,對控件位置和大小修改就會方便和快速的多。
2.對簡體語系檔進行修改:
Swift.ROM 本身自帶一個 zh-CN 的簡體中文語系,而這個檔案我們可以直接以 Passolo 或反編譯後再來修改,要注意的為:
1.以 Passolo 修改完後是否能正常使用:要先檢查檔名是否正確!
2.以反編譯進行修改需注意 *.il 檔案內:
.locale = (7A 00 68 00 2D 00 43 00 4E 00 00 00 ) // z.h.-.C.N...
需修改為:
.locale = (7A 00 68 00 2D 00 54 00 57 00 00 00 ) // z.h.-.T.W...
而以下部份:
.mresource public 'Swift.ROM.FormAbout.zh-CN.resources'
{
// Offset: 0x00000000 Length: 0x000001D6
// 警告: 建立了托管資源檔案 'Swift.ROM.FormAbout.zh-CN.resources'
}
需修改為:
.mresource public 'Swift.ROM.FormAbout.zh-TW.resources'
{
// Offset: 0x00000000 Length: 0x000001D6
// 警告: 建立了托管資源檔案 'Swift.ROM.FormAbout.zh-CN.resources'
}
且所有反編譯出來的檔案的檔名內 zh-cn 的部份需改為 zh-tw!
以上為語系的國別修改,之後只需將簡體編碼轉為繁體編碼,再組建語系檔即可!
總結:
由上可見,.NET 的中文化,手工的部份比較多,這也就是為啥有一些明明不錯用的 .NET 軟體但卻沒人中文化,因為有點麻煩!
另外關於私鑰的部份,就請自己查吧,我沒去研究!
|
|
2008-9-8 03:45 AM |
|
yoyo007
論壇貴賓
菸草撐住的日子
積分 38778
發文 6170
註冊 2005-9-10 來自 滅絕希望的世界
狀態 離線
|
|
2008-9-8 04:03 AM |
|
panda0305
高級會員
重新學習
積分 6647
發文 1187
註冊 2008-8-20 來自 兒童不宜觀賞
狀態 離線
|
#4
這篇網誌我有看過耶@@
不過都看不懂><
已經這樣子來看這篇網誌了@@
我是從大大的網誌開始學習的優
(雖然軟體都不能載了..大大您的網誌載點...可以考慮換個空間...FF..好像載不了)
|
|
2008-9-8 04:08 AM |
|
khiav
資深會員
積分 3589
發文 335
註冊 2006-8-15
狀態 離線
|
|
2008-9-8 04:11 AM |
|
panda0305
高級會員
重新學習
積分 6647
發文 1187
註冊 2008-8-20 來自 兒童不宜觀賞
狀態 離線
|
#6
原來是隱藏的神之卡
還拿出了兩張!!
感謝大大@@a
為了表達我的謝意
將版大擄獲的小倩獻上
請笑納
|
|
2008-9-8 04:17 AM |
|
khiav
資深會員
積分 3589
發文 335
註冊 2006-8-15
狀態 離線
|
#7
Quote: | Originally posted by panda0305 at 2008-9-8 04:08 AM:
這篇網誌我有看過耶@@
不過都看不懂><
已經這樣子來看這篇網誌了@@
我是從大大的網誌開始學習的優
(雖然軟體都不能載了 ... |
|
FF 可以下,要有耐心,只能用 IE ,......
至於沒版權顧慮的常用工具,我都放在 Web 內.....
基本上,只是放我有在用的,我把 Web 當成是備份.....
至於看不懂,打個比喻好了:
我有一個光碟映像檔,裡面有個檔案檔名為 xxx.exe,現在我要將它改名,所以:
1.我用 UISO 先把光碟映像檔內的所有檔案先提取出來(反編譯)
2.把 xxx.exe 改名(對源碼/資源修改進行中文化)
3.之後再用 UISO 把全部東西製做成光碟映像檔(重新編譯為檔案)
|
|
2008-9-8 04:20 AM |
|
panda0305
高級會員
重新學習
積分 6647
發文 1187
註冊 2008-8-20 來自 兒童不宜觀賞
狀態 離線
|
#8
Quote: | Originally posted by khiav at 2008-9-8 04:20 AM:
FF 可以下,要有耐心,只能用 IE ,......
至於沒版權顧慮的常用工具,我都放在 Web 內.....
基本上,只是放我有在用的,我把 Web 當成是備份.....
至於看不懂,打個比喻好了:
我有一個光碟映像檔,裡面有個檔案 ... |
|
原來是這樣子阿
不過.net類軟體我還沒見識過@@a
感覺繁中化它很辛苦的樣子
|
|
2008-9-8 04:25 AM |
|
sorl
資深會員
積分 5475
發文 631
註冊 2007-6-6
狀態 離線
|
#9
khiav 兄的奇摩部落格本人也有去觀摩!
.Net的確不好使用,之前使用.NET Reflector™但無法讓dll的.Net進行編輯所以放棄
但現有了khiav 兄的工具,有空會再去試試
感謝khiav 兄的中文化技術交流^^
|
|
2008-9-8 09:10 AM |
|
a2213572
高級會員
積分 7539
發文 1477
註冊 2006-5-20
狀態 離線
|
#10
感謝 khiav 大大對於VB.NET做了更深入的探討與教學!
|
|
2008-9-8 10:32 AM |
|
t7yang
高級會員
尊重智慧產權,停用破解軟體
積分 11396
發文 1208
註冊 2007-3-6 來自 自由的國度
狀態 離線
|
#11
話說在前年的時候(阿7我剛開始學中文化)
一天GOOGLE突然把我帶到Khiav的家中
裡面有好多關於中文化的資訊
當天還在想自己是不是踩到狗屎
怎麼會那麼幸運 之後在網際重遇 Khiav 兄
才知道您以是中文化的元老人物 呵
M$推出的這個.NET開發平台
是爽了程設人 苦了中文化人
不過寫程式也不好受 啊...
|
|
|
2008-9-8 11:38 AM |
|
osk
金卡會員
化龍轉鳳趴趴走
積分 21354
發文 2612
註冊 2005-9-5 來自 地球=防衛隊
狀態 離線
|
#12
很棒的教學..受惠了 ^^
感謝 Khiav兄 無私分享 ^^
|
|
|
2008-9-8 12:35 PM |
|
tenhon
資深會員
積分 3760
發文 632
註冊 2006-11-13
狀態 離線
|
#13
.NET開發出的程式的確不容易了解,基本上我功力不足,
只能先觀摩觀摩,多謝 khiav 大的教學。
|
|
2008-9-8 12:47 PM |
|
khiav
資深會員
積分 3589
發文 335
註冊 2006-8-15
狀態 離線
|
#14
Quote: | panda0305 發文:
大大您好
由於您先前發了一篇.net軟體中文化
我很感興趣
後來我便找到一個小軟體要進行繁中
軟體是Minimem 1.2版
參考網誌
http://nelson.pixnet.net/blog/post/21696916
我有幾個問題想請教您
不知道要如何將ok改成確定
我已經了解到 DotNetHelper_v14 的使用方式
字元前後要一至~跟CX系列很像
@@a
我已經將其繁化的差不多
只剩"OK"這個問題與測試使用
可否請您幫我看看@@a
[url]http://www.4shared.com/file/62470385/934ec403/Minimem12.html[url] |
|
原始的英文版本:
panda0305 中文化的版本:
我用 panda0305 已中文化過的 minimem1.2.il 直接找 "ok" 並改為 "確定":
順便把 Kb 的位置往右移:
接著把 KB 左邊的選項欄往右移:
先組建,底下為部份修正的版本.....
不過在試用這個軟體時,當要離開軟體時會出現 net 的錯誤提示,這個是 bug 吧!
[ Last edited by khiav on 2008-9-10 at 11:05 PM ]
|
|
2008-9-10 11:00 PM |
|
panda0305
高級會員
重新學習
積分 6647
發文 1187
註冊 2008-8-20 來自 兒童不宜觀賞
狀態 離線
|
#15
Quote: | Originally posted by khiav at 2008-9-10 11:00 PM:
原始的英文版本:
panda0305 中文化的版本:
[URL=http://imageshack.us][IMG]http://img230.images ... |
|
感謝大大
不過我發現
就算不調整位置好像也可以耶....@@a
這個軟體有點奇怪><
真的有點奇怪
我再找人試試看
離開的bug我突然不見了= =||
本來移除後再安裝還是有錯誤
後來我灌了.net 3.5 SP1後就消失了@@a??
[ Last edited by panda0305 on 2008-9-10 at 11:18 PM ]
|
|
2008-9-10 11:17 PM |
|
ad6543210
中級會員
積分 1480
發文 327
註冊 2008-8-5
狀態 離線
|
#16
0.0
用那軟體時
我是灌了.net 3.5 sp1就出現了..
跟你一樣的錯誤XDD
好像是指令碼錯誤吧!!
|
|
2008-9-10 11:36 PM |
|
panda0305
高級會員
重新學習
積分 6647
發文 1187
註冊 2008-8-20 來自 兒童不宜觀賞
狀態 離線
|
#17
Quote: | Originally posted by ad6543210 at 2008-9-10 11:36 PM:
0.0
用那軟體時
我是灌了.net 3.5 sp1就出現了..
跟你一樣的錯誤XDD
好像是指令碼錯誤吧!! |
|
那大大您作業系統是什麼
我在再測試期間
我發現我的VISTA無法顯示 "口 Hide if Memory >"這一句跟"Clear Unchecked item"
|
|
2008-9-10 11:39 PM |
|
sorl
資深會員
積分 5475
發文 631
註冊 2007-6-6
狀態 離線
|
#18
Quote: | Originally posted by panda0305 at 2008-9-10 23:17:
感謝大大
不過我發現
就算不調整位置好像也可以耶....@@a
這個軟體有點奇怪><
真的有點奇怪
我再找人試試看
離開的bug我突然不見了= =||
本來移除後再安裝還是有錯誤
後來我灌了.net 3.5 SP1 ... |
|
咦!此軟體剛出來時1.1版本人已經中文化過!
沒想到已經出1.2版了=.=
沒錯1.2版的問題在於離開時候會有.NET錯誤!
是個BUG!
[ Last edited by sorl on 2008-9-11 at 12:53 AM ]
|
|
2008-9-11 12:40 AM |
|
yoyo007
論壇貴賓
菸草撐住的日子
積分 38778
發文 6170
註冊 2005-9-10 來自 滅絕希望的世界
狀態 離線
|
#19
Quote: | Originally posted by khiav at 2008-9-10 23:00:
原始的英文版本:
panda0305 中文化的版本:
[URL=http://imageshack.us][IMG]http://img230.images ... |
|
.NET 資源應多位於 Unicode,[OK] 翻成 [確定],字串空間應該足夠吧?
|
我從遠方來.你到遠方去
風。穿膛而過
蒼茫的月色.灼傷誰的眼眸… |
|
2008-9-11 12:59 AM |
|
panda0305
高級會員
重新學習
積分 6647
發文 1187
註冊 2008-8-20 來自 兒童不宜觀賞
狀態 離線
|
#20
Quote: | Originally posted by yoyo007 at 2008-9-11 12:59 AM:
.NET 資源應多位於 Unicode,[OK] 翻成 [確定],字串空間應該足夠吧? |
|
足夠!
可是我現在面臨另一個窘境
位置調整@@
整個移位了.....................
|
|
2008-9-11 01:01 AM |
|