Hello World 進階了 -- 國際化

Hello World 進階了 -- 國際化

This document is provided as is. You are welcomed to use it for non-commercial purpose.
Written by: 國立中興大學資管系呂瑞麟 Eric Jui-Lin Lu
請勿轉貼


終於來到的 Hello World 進階版的最後一個單元 -- 國際化。想想看從 Android Market 下載的程式,如果我們把語系設定為英文,程式就以英文呈現;若把語系從英文改成中文,程式又以中文呈現。以計算機程式為例,下方左邊的畫面是使用繁體中文語系的結果(請留意"清除"標籤),而下方右邊的畫面是使用 English 語系的結果("Clear"標籤),這是怎麼做到的?難道 Android 程式開發人員需要為每一種語系開發一個相對應的程式嗎?

 

Android 的設計方式是每一個程式可以存取不同的資源;例如之前的程式圖示檔案是放在 res/drawable-* 目錄內,字串和顏色的定義是在 res/values,而畫面排版的定義則在 res/layout。如果你已經推斷出語系的設定也是利用類似的方式,恭喜你,答對了。我們在下列清單中列出部分語系的目錄名稱,更完整的資訊請參考 Android Developers 官方網站:

  • 預設(或者英文):res/values
  • 繁體中文:res/values-zh-rTW
  • 簡體中文:res/values-zh-rCN
  • 日文:res/values-jp
  • 德文:res/values-de
  • 法文:res/values-fr

如果程式找不到手機設定語系的相對目錄,該程式就會使用預設的預設的目錄;另外,由於英文還是共通的語言,因此一般建議在預設目錄中,請使用英文。從之前的教學文中,我們知道所有標籤的內容都可以經由res/values/strings.xml 來設定,因此國際化的第一個步驟就是把所有在程式中出現的標籤,都以變數名稱的方式(例如之前的@string/hello)定義在 res/values/strings.xml 中;在分別檢視如下的程式畫面、strings.xml內容、以及程式碼後,

字串變數總共有 hello、app_name、以及 button;其中 app_name 不必變更,因為它已經是英文了。另外,程式碼中我們需要把"可有可無"、"Hello"、以及"OK"以字串變數的方式定義出來;假設我們分別將它們命名為 adTitle、adMessage、以及 adButton。在這裡我就不詳細的說明步驟,如果你到這裡並不清楚要如何定義,我強烈建議你重複閱讀之前的教學文。定義了這三個參數之後,其名稱分別是 R.string.adTitle、R.string.adMessage、以及 R.string.adButton,而想要取得該名稱的字串內容可以利用 getString() 的方式取得;以取得 R.string.adTitle 的字串內容為例,程式碼為 getString(R.string.adTitle)。完成上述的修改之後,其程式畫面、strings.xml內容、以及程式碼如下所示:(請注意,雖然模擬器的語系是繁體中文,但是因為目前只有預設的目錄,所以還是以預設目錄內的定義內容為準)

根據 Android Developers 文件 的說明,hdpi, mdpi, 和 ldpi 是分別存放高密度(high density)螢幕、中密度螢幕、以及低密度螢幕的程式圖示;但是要如何判斷你的手機是高、中、還是低密度呢?文件中說明對於手機而言,解析度是 480x800 的手機是高密度,320x480 是中密度,而 240x320 是低密度。至於實際的情形,還必須依據該手機製造商對於該手機的設定而定,而 Android 系統會依據最佳比對,選出最佳的結果。(註:未來如果持續投入開發,這一塊需要進一步了解,尤其是開發的程式如何讓它在平板中也能漂亮的呈現)

再來,我們需要產生給繁體中文以及簡體中文的目錄(當然支援的語系越完整越好),首先產生語系所需要的目錄,請從 Eclipse 中,如下左圖的方式在 res 上點滑鼠右鍵,然後選擇 New --< Folder 來產生目錄名稱(如圖中的 values-zh-rCN 或者 values-zh-rTW);然後將 values 中的 strins.xml(點選滑鼠右鍵並選擇 Copy)複製到如圖中的 values-zh-rTW(點選滑鼠右鍵並選擇 Paste):

 

完成了上述的修改之後,在繁體中文的語系下,程式畫面以及 strings.xml 的內容分別如下圖所示。喔,我個人是利用 Firefox 的新同文堂來轉換繁體中文跟簡體中文。

 


Written by: 國立中興大學資管系呂瑞麟 Eric Jui-Lin Lu

沒有留言:

張貼留言