2014年9月17日 星期三

如何取得 Globalization 資訊與設定應用程式語系

大部份的狀況,我們會根據用戶作業系統的語系去選擇使用哪一套 Resource 供用戶瀏覽應用程式,像這篇文章提到的方式:共用 Resources 製作多語系應用程式

但也有不少情況,我們提供用戶自行選擇應用程式的語系,舉例來說,我裝了英文版的 Windows 和英文版的 Visual Studio 再加上許多軟體,但像 Office 這種有很多不熟悉名詞的軟體我一定得用中文版才行,這篇記錄如何列出應用程式支援的語系讓用戶在開啟時自行選擇。

先放一張我的作業系統語言設定頁,之後看印出來的 Log 需要對照使用 (可點圖放大)



在 MainPage.xaml.cs 中加入 loaded 的事件,並填入以下程式碼

private void OnPageLoaded(object sender, RoutedEventArgs e)
{
    //ApplicationLanguages.PrimaryLanguageOverride = "zh-Hant-TW";

    CultureInfo infoUI = CultureInfo.CurrentUICulture;
    Debug.WriteLine("UI Culture DisplayName :: " + infoUI.DisplayName);
    Debug.WriteLine("UI Culture EnglishName :: " + infoUI.EnglishName);
    Debug.WriteLine("UI Culture Name :: " + infoUI.Name);
    Debug.WriteLine("UI Culture NativeName :: " + infoUI.NativeName);

    Debug.WriteLine("-----");

    IReadOnlyList<String> globalLangs = GlobalizationPreferences.Languages;
    foreach (String s in globalLangs)
    {
        Debug.WriteLine("GlobalizationPreferences :: " + s);
    }

    Debug.WriteLine("-----");

    IReadOnlyList<String> appLangs = ApplicationLanguages.Languages;
    foreach (String s in appLangs)
    {
        Debug.WriteLine("ApplicationLanguages :: " + s);
    }
}

注意我在這段程式碼將第一行先標為註解,其他就是一般的資訊輸出,第一個區塊是輸出應用程式目前的語系選擇,第二個區塊是列出目前作業系統可支援哪些語系,第三個區塊輸出應用程式支援哪些語系,這種情況下應程式的執行結果都會拿 en 資料夾的字串或圖檔出來使用,且印出來的內容如下

UI Culture DisplayName :: English (United States)
UI Culture EnglishName :: English (United States)
UI Culture Name :: en-US
UI Culture NativeName :: English (United States)
-----
GlobalizationPreferences :: en-US
GlobalizationPreferences :: zh-Hant-TW
GlobalizationPreferences :: zh-Hans-SG
-----
ApplicationLanguages :: en-US
ApplicationLanguages :: zh-Hant-TW

這時我將第一行雙斜線拿掉,將應用程式的語系強制設為繁體中文,不再根據作業系統的語言選擇,重新開啟應用程式後,所有的字串和圖檔改成拿 zh-Hant 的內容了,且輸出如下

UI Culture DisplayName :: Chinese (Traditional, Taiwan)
UI Culture EnglishName :: Chinese (Traditional, Taiwan)
UI Culture Name :: zh-TW
UI Culture NativeName :: 中文(台灣)
-----
GlobalizationPreferences :: en-US
GlobalizationPreferences :: zh-Hant-TW
GlobalizationPreferences :: zh-Hans-SG
-----
ApplicationLanguages :: zh-Hant-TW
ApplicationLanguages :: en-US

通常這種應用方式應該是列出 Application 可支援的語言包,讓用戶利用 ComoboBox 之類的元件選擇後再設定為 Primary 後重新開啟應用程式即可。


沒有留言:

張貼留言