由於這是一個用戶界面,因此您有一個消息循環,您可以使用SystemEvents.UserPreferenceChanged
event來檢測區域/語言設置更改。但是即使在使用該事件後,您也需要使用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);
}
Windows窗體,請參見:HTTP://stackoverflow.com/questions/5710127/get-operating-system-language-in-c-sharp和http://stackoverflow.com/questions/11711426/運行時改變語言的正確方式 – NoChance
如果不註銷並重新登錄,則無法更改系統默認語言。我會大膽猜測,您只是更改了鍵盤佈局。詢問superuser.com如何正確執行。 –
+1 Hans Passant的評論 - 我建議的重複討論輸入語言(即鍵盤輸入),而不是系統當前的UI語言。 –