[UWP] 更改 UWP App 的語系

  • 417
  • 0
  • 2018-02-09

ApplicationLanguages 類別提供開發者取得目前裝置所支援的語系,並可以透過程式動態指定 App 要使用什麼語系,以下將介紹 ApplicationLanguages 類別的相關屬性。

public static IReadOnlyList<string> ManifestLanguages { get; }

可以取得 App 目前支援的語系。

public static IReadOnlyList<string> Languages { get; }

取得目前裝置支援的語系列表,並按照使用者設定的優先順序排列,此列表會排除掉 App 所不支援的語系;假設某一台電腦上安裝的 A、B、C 三種語系,但開發者僅設定 App 支援 B、C、D 語系,呼叫  ApplicationLanguages.Languages 時將只會列出 B、C 語系 (取兩者的交集)。

public static string PrimaryLanguageOverride { get; set; }

指定 ApplicationLanguages.PrimaryLanguageOverride 可以動態指定 App 要使用的語系,預設為空字串。當指定了要使用的語系後,並不會立即更改畫面上已呈現出的字串語系 (在 build 16299 後可呼叫 CoreApplication.RequestRestartAsync 讓 App 立即重新開啟,以便確保 App 使用指定的語系)
 

範例

/// <summary>
/// 套用支援語言列表中的最後一個語言
/// </summary>
/// <returns></returns>
private async Task ApplyLastLanguage()
{
    // 支援的語言列表
    var languageList = Windows.Globalization.ApplicationLanguages.Languages.ToList();

    // 套用支援語言列表中的最後一項
    Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = languageList.Last();

    if (Windows.Foundation.Metadata.ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 5))
    {
        // 若支援重開 App 功能,則立即重開 App
        await Windows.ApplicationModel.Core.CoreApplication.RequestRestartAsync(string.Empty);
    }
    else
    {
        // 若不支援重開 App 功能,則關閉 App
        Windows.UI.Xaml.Application.Current.Exit();
    }
}

 

參考資料

讓 App 支援多國語系
https://docs.microsoft.com/windows/uwp/app-resources/localize-strings-ui-manifest
ApplicationLanguages 類別的說明文件
https://docs.microsoft.com/uwp/api/windows.globalization.applicationlanguages
呼叫 CoreApplication.RequestRestartAsync 讓 App 立即重新開啟
https://docs.microsoft.com/uwp/api/windows.applicationmodel.core.coreapplication#Windows_ApplicationModel_Core_CoreApplication_RequestRestartAsync_