OSX 上的中文化系列(二) Carbon 中文化

2001/07/16

上次有朋友問到 Carbon 寫成的軟體要如何中文化?Carbon 身為一個由 MacOS 9 衍生出的 API,有著比 Cocoa 更多的傳統包袱。一方面來說,Carbon 寫成的程式要能夠在 MacOS 9、MacOS X 上執行,另一方面,Apple 也希望 Carbon 寫出來的程式,能夠給予使用者和 Cocoa 程式完全相同的使用者經驗。

這個目標當然還有尚未完成的地方,也不是說 MacOS 9 的程式只要經過移植就能夠在 MacOS X 上面執行的很好。然而,這裡筆者並不打算深入這些開發程式的問題,只把焦點專注在 MacOS X Carbon 程式的中文化上。

基本上 Carbon 軟體有三種可能:

■完全沒有使用 MacOS X 裡頭的 Bundle

正如筆者上一次提到,MacOS X 也支援傳統的 Resource Manager,因此 Carbonize 的程式(亦即,由 MacOS 9 直接Porting 過來的程式)可以沿用傳統的 Resource Fork,如此可以簡化程式開發人員移植的時間,但這種作法下,就沒有辦法享用 MacOS X 的多語系、多平台功能。對於這種程式而言,要中文化的方法和傳統並沒有任何不同:ResEdit。

這部份,大家應該都很熟悉,筆者就不再多談。


BBEdit 6.1.1

辨別方法:在 Finder 裡頭,在應用程式的圖像上 Control Click,如果沒有顯示“顯示套件內容”,就代表這個程式使用傳統的Resource Fork/Resource Manager。

範例:Napster、Transmit Carbon、BBEdit Lite 6.1 for MacOS X。

■不使用 Resource Fork,但是仍然使用 Resource Manager

第二種情況下,我們仍然會看到 Resource 的出現,但是方法、位置已經大大不同。在 MacOS X 裡頭,Carbon 程式也可以將Resource 放在 Data Fork,然後整個應用程式依然包成一個 Bundle,在這種情況下,雖然使用 Resource 檔案,就能夠享有跨平台、多語系的好處(前提是,開發人員用 MacOS X 標準的方法來載入 Resource,如果這個開發廠商將 Resource 寫死,沒有使用語系定義檔案,我們也拿他沒輒,這時候所謂的“多語系”能力依然是無用武之地)。

而這種方法也是筆者此次介紹的重點。


IE 5.1preview
辨別方法:在 Finder 裡頭,在應用程式的圖像上Control Click,選取“顯示套件內容”,打開Bundle。在 Bundle 的 Contents/Resources 裡頭(或者更進一步的 *.lproj 裡頭)如果沒有看到任何 nib 檔案,而只有一些 *.rsrc 的檔案,就代表這個軟體使用 Bundle 加上 MacOS X 式的 Resource Manager(亦即,將 Resource 放在 Data Fork 裡頭)。

範例:IE 5.1preview (MacOS X)、Finder

步驟:由於 MacOS X 裡頭預設會將 Resource 放在 Data Fork,所以第一件事情我們必須將 Resource 轉換到 Resource Fork 去,這樣傳統的軟體(例如 ResEdit)才能打開、編輯這些 Resource。我們可以用一個很有效的小工具 QuickConvert 來作這件事情。QuickConvert 會將 Data Fork 轉換到 Resource Fork,或者將 Resource Fork 轉換到 Data Fork。想要QuickConvert 的讀者可以在 www.versiontrackers.com 找到這個小軟體。在這裡我們用IE作為範例。


zh_TW resource for IE5

打開 IE 的 Bundle,找到 Contents/Resources/English.lproj 這個檔案夾(附帶一提,如果這個 Bundle 打開來沒有語系的lproj 檔案夾,那麼這個 Carbon 程式,雖然使用了 Bundle,卻是沒有辦法如同 Cocoa 應用程式一樣有多個語系的。很幸運的,IE 有使用 Localized.rsrc,因此還不成問題)

一如我們在 Cocoa 裡頭所作的,複製一份 English.lproj,命名為 zh_TW.lproj。


Convert Localized.rsrc

拖著裡頭的 Localized.rsrc(這個 rsrc 檔案就是筆者所說,存放在 Data Fork 的Resource)到 QuickConvert 的圖像上,就會將 Data Fork 的內容轉換到 Resource Fork 。

用 ResEdit 打開 Localized.rsrc,用如同 MacOS9 的方法編輯 Resources(像是 Menu、String、Window 這些東西)然後存檔。

同樣的再將 Localized.rsrc 拖到 QuickConvert 上,將 Resource Fork 的內容轉換回 Data Fork。


有了中文清單的 IE5
開啟 IE,檢查自己的成果。

■如同 Cocoa 使用 nib 的界面檔案

這是很罕見的狀況-正如筆者所說,通常由 MacOS 9 快速移植過來的程式不會這樣作,而 MacOS X 上獨立發展的程式多半會使用 Cocoa(因為開發環境快速、物件化、容易擴展)。但若是碰到了,中文化的改法就和 Cocoa 程式一般並無二致!

範例:暫時沒想出來。

在這裡大家是不是看得有點暈頭轉向?筆者認為,這是平台轉移、開發環境轉換不可避免的陣痛。為了讓大家能更簡單、快速的適應 MacOS X 上的中文化工作,筆者將 Cocoa/Carbon的 中文化整理為以下的法則,希望能對大家有所幫助:

macdog: 感謝 jackc 這篇文章,也很歡迎大家對中文化有興趣的朋友,可以一起來玩喔!