2014-09-27 62 views
1

我希望以前没有问过,我在MSDN或这里找不到一个简单的解决方案。C#Windows Phone 8.1语言选择

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; 

而这一切。

+0

https://gist.github.com/artem-zinnatullin/8062647这可能会帮助您在不重新启动应用程序的情况下更改语言。它在我的Windows Phone 8应用程序中为我工作。 – 2017-03-13 10:48:40

回答

3

你可以尝试这样的事情

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; 

在组合框,代码更改为:

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

哈哈非常感谢你,只是做了像完全一样的(因此我设法解决选定的项目问题)。反正非常感谢!(我会在问题中发布我的代码,并将您标记为解决方案) – user3079834 2014-09-27 13:01:17

+0

@ user3079834您如何解决选定的项目问题帮助我! – MrEko 2015-02-21 20:21:06

1

@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) 
    { } 
    } 
}