2012-05-19 172 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。實現這一目標(比創建.resx文件一個新的代碼生成器等),最簡單的方法將是你的包裹中的資源模型類是這樣的:

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元素的實例的StringRes類,它們將在您在模型中引發通知更改事件時進行更新。

+0

我正在使用mvvm。它只能在wpf中使用。 – prjndhi