2013-12-20 126 views
0

我想有一個標籤,在我的形式,並改變其文字時,我的系統語言改變認識我的系統當前語言

事情是這樣的:

else if (Thread.CurrentThread.CurrentCulture.Name == "en-US") 
     { 
      label1.Text = "En"; 
     } 
     else 
      label1.Text = "Not En"; 

1:此代碼總是顯示「恩」 , 我該怎麼辦 ?

2:我應該在哪裏放我的代碼,如果我總是需要檢查?

+0

Windows窗體,請參見:HTTP://stackoverflow.com/questions/5710127/get-operating-system-language-in-c-sharp和http://stackoverflow.com/questions/11711426/運行時改變語言的正確方式 – NoChance

+1

如果不註銷並重新登錄,則無法更改系統默認語言。我會大膽猜測,您只是更改了鍵盤佈局。詢問superuser.com如何正確執行。 –

+0

+1 Hans Passant的評論 - 我建議的重複討論輸入語言(即鍵盤輸入),而不是系統當前的UI語言。 –

回答

0

由於這是一個用戶界面,因此您有一個消息循環,您可以使用SystemEvents.UserPreferenceChangedevent來檢測區域/語言設置更改。但是即使在使用該事件後,您也需要使用ClearCachedData刷新CultureInfo。以下是打印到輸出窗口的一個非常基本的實現。請注意,SystemEvents.UserPreferenceChanged是一個靜態事件,因此當表單關閉時您會想要從事件中分離,或者它會使表單實例保持活動狀態。

public AppForm() // constructor 
{ 
    SystemEvents.UserPreferenceChanged += SystemEvents_UserPreferenceChanged; 
} 

private void SystemEvents_UserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) 
{ 
    Debug.Print("Settings changed category: {0}", e.Category); 
    CultureInfo.CurrentCulture.ClearCachedData(); 
    CultureInfo.CurrentUICulture.ClearCachedData(); 
    Debug.Print("Current Culture: {0}", CultureInfo.CurrentCulture); 
    Debug.Print("Current UI Culture: {0}", CultureInfo.CurrentUICulture); 
}