C#Windows Phone 8.1语言选择

我希望以前没有问过,我在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应显示应用程序的当前语言(而不是Systems语言,因为用户可能已经更改了语言)。

这是我对问题的解决方案,我希望这对其他人也有用。

首先我们创建一个新struct

 public class ComboboxItem { public string Text { get; set; } public object Value { get; set; } public override string ToString() { return Text; } } 

然后在Form上的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(); 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 Combobox中创建SelectionChanged事件,然后您将获得所选项目,如下所示:

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

在这里整个事情在行动。 (请注意,当我更改语言时, changeLang是我保存的常量,而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) { } } }