2014-09-27 64 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) 
    { } 
    } 
}