OSX 上的 Cocoa 中文化 by JackC | 2001/06/26 |
■前言
寫這篇文章的動機,完全在於補足鼠兄的大作“Cocoa軟體中文化”∼(雖然還欠狗狗一狗票的東西∼ 但是中文化這個議題我想是大家最為關切的∼*_*∼在這裡就跟狗狗說聲抱歉嘍∼)
在老鼠的文章裡頭,很清楚的交代了一個基本的中文化要訣,但是也有很多的細節還沒有處理到,所以筆者就冒著野人獻曝的風險,寫寫幾個自己還記得的東西,如果有什麼不足處就讓其他的大大來補充嘍!
首先,在老鼠的說明裡頭,是直接拿 English.lproj 來改的。這樣改並不能說不行,但是有點偷吃步倒是真的,因為這樣的改法,並沒有發揮MacOS X真正的好處。
這個好處是什麼呢?
簡單來說,就是多平台,多語系。
為了讓大家更能了解筆者的意思,我們就先簡介一下MacOS X 的重要觀念:Bundle。
所謂的 Bundle,就是把一堆東西放在一個檔案夾裡頭,用固定的次序和方式來排列,但是在 GUI 下面,使用者會將這一個檔案夾看成一個單獨的檔案。這有什麼好處呢?簡單來說,一個應用程式通常不會是一個單獨的檔案,還會包含很多其他的必要物品比如說圖檔、界面檔案、文字敘述檔案、功能庫,雖然 MacOS 原本就有所謂的 Resource Fork,可以讓應用程式合併為單獨的一個檔案,但是長久下來,開發人員已經不太願意遵守這樣的規則。另外,長久沒有更新的 Resource 定義,也產生了功能上的不足處。
在轉換作業系統之際,Apple 就索性來個乾坤大挪移,把以前 Steve Jobs 公司的作業系統 NeXT 那一套 Bundle 整個搬上來(Well,一來,SJ 是現在的老大∼ 二來,MacOS X 本來就從 NeXT 改出來的東西)。
雖然 MacOS X 仍然支援傳統的 Resource Manager,但是蘋果公司已經強烈建議發展商將這些東西弄成標準的 Bundle。
那麼,究竟 Bundle 提供了什麼樣的好處呢?首先,傳統 Mac 的程式如果在網路上面傳輸,如果不經過壓縮,絕對會因為 Resource Fork 掉光光而沒有辦法用,但是Bundle 應用程式因為沒有 Resource Fork,比較不會有這樣的限制(同時,壓縮的格式也就沒有那麼多的限制,比如說以前不能用的 Zip 或者 tgz 現在都可以用了)。
下面左邊的畫面中,若是出現藍色粗框框,代表圖像可以放大喔!
| Bundle 應用程式可以將 Plug-in、功能庫這些東西全部包含在裡頭,所以像以前 IE 還得整個檔案夾拉過去才能夠使用,現在在 MacOS X 裡頭一個檔案就算數 (當然其實那是很多檔案包在一個檔案夾裡頭,但是除非你刻意要打開它,不然它就是維持著一個檔案的形態)對於像筆者一樣從 Mac128K 走過來的使用者來說,看到許許多多的程式回復到當初單純的一個檔案,實在是賞心悅目的事情。 | |
| 更進一步來說,因為功能庫都包含在 Bundle 裡頭,以前的什麼 Microsoft Internet Explorer First Run 就沒有了,因為 IE 以前在 Extension Folder 裡頭丟的那一大堆東西,現在都自給自足。(功能庫這部份其實有非常多值得好好討論的細節,但是這裡我們就不多談了∼下次筆者給狗狗的文章應該會包含這一部份的討論)。 |
回到我們的界面中文化來說,MacOS X 有什麼好處呢?首先,MacOS X 可以包含數十個甚至上百個語系檔案,在同一個 Bundle裡頭,系統會自動根據使用者的設定來選擇一個最貼切的語系檔案。更重要的是,開發人員只要使用標準的 Cocoa API,就不需要去顧及什麼中文化、日文化、阿拉伯文化的問題,我們甚至可以把手上的程式加入自己想要的語系,而不需要任何的程式碼做更動(除非>開發人員很笨的沒有處理文字編碼問題)。
所以,我們要怎樣發揮 MacOS X 的這些長處呢?為了方便起見,我們還是用 Clock 這個小程式吧!
首先,照著老鼠的方法打開 Clock 這個 Bundle。在 Bundle 的 Contents/Resources 裡頭,我們這次要用不一樣的方法了:
把CFBundleName = "Clock"改成CFBundleName = "時鐘",存檔後關閉。
這樣我們就會有一個連應用程式選單上都講中文的時鐘了,是不是很美妙呢?!
更棒的是,如果你現在把 System Preferences->International 裡頭的第一選用語系改成英文,再開啟 Clock 這個程式,界面就會回到英文喔!
依此類推,我們只需要一份應用程式,就可以藉由不同的界面檔案,給予不同的人來使用,再也不需要同時安裝中文版和英文版這些有的沒有的了!
■附註
對於有興趣的朋友,筆者稍微解釋一下上面的動作好了。基本上,Resources 裡頭的不同 lproj 檔案夾,就代表不同的語系,系統會自己選擇。
而通常裡頭會有三種東西:界面檔案(*.nib)圖檔(各種都有可能)還有文字檔案。界面檔案,就如同我們之前的動作一般,是直接替代的,圖檔也是依據檔名直接替代, 但是文字黨就比較有技巧了。系統怎麼知道哪一句英文要換成哪一句中文呢?
關鍵就在於大家看到的 A=B 這種形式,簡單來說,A是鑰匙(key),B是實際的值(value),所以假如說一個程式用到“This is a book”這一句話,另一個語系裡頭就會有
"This is a book" = "這是一本書"
這樣的句子,軟體在執行的時候,系統就會自動替換要更動的文字。
慧一文化股份有限公司 版權所有
本網頁各鍊結標題及鍊結內容歸原權利人所有
Copyright 2000 Oikos