Come ottenere le impostazioni internazionali correnti in C #?

Normalmente puoi ottenerlo scrivendo qualcosa di simile

CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;

Ma in questo modo è ansible ottenere solo CultureInfo che è stato configurato al momento dell’applicazione è stata lanciata e non si aggiornerà se le impostazioni sono state modificate in seguito.

Quindi, come ottenere CultureInfo attualmente configurato nel Pannello di controllo -> Impostazioni internazionali e della lingua?

Come @Christian ha proposto ClearCachedData è il metodo da utilizzare. Ma secondo MSDN:

Il metodo ClearCachedData non aggiorna le informazioni nella proprietà Thread.CurrentCulture per i thread esistenti

Quindi dovrai prima chiamare la funzione e poi iniziare una nuova discussione. In questa nuova discussione puoi utilizzare CurrentCulture per ottenere i nuovi valori della cultura.

 class Program { private class State { public CultureInfo Result { get; set; } } static void Main(string[] args) { Thread.CurrentThread.CurrentCulture.ClearCachedData(); var thread = new Thread( s => ((State)s).Result = Thread.CurrentThread.CurrentCulture); var state = new State(); thread.Start(state); thread.Join(); var culture = state.Result; // Do something with the culture } 

}

Nota che se devi anche resettare CurrentUICulture, dovresti farlo separatamente

 Thread.CurrentThread.CurrentUICulture.ClearCachedData() 

Thread.CurrentThread.CurrentCulture.ClearCachedData() sembra che causerà la rilettura dei dati della cultura al prossimo accesso.

È ansible utilizzare la funzione API Win32 GetSystemDefaultLCID. Il signiture è come segue:

 [DllImport("kernel32.dll")] static extern uint GetSystemDefaultLCID(); 

GetSystemDefaultLCID restituisce la funzione LCID. Può mappare la stringa di linguaggio dalla tabella folowing. ID impostazioni assegnati da Microsoft

Ci siamo imbattuti in questo problema con la nostra app WinForms ed è stato a causa di Visual Studio che creava il processo [MyApp] .vshost.exe che è sempre in esecuzione in background ogni volta che Visual Studio è aperto.

Distriggersndo MyApp -> Proprietà -> Debug -> “Abilita il processo di hosting di Visual Studio” l’impostazione ha risolto questo problema per noi.

Il processo vshost viene principalmente utilizzato per migliorare il debug, ma se non si desidera disabilitare l’impostazione, è ansible interrompere il processo in base alle esigenze.

Ci sono le classi CultureInfo e TextInfo dal namespace System.Globalization . Entrambe le classi ottengono diverse impostazioni regionali di Windows definite nei pannelli di controllo. L’elenco delle impostazioni disponibili si trova nella documentazione.

Per esempio:

 string separator = CultureInfo.CurrentCulture.TextInfo.ListSeparator; 

sta ottenendo il separatore di lista per il programma in esecuzione.

Prova a trovare le impostazioni desiderate nella class SystemInformation o cerca in WMI usando le classi in System.Management/System.Diagnostics , puoi usare LINQ anche su WMI

 [DllImport("kernel32.dll")] private static extern int GetUserDefaultLCID(); public static CultureInfo CurrentCultureInRegionalSettings => new CultureInfo(GetUserDefaultLCID());