2012-05-19 3 views
0

여기 UI 언어에 대해 약간 혼란 스럽습니다. 언어가 바뀌면 어떻게됩니까? 전체 폴더가 변경되거나 문화가로드됩니까? 나는 실제로 일어나고있는 것을 얻을 수 없다.UI 언어가 어떻게 변경 되었습니까?

Properties.Strings.MainWindow_Language_Selection_English_Label="English" 
    Properties.Strings.MainWindow_Language_Selection_Gujarati_Label="ગુજરાતી" 

무슨 일이 일어나는지 설명하십시오. 일반적으로

private void LanguageSelection_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     ComboBoxItem item = LanguageSelection.SelectedItem as ComboBoxItem; 
     if (item.Content.ToString() == Properties.Strings.MainWindow_Language_Selection_English_Label) 
     { 
      CultureManager.UICulture = new System.Globalization.CultureInfo("en"); 
     } 
     else if (item.Content.ToString() == Properties.Strings.MainWindow_Language_Selection_Gujarati_Label) 
     { 
      CultureManager.UICulture = new System.Globalization.CultureInfo("gu"); 
     } 

     Settings.Default["UILanguage"] = CultureManager.UICulture.Name; 
     Settings.Default.Save(); 
    } 

답변

0

, 응용 프로그램 스레드에 문화를 설정하는 것은 그래서 당신은 아마 당신이 다음 메인 스레드의 문화를 설정하고 로그인/언어 선택 창을 필요로이 작품을 만들기 위해, 표시되는 다음 양식에 효과적 일 것 응용 프로그램의 기본 창을 보여줍니다.

언어 선택을 불필요하게 (WPF에서 더 쉽게) 적용 할 수있는 몇 가지 시도가있었습니다. 그러나 이것이 상자에서 작동하는 방법입니다.

그러나 WPF에서는 UI 요소를 리소스에 직접 바인딩하는 경우 리소스 속성에 대한 속성 변경 이벤트를 발생시켜 UI를 업데이트 할 수 있습니다.

public class StringRes : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged = delegate {}; 

    public string Login 
    { 
     get { return Properties.Strings.Login; } 
    } 

    public string Password 
    { 
     get { return Properties.Strings.Password; } 
    } 

    public void NotifyLanguageChanged() 
    { 
     PropertyChanged(this, new PropertyChangedEventArgs("Login")); 
     PropertyChanged(this, new PropertyChangedEventArgs("Password")); 
    } 
} 

public class MainWindow 
{ 
    private StringRes _resources; 

    private void LanguageSelection_SelectionChanged() 
    { 
     System.Threading.Thread.CurrentThread.CurrentUICulture = GetCurrentCulture(); 
     _resources.NotifyLanguageChanged(); 
    } 
} 

인스턴스로 UI 요소를 바인딩 한 경우 :합니다 (된 .resx 파일의 새 코드 생성기를 만드는 것보다 다른) 이것을 달성하는 가장 쉬운 방법은이 같은 모델 클래스에 자원을 포장하는 것 StringRes 클래스의 경우, 모델에서 알림 변경 이벤트를 발생 시키면 업데이트됩니다.

+0

wpf에서 mvvm .it 만 사용하고 있습니다. – prjndhi

관련 문제