Since this is a user interface, you have a message loop and you can detect region/language settings changes using the SystemEvents.UserPreferenceChanged
event. However even after using that event, you will need to refresh the CultureInfo
using ClearCachedData
. Below is a really basic implementation that prints to the Output window. Note that SystemEvents.UserPreferenceChanged
is a static event so you will want to detach from the event when the form is closed or it will keep the form instance alive.
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);
}