spanish namespace for example current createspecificculture c# cultureinfo

namespace - ¿Cómo obtener la configuración regional actual en C#?



set spanish culture c# (7)

Como @Christian propuso, ClearCachedData es el método a utilizar. Pero según MSDN:

El método ClearCachedData no actualiza la información en la propiedad Thread.CurrentCulture para los hilos existentes

Por lo tanto, primero deberá llamar a la función y luego iniciar un nuevo hilo. En este nuevo hilo puede usar CurrentCulture para obtener los valores frescos de la 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 }

}

Tenga en cuenta que si también necesita restablecer CurrentUICulture, debe hacerlo por separado

Thread.CurrentThread.CurrentUICulture.ClearCachedData()

Normalmente lo puedes conseguir escribiendo algo como

CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;

Pero de esta manera solo puede obtener CultureInfo, que se configuró en el momento en que se lanzó la aplicación, y no se actualizará si la configuración se modificó posteriormente.

Entonces, ¿cómo configurar CultureInfo actualmente en el Panel de control -> Configuración regional y de idioma?


Existen las clases CultureInfo y TextInfo del espacio de nombres System.Globalization . Ambas clases obtienen varias configuraciones regionales de ventanas definidas en los paneles de control. La lista de ajustes disponibles se encuentra en la documentación.

Por ejemplo:

string separator = CultureInfo.CurrentCulture.TextInfo.ListSeparator;

está obteniendo el separador de lista para el programa que se está ejecutando.


Intente encontrar la configuración que desee en la clase SystemInformation o busque en WMI usando las clases en System.Management/System.Diagnostics , también puede usar LINQ to WMI


Nos topamos con este problema con nuestra aplicación WinForms y fue debido a que Visual Studio creó el proceso [MyApp] .vshost.exe que siempre se ejecuta en segundo plano cada vez que Visual Studio está abierto.

Desactivar la configuración de MyApp -> Propiedades -> Depurar -> "Habilitar el proceso de alojamiento de Visual Studio" solucionó esto para nosotros.

El proceso vshost se usa principalmente para mejorar la depuración, pero si no desea desactivar la configuración, puede detener el proceso según sea necesario.


Puede utilizar la función de Win32 API GetSystemDefaultLCID. La firma es como sigue:

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

La función GetSystemDefaultLCID devuelve el LCID. Puede mapear la cadena de idioma de la siguiente tabla. ID de configuración regional asignadas por Microsoft


Thread.CurrentThread.CurrentCulture.ClearCachedData() parece que hará que los datos de la cultura se vuelvan a leer cuando se acceda a ellos.


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