簡體   English   中英

C#Windows Phone 8.1語言選擇

[英]C# Windows Phone 8.1 Language selection

我希望以前沒有問過這個問題,在MSDN或此處找不到簡單的解決方案。

Windows Phone 8.1應用程序以多種語言部署。 為此,我在Strings\\en-US\\Ressources.resw使用默認語言(英語),並安裝了其中添加了所有其他語言的Multilingual App Toolkit

要更改語言,我有以下代碼:

private void changeLang(string cul)
{
    Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = cul;

    Windows.ApplicationModel.Resources.Core.ResourceContext.GetForViewIndependentUse().Reset();
    Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView().Reset();

    if (Frame != null)
        Frame.Navigate(typeof(MainPage));
}

可以被稱為

changeLang("en-US");

之后,我必須重新啟動應用程序(如果不重新啟動就無法使它工作)。

問題是我的實現。 我創建了一個名為Settings的頁面,該頁面旨在為用戶提供更改語言的可能性。

現在,我想為用戶提供一個ComboBox其中包含我翻譯的所有語言。 默認情況下,所選的ComboBoxItem應顯示應用程序的當前語言(而不是系統語言,因為用戶可能已經更改了語言)。

在這里,我對問題的解決方案也希望對其他人也有用。

首先,我們創建一個新的struct

public class ComboboxItem
{
    public string Text { get; set; }
    public object Value { get; set; }

    public override string ToString()
    {
        return Text;
    }
}

然后,在窗體的OnNavigate部分上,添加以下代碼:

settings_language_cb.Items.Add(new ComboboxItem { Text = "Deutsch", Value = "de-DE" });
settings_language_cb.Items.Add(new ComboboxItem { Text = "English", Value = "en-US" });

var curLangItem = settings_language_cb.Items.SingleOrDefault(x => (x as ComboboxItem).Value.ToString() == CultureInfo.CurrentCulture.Name);

settings_language_cb.SelectedItem = curLangItem;
settings_language_cb.PlaceholderText = (curLangItem as ComboboxItem).Text;

就這樣。

您可以嘗試這樣的事情

class LanguageCode
{
    string Name { get; set; },
    string CodeName { get; set; }
}

var langs = new List<LanguageCode>();
langs.Add(new LanguageCode() { Name = "English", CodeName = "en-US" });
langs.Add(new LanguageCode() { Name = "Deutsch", CodeName = "de-DE" });
//    ... and so on ...

settings_language_cb.Items.Add(langs);
settings_language_cb.SelectedIndex = 0;

在ComboBox上,將代碼更改為:

private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    var si = settings_language_cb.SelectedItem as LanguageCode;
    if(si != null) 
        changeLang(si.CodeName);  // changeLang("de-DE");
}

@MrEko

輕松獲取所選項目。

首先,您必須在XAML框中創建SelectionChanged事件,然后將獲得選定的項目,如下所示:

(myXAMLComboBox.SelectedItem as ComboboxItem).Value.ToString();

這就是整個過程。 (請注意, oldLang是在更改語言時保存的常量,而changeLang是更改語言的函數)。 當然,更改語言后,您必須重新啟動應用程序,這樣它才能生效。

private void Page_Settings_LanguageComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
  if (oldLang != (PageSettings_Language_cb.SelectedItem as ComboboxItem).Value.ToString())
  {
    try
    {
        changeLang((PageSettings_Language_cb.SelectedItem as ComboboxItem).Value.ToString());
        ShowRestartMessageBox();
    }
    catch (Exception)
    { }
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM