[Universal Apps] 多國語系開發 -- 基本入門 (1)

對於原本就在開發 Windows Store Apps 的開發者來說,Universal Apps 多國語系開發應該都有一些基礎;不過對於原來純粹開發 Windows Phone 7/8.0 Apps 的開發者而言,多國語系的做法就是另外一回事了。就個人的開發經驗,Universal Apps (Windows Runtime Apps) 所使用的多國語系的作法比較起過去在 Windows Phone 7/8.0 上方式要來得簡便許多。這一套多國語系的作法起始於 Windows 8.0 Store Apps 的時代,基本的作法在網路上其實已經有相當多的文章、討論與影片,但為了能夠讓完全沒用過的人可以一次看完資料,所以還是從最基本的步驟開始說明起。

        對於原本就在開發 Windows Store Apps 的開發者來說,Universal Apps 多國語系開發應該都有一些基礎;不過對於原來純粹開發 Windows Phone 7/8.0  Apps 的開發者而言,多國語系的做法就是另外一回事了。就個人的開發經驗,Universal Apps (Windows Runtime Apps) 所使用的多國語系的作法比較起過去在 Windows Phone 7/8.0 上方式要來得簡便許多。這一套多國語系的作法起始於 Windows 8.0 Store Apps 的時代,基本的作法在網路上其實已經有相當多的文章、討論與影片,但為了能夠讓完全沒用過的人可以一次看完資料,所以還是從最基本的步驟開始說明起。

 

 

        (1) 在 Package.appxmanifst 中設定預設語言:一般在多國語系的程式當中預設語系多半是 en,這個語系代碼的標準是 BCP-47,可以參考MSDN 文件中的 選擇您的語言 找到所需的代碼,語系代碼可以支援區域性語系(如 “en) 和變體語系 (如 “en-US”, “en-GB”, “en-HK” etc)

        MultiLang00

 

 

        (2) 建立多語系資源:在專案的 Strings 資料夾點選滑鼠右鍵,先建立一個區域代碼的資料夾,然後在此資料夾選擇新增項目,建立一個資源檔。 因為要符合 Universal Apps 的概念,我會將多國語系的字串資源放在 Shared 專案中的 Strings 資料夾下,如圖:

        RESW00

        resw06

 

 

        (3) 編輯字串字元內容: 開啟資源檔,並編輯其資源內容,在 Universal Apps 中使用 Uid 來辨識資源,所以資源名稱可以是 Uid 或 Uid.屬性

        resw03

        resw04

 

 

        (4) 在 xaml code 中只要有使用 TypeConverter (ex: Foreground,FontSize …)或是其屬性本就是字串的 (ex: TextBlock.Text) 都可以在資源中設定並直接用在 xaml code 上,對 C# 來說,所有的字串資源都是字串。

 

 

        (5) 在 xaml code 中使用語系資源:在元素上加入 x:Uid 屬性

   1: <TextBlock x:Uid="AppTitle"  Margin="0,12,0,0" />

        配合 (3) 所設定的值,會同時影響到這個 TextBlock 的 Text、Foregound 與 FontSize 屬性,下圖分別呈現這個 TextBlock 在手機語言設定為中文及英文的畫面。

resw01 resw02

 

 

 

 

         (6) 使用 C# 取得字串資源的字串值:一般我們看到的範例程式碼 (如 快速入門:翻譯 UI 資源 (XAML) ) 的內容都是這樣

    1: var loader = new Windows.ApplicationModel.Resources.ResourceLoader();
   2: var str = loader.GetString("Farewell");

        上方的程式碼表示這個資源的名稱是 Farewell ,如果是這麼單純的狀況下這寫法當然沒錯,可是在我上方的範例中卻是都有帶屬性名稱的,那該怎麼用 C# 讀取?其實很簡單,把 . 改成  / 就行了,如以下程式碼:

   1: var loader = new Windows.ApplicationModel.Resources.ResourceLoader();         
   2: string s = loader.GetString("AppTitle/Text");
 

     ResourceLoader 除了 GetString 方法外,還有另一個方法叫 GetStringForUri ,用 GetStringForUri 取得資源的字串值方式如下

 

   1: var loader = new Windows.ApplicationModel.Resources.ResourceLoader();
   2: string s = loader.GetStringForUri(new Uri("ms-resource:///Resources/AppTitle/Text"));
 
 
 

         最基本使用多國語的方式大概就是如此,相信大家很快就可以適應在 Universal Apps 上建立多國語系的應用程式了