¿Cuál es la diferencia entre las propiedades CurrentCulture y CurrentUICulture de CultureInfo en .NET?
En .NET existe la CultureInfo
clase en el System.Globalization
espacio de nombres. Tiene dos propiedades similares y ambas devuelven valores del CultureInfo
tipo: CurrentCulture
y CurrentUICulture
.
¿Cuál es la diferencia entre ellos?
¿Cuál debo usar, cuándo y por qué?
CurrentCulture
es la representación .NET de la configuración regional del usuario predeterminada del sistema. Esto controla el formato predeterminado de números y fechas y similares.
CurrentUICulture
se refiere al idioma predeterminado de la interfaz de usuario, una configuración introducida en Windows 2000. Esto se refiere principalmente a la parte de localización/traducción de la interfaz de usuario de su aplicación.
Cualesquiera que sean las opciones regionales que tenga el sistema configurado, serán los valores "actuales" en su aplicación .NET.
Muchas veces ambos son iguales. Pero en mi sistema serían diferentes: prefiero mis números y fechas en formato alemán, por lo que serían CurrentCulture
alemanes, pero también prefiero todas mis solicitudes en inglés, por lo que CurrentUICulture
serían en inglés.
Hay un buen artículo sobre el tema: Clasificándolo todo: por qué tenemos CurrentCulture y CurrentUICulture
Este es un truco sencillo que utilizo para recordar cuál usar:
(date, currency, double).tostring = CurrentCulture
resource.fr-CA.resx file = currentUICulture
Una buena manera de marcar la diferencia además de las agradables explicaciones realizadas por otros usuarios, y un aspecto importante en el desarrollo de aplicaciones web es el siguiente:
CurrentCulture
representa la configuración del servidor web. Por ejemplo, si su aplicación web ASP.NET está alojada en Alemania, loCutlureInfo.CurrentCulture
más probable es que el valor de seade-DE
. Por lo tanto, el formato predeterminado.ToString()
paraIFormattable
los tipos utilizaría los formatos alemanes predeterminados o los que se han configurado en el sistema operativo del servidor como predeterminados.CurrentUICulture
se puede capturar desde el agente de usuario y puede representar la cultura de la interfaz de usuario del cliente que se conecta al sitio web. Por ejemplo, si carga ese sitio web desde Rusia, su configuración local está configurada para usar el idioma ruso y su agente de usuario envía su configuración local al servidor (Opera e IE hacen esto automáticamente, no estoy seguro para Chrome y Firefox), loCurrenUICulture
haría representarru-RU
. Esto hará que todos los recursos, como cadenas localizadas recuperadas a través de ResourceManager o expresiones de localización en archivos ASP.NET aspx/ascx, estén en ruso (si hay traducciones disponibles).