* updated by Kii Ali, 12-11-2001 ftp://ftp.nsysu.edu.tw/cpatch/faq/tech/tech_nls.txt Subject: BC++ 中文化「語系支援」的解決方案 ------------------------------------------------------------------------------------------ BC++ 中文化「語系支援」的解決方案 這個 FAQ 各位應該早就知道了,不過在弟初碰 BC++ 和 VC++ 中文化時的確 沒有想到,而吃了一鼻子灰。 目錄 ---- 1.BC VC 的優劣 2.語系不相容? 3.使用 Office97 的語系支援 4.Office97 語系支援的缺點 5.語系支援,支援什麼? 1) ttf 字型 2) nls 使用 6.好一點的解決方案 1)觀看多語系網頁 2)nls 方案 3)拔掉不需要的 ttf 4)細明體 3.0 7.取檔處 1)nls 2)細明體 3.0 1.BC VC 的優劣 -------------- 用 BC 和 VC 修改 resource 中文化的技術,兩樣都號稱可以做到「完美」 中文化,幾乎都是所見即所得的介面。 BC 的好處是程式較小(最小安裝大約 45M 就可以改中文),操作介面比較簡 易,不用多按好幾次滑鼠,可以在 Win98 底下存檔,也可以讓 Resource 的 編輯 Edit as Text,只針對文字的修改適合較大量的工作。壞處則是修改後 檔案長度幾乎都會變動,對於檢查檔案長度的軟體來說便沒有辦法過關,而且 改完成品不相容的情形較多。對 Version Info 欄位的中文化不能使用 BC,否 則「版本資訊」出來的訊息會是亂碼。 VC 的壞處一堆。對初學者比較不直觀,只能在 nt 底下存檔,Resource 的 編輯似乎也不能 Edit as Text (我一直找不到類似功能) ,必須一直用滑鼠 選擇,改起來花費的「手工」就很可觀。但改出來的似乎相容性較佳,如果 不另增加 dialog ,檔案長度也不會變動。VC 裝起來比 BC 肥多了,我試過 最小能中文化的環境,也要 145 MB ,或許可以更小。還得麻煩的去找光碟 裡面一堆 *cht.* 的檔案複製到相應的目錄,因為安裝程式並不會幫你裝進去。 以我而言,我只好在 win98 和 NT5 兩種環境都裝上 BC 和 VC ,VC 改一半 再換手 BC 來改,端視情形而定。兩種方式各有好處,似乎不可能只用一種 完成所有中文化的工作。當然囉,如果會直接使用 *.rc 來 compile 檔案 就不是問題了。 這方面還請各方高手們指教。畢竟我才剛玩而已。 2.語系不相容? -------------- 在 Win98 用 BC 修改軟體時偶爾會到語系不相容情形,比如您要 中文化 yunasoft 的 sexyfont ,或是張小龍所做的 FoxMail , 就會碰到以下情形。 A resource in this file uses language id 0x411. In order to edit this resource, Resouce Workshop needs to translate it using a codepage that is unavailable in this computer. 而在 NT 底下使用 VC 就沒有這個問題了,難道我真要的安裝肥肥的 nt 再裝上更肥的 VC 來中文化嗎?還是,我去找個中文簡體 win98 和 日文 win98 ,這樣 BC 總不會搞怪了吧。 3.使用 Office97 的語系支援 -------------------------- 在 office97 的光碟裡面有個語系支援的檔案,包括簡體中文、韓文、日文 的支援,裝上去,IE4 (甚至 netscape) 都可以順利看日文或簡體網頁而 不用切換,BC 也可以順利解開 resource 了。這樣就解決了問題,檔案在 光碟的這個目錄。 D:\Valupack\Fareast\ 您可以看到多了幾個目錄,目錄裡面是 acmsetup.exe 之類的微軟垃圾,除 此之外,不曉得檔案裝到那裡去了。 C:\Program Files\Microsoft Office\ChsSupp C:\Program Files\Microsoft Office\JpnSupp 這是最好的解決方案嗎?當然不是。 4.Office97 語系支援的缺點 ------------------------- 1).檔案肥大 多塞了幾個大而無用的字型檔,一般人幾乎不會在 繁體中文 Win98 下使用 日文字型來列印吧?如果中文簡體、日文韓文都裝至少要 19MB ,而一個 MagicWin 則只有 4.8M ,功能還比較多,除了不能在 NT 底下使用之外。 若只是為了瀏覽外國網頁,怎麼樣也不划算。 2).Word 95 相容問題 如果安裝了日文字型支援而仍舊使用 Word 95 ,開檔時會看到您的中文 檔名全部變成日文,開檔視窗的狀態列也變成日文了,這日文實在看不懂 在寫什麼東西。Word 97 無此問題。 3).Win95 相容性 裝日文支援時會提醒您在 Win95 底下的相容情形,嚴重時會無法開機。 Win98 無此問題。 5.語系支援,支援什麼? ---------------------- 我們看看語系支援除了裝進 acmsetup.exe 如此的微軟廢物之外,還裝 進什麼東西?大體上分兩類,TTF 字型和 nls 國家語言檔。為了方便 比較起見,這裡也把繁體中文 Win98 和繁體中文 NT5 的情形列上去。 1) ttf 字型 這裡可用 ttfext (TrueType Font Properties) 來取得字型內部資訊。 各國所使用的字型詳細列表如下。 文字 ttf 名稱 大小 版次 出版商 支援內碼頁 字元數 OpenType ---------------------------------------------------------------------------------- 韓文 batang.ttf 11MB 1.00 HanYang(漢陽?) 949 Korean WanSung 33587 Y 日文 msmincho.ttf 5mB 2.0 Ricoh(理光) 932 JIS/Japan 13104 Y 中文簡體 mssong.ttf 2mB 1.0 Zhuhai(珠海?) 936 中文:簡體字組 26304 Y 中文繁體 minliu.ttc 7mB 2.10 Dynalab(華康) 950 中文:繁體字組 18618 N 中文繁體* minliu.ttc 8MB 3.00 Dynalab(華康) 950 中文:繁體字組 22535 Y * 見於 NT5 ,支援 OpenType 規格 在所有的字型裡只有我們在 Win98 使用的華康細明體 2.10 版,沒有支援 OpenType ,字數比起大陸的簡體字 mssong.ttf 還較少,體積則是不比 別人少,實在有點氣餒,大概臺灣的使用者不挑剔華康的關係?NT5 所附 的一樣是細明體,在小點數字體也一樣漂亮,總算是有用點心了。 不過,雖然號稱支援 OpenType ,minliu.ttc 3.0 版本還是看不到日文? 對 unicode 的支援也不曉得在那裡可以證實? 2) nls 使用 各種語系所使用的「國家語言資訊檔」是不同的,NT 和 Win98 所使用的 也各不相同。當然囉,在 IE4 和 Netscape 會自動支援。通常在你安裝 完這些 nls 時,都會要求你重新開機。這些 nls 在使用時都是已經被 鎖定住,所以不能改名也不能刪除。 文字 ttf 名稱 大小 nls for 98 nls for NT --------------------------------------------------- 韓文 batang.ttf 11M cp_949.nls c_949.nls 日文 msmincho.ttf 5m cp_932.nls c_932.nls 中文簡體 mssong.ttf 2m cp_936.nls c_936.nls 中文繁體 minliu.ttc 7m cp_950.nls c_950.nls 在 win98 ,nls 的路徑為 c:\windows\system 在 winNT ,nls 的路徑為 c:\WinNT\System32 在 bc 中文化時會參考上列的 nls ,如果沒有上列的 nls ,bc 會提醒 您「這臺電腦沒有適合的 codepage 」,然後拒絕拆開 resource 。 但是,相反的,你只要有這些 nls ,不用安裝語系支援,bc 就會乖乖動作了。 6.好一點的解決方案 ------------------ 1)觀看多語系網頁 使用 MagicWin 。固然自動切換是不錯,但是想到功能太少,使用者的 自訂性也比較差,在簡體網頁想用我們熟稔的繁體字來看,可不是安裝 個 mssong.ttf 字型可以解決的。所以,還是用 MagicWin 吧。 2)nls 方案 把 nls 拷貝到相應的目錄底下就可以。 在 win98 ,nls 的路徑為 c:\windows\system 在 winNT ,nls 的路徑為 c:\WinNT\System32 在您使用 office97 光碟,安裝多語系支援到「一半」,切換到您的檔案 總管程式,通常解開的檔案會塞在這個目錄 c:\windows\temp 從這個目錄裡面取出您所要的 nls ,然後就可以結束安裝。如果您 還是弄不懂 nls 要如何取出,底下取檔處有,抓回去玩吧。 3)拔掉不需要的 ttf 拔掉後,節省你的硬碟體積。BC 照樣動作, Word95 不再出現日文亂碼了。 4) 細明體 3.0 有人對 NT 5 使用的細明體有興趣嗎?要不要試試支援 OpenType,總共有 22535 個圖形的細明體 3.0 版?當然囉,它也可以裝在 Win98。把 Win98 裡面 2.10 版細明體,踼出去吧。 7.取檔處 -------- 1)nls ftp://ftp.nsysu.edu.tw/cpatch/patchutil/tool/nls.zip 再提示一次,NT 和 Win98 所使用的 nls 檔,檔名和安裝路徑是各不相同的。 2)細明體 3.0 ftp://ftp.nsysu.edu.tw/cpatch/patchutil/tool/mingliu30.zip ------------------------------------------------------------------------------------------ Date: Fri, 22 Jan 1999 18:58:06 +0800 To: Patch-author From: Kii Ali Subject: .再談bc++語系問題 您好,弟是_Kii_Ali 上次提到的 nls 語系問題,已收到這裡,您可以先參考一下。弟對 vc bc 畢竟淺薄,以下的東西若有您笑掉大牙的地方,還請指正。至於已經 重覆的觀念,請看底下的 url,我儘可能不再重述。 Subject: 技術_BC++ 中文化語系支援的解決 by Kii Ali ftp://ftp.nsysu.edu.tw/cpatch/faq/tech/tech_nls.txt 裡面的觀念,在實作上仍然有一點點小誤差。那就是我沒有考慮到沒有安裝過 Office97 多語系支援時,而直接用弟的方法,然後解壓簡體中文或其他國家 的 resource 檔仍會出現錯誤,導致 bc++ 拒絕對此檔開啟 resource 。這不 能怪 ka 說錯,只能說,想法不夠周密。 任何人去尋找 NT4/nt5/win95/win98 的 registry 登錄檔,尋找 ".nls" 的 關鍵字,都可以找到 .nls 設定的地方。原來是 win98 內部的登錄有點問題。 裡面有所缺漏,我們只要做補上的動作就好了。 底下這一段,可以看到一堆空掉的 nls ,你可以自行把它填回去。我們可以 看到,微軟在這裡又「偷雞」偷了一大段。我們只好乖乖的手工補回來。 ------- [HKEY_LOCAL_MACHINE\System\CurrentControlSet\control\Nls\CodePage] "20866"="cp_20866.nls" "28592"="cp_28592.nls" "1251"="cp_1251.nls" "1252"="cp_1252.nls" "1253"="" "1254"="" "1257"="" "1361"="" "437"="cp_437.nls" "737"="" "775"="" "850"="cp_850.nls" (底下略) ------- 要注意的是,這一段是 98 所用,「切勿」套用在 NT 上。比如在 98 底 下 Chinese (Taiwan) 是使用 cp_950.nls,在nt 底下就是 c_950.nls , 檔案大小,名稱,內容是完全相異的。雖然概念相同,但不能混用。如果 您去比對過win98/NT 兩個作業系統對語系的描述,似乎nt 的描述會比較 嚴謹一些? 底下是已填完成的 reg 檔,匯入後,bc++ vc++ 都會乖乖的了。 NT 所用的 code page 段落和 98 完全不同,請自行尋找。不過在nt5底下 的確很少會碰到語系不能開啟的問題。 ------- REGEDIT4 [HKEY_LOCAL_MACHINE\System\CurrentControlSet\control\Nls] [HKEY_LOCAL_MACHINE\System\CurrentControlSet\control\Nls\CodePage] "20866"="cp_20866.nls" "28592"="cp_28592.nls" "1251"="cp_1251.nls" "1252"="cp_1252.nls" "1253"="cp_1253.nls" "1254"="cp_1254.nls" "1257"="cp_1257.nls" "1361"="cp_1361.nls" "437"="cp_437.nls" "737"="cp_737.nls" "775"="cp_775.nls" "850"="cp_850.nls" "852"="cp_852.nls" "857"="cp_857.nls" "862"="cp_862.nls" "864"="cp_864.nls" "866"="cp_866.nls" "874"="cp_867.nls" "932"="cp_932.nls" "936"="cp_936.nls" "949"="cp_949.nls" "950"="cp_950.nls" "ACP"="950" "OEMCP"="950" "50000"="cp_1252.nls" [HKEY_LOCAL_MACHINE\System\CurrentControlSet\control\Nls\CodePage\EUDCCodeRange] "CP00932"="f040-f9fc" "CP00936"="f8a1-fefe,aaa1-affe" "CP00949"="c9a1-c9fe,fea1-fefe" "CP00950"="fa40-fefe,8e40-a0fe,8140-8dfe,c6a1-c8fe" "932"="f040-f9fc" "936"="f8a1-fefe,aaa1-affe" "949"="c9a1-c9fe,fea1-fefe" "950"="fa40-fefe,8e40-a0fe,8140-8dfe,c6a1-c8fe" [HKEY_LOCAL_MACHINE\System\CurrentControlSet\control\Nls\AddLocales] @="" [HKEY_LOCAL_MACHINE\System\CurrentControlSet\control\Nls\Locale] "0000042D"="Basque" "00000403"="Catalan" "00000406"="Danish" "00000413"="Dutch (Standard)" "00000813"="Belgian (Flemish)" "00000409"="English (American)" "00000809"="English (British)" "00000C09"="English (Australian)" "00001009"="English (Canadian)" "00001409"="English (New Zealand)" "00001809"="English (Ireland)" "0000040B"="Finnish" "0000040C"="French (Standard)" "0000080C"="French (Belgian)" "00000C0C"="French (Canadian)" "0000100C"="French (Swiss)" "00000407"="German (Standard)" "00000807"="German (Swiss)" "00000C07"="German (Austrian)" "0000040F"="Icelandic" "00000410"="Italian (Standard)" "00000810"="Italian (Swiss)" "00000414"="Norwegian (Bokmal)" "00000814"="Norwegian (Nynorsk)" "00000416"="Portuguese (Brazilian)" "00000816"="Portuguese (Standard)" "0000040A"="Spanish (Traditional Sort)" "0000080A"="Spanish (Mexican)" "00000C0A"="Spanish (Modern Sort)" "0000041D"="Swedish" "00000436"="Afrikaans" "00001C09"="English (South Africa)" "0000140C"="French (Luxembourg)" "00001007"="German (Luxembourg)" "00001407"="German (Liechtenstein)" "00000404"="中文" @="00000404" -------