網際論壇 - 軟體中文化交流區 - [本地化交流] .NET 類型軟體的中文化
» 遊客:  註冊 | 登錄 | 會員 | 幫助
 

免費線上小說
動漫分類 : 最新上架熱門連載全本小說最新上架玄幻奇幻都市言情武俠仙俠軍事歷史網游競技科幻靈異 ... 更多小說

<<  [1] [2]  >>
作者:
標題: [本地化交流] .NET 類型軟體的中文化 上一主題 | 下一主題
  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
  來自 滅絕希望的世界
  狀態 離線
#3  

謝謝 khiav 兄論壇補上一份;鼓勵原創本地化教學,歡迎大家創作、交流、探討。



我從遠方來.你到遠方去
風。穿膛而過
蒼茫的月色.灼傷誰的眼眸…
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
  狀態 離線
#5  

補上工具:

1.DotNet v1.4
2.Resourcer for .NET

因為沒有在中文化後加 ID 的習慣,一些東西都沒發在這,但基本上常用的東西都放在 Web 內,只要 Hinet 沒砍檔案就會在........


2008-9-8 04:11 AM
查看資料  發短消息   編輯文章  引用回覆
  panda0305
  高級會員 
  重新學習


 
  積分 6647
  發文 1187
  註冊 2008-8-20
  來自 兒童不宜觀賞
  狀態 離線
#6  



  Quote:
Originally posted by khiav at 2008-9-8 04:11 AM:
補上工具:

1.DotNet v1.4
2.Resourcer for .NET

因為沒有在中文化後加 ID 的習 ...

原來是隱藏的神之卡
還拿出了兩張!!
感謝大大@@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
查看資料  發短消息   編輯文章  引用回覆
<<  [1] [2]  >>

可打印版本 | 推薦給朋友 | 訂閱主題 | 收藏主題

論壇跳轉選單: