但也有不少情況,我們提供用戶自行選擇應用程式的語系,舉例來說,我裝了英文版的 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 後重新開啟應用程式即可。
沒有留言:
張貼留言