【问题标题】:C# Windows Phone 8.1 Language selectionC# Windows Phone 8.1 语言选择
【发布时间】:2024-01-31 04:55:02
【问题描述】:

我希望以前没有问过这个问题,我在 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;

仅此而已。

【问题讨论】:

标签: c# selection windows-phone-8.1 multilingual


【解决方案1】:

你可以试试这样的

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");
}

【讨论】:

  • 哈哈非常感谢你,就像完全一样(因此我设法解决了所选项目的问题)。总之非常感谢!! (我将在问题中发布我的代码并将您标记为解决方案)
【解决方案2】:

@MrEko

很容易得到选中的项目。

首先你必须在XAML Combobox 中创建一个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)
    { }
  }
}

【讨论】: