español - ¿Cuál es la diferencia entre las propiedades CurrentCulture y CurrentUICulture de CultureInfo en.NET?
cultureinfo c# español (5)
En .NET existe la clase CultureInfo
en el espacio de nombres System.Globalization
. Tiene dos propiedades similares que devuelven valores del tipo CultureInfo
: CurrentCulture
y CurrentUICulture
.
¿Cuál es la diferencia entre ellos?
¿Cuál debo usar cuándo y por qué?
Este es un truco simple que utilizo para recordar cuál usar:
(date, currency, double).tostring = CurrentCulture
resource.fr-CA.resx file = currentUICulture
Una buena manera de hacer una diferencia además de las explicaciones agradables hechas por otros usuarios, y un aspecto importante en el desarrollo de aplicaciones web es la siguiente:
CurrentCulture
representa la configuración del servidor web. Por ejemplo, si su aplicación web ASP.NET está alojada en Alemania, el valor deCutlureInfo.CurrentCulture
sería probablementede-DE
. Por lo tanto, el formato.ToString()
predeterminado para los tiposIFormattable
utilizaría los formatos alemanes predeterminados, o los que se han configurado en el sistema operativo del servidor como valores predeterminados.CurrentUICulture
se puede capturar del agente de usuario y puede representar la cultura de 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 regional al servidor (Opera e IE lo hacen automáticamente, sin estar seguro de Chrome y FireFox),CurrenUICulture
representaríaru-RU
. Esto causará que los recursos como cadenas localizadas recuperadas a través de ResourceManager o expresiones de localización en los archivos aspx / ascx de ASP.NET estén en ruso (si hay traducciones disponibles).
Vale la pena señalar que CurrentUICulture
compatible con locales no específicos del país, como ''en'' (culturas neutrales), mientras que CurrentCulture
SOLO admite locales específicos del país, como ''en-GB''. Establecer CurrentCulture
en una cultura neutral lanzará una ArgumentException
.
Supongo que esto se debe a que los formatos como las fechas y la moneda están más vinculados al país en sí, pero el idioma que se muestra es a menudo intercambiable entre países.
CurrentCulture
es la representación .NET de la configuración regional de usuario predeterminada del sistema. Esto controla el número predeterminado y el formato de fecha y similares.
CurrentUICulture
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.
Cualquiera que sean las opciones regionales para las que el sistema está configurado serán los valores "actuales" en su aplicación .NET.
Muchas veces son los dos iguales. Pero en mi sistema serían diferentes: prefiero mis números y fechas en el formato alemán, por lo que CurrentCulture
sería alemán, pero también prefiero todas mis aplicaciones en inglés, por lo que CurrentUICulture
sería inglés.
Hay un buen artículo sobre el tema: Clasificándolo todo: por qué tenemos tanto CurrentCulture como CurrentUICulture
Diferencias:
-
CurrentCulture
es para el formato de fechas y moneda mientras queCurrentUICulture
va con el idioma / las traducciones. Será utilizado porResourceManager
para buscar recursos por cultura. - El espacio de nombres de la clase
CurrentCulture
está enSystem.Globalization
mientras queCurrentUICulture
proviene deSystem.Threading
. -
CurrentCulture
seCurrentUICulture
en diferentes solicitudes en la sesión, mientras queCurrentUICulture
debe configurarse con cada solicitud.
Semejanza:
Ambos son instancias de System.Globalization.CultureInfo
.