繁体   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