[英]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.