2014-09-27 2 views
1

이전에 요청하지 않았 으면하기를 바랍니다. MSDN 또는 여기에서 쉬운 해결책을 찾을 수 없습니다.C# Windows Phone 8.1 언어 선택

windows phone 8.1 응용 프로그램은 두 개 이상의 언어로 배포됩니다. 이렇게하려면 Strings\en-US\Ressources.resw에서 기본 언어 (영어)를 사용하고 거기에 모든 언어가 추가 된 Multilingual App Toolkit이 설치되어 있어야합니다.

언어를 변경하려면, 나는 다음과 같은 코드가 있습니다

내가 응용 프로그램을 다시 시작해야 그 후

changeLang("en-US"); 

호출 할 수

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

이 (가없이 작동하지 수를 다시 시작).

문제는 제 구현입니다. 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 전화 8 애플 리케이션에서 나를 위해 일했다. –

답변

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

+0

@ user3079834 선택한 항목 문제를 어떻게 해결합니까? – MrEko

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