¿Cuál es la diferencia entre las propiedades CurrentCulture y CurrentUICulture de CultureInfo en .NET?

StackOverflow https://stackoverflow.com/questions/329033

  •  11-07-2019
  •  | 
  •  

Pregunta

En .NET existe la clase CultureInfo en el espacio de nombres System.Globalization . Tiene dos propiedades similares, ambos valores de retorno del tipo CultureInfo : CurrentCulture y CurrentUICulture .

¿Cuál es la diferencia entre ellos?

¿Cuál debo usar cuándo y por qué?

¿Fue útil?

Solución

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 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 para las que esté configurado el sistema, será la "Actual" valores en su aplicación .NET.

Muchas veces ambos son lo mismo. Pero en mi sistema serían diferentes: prefiero mis números y fechas en 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: Ordenando todo: por qué tener CurrentCulture y CurrentUICulture

Otros consejos

Este es un truco simple que uso para recordar cuál usar:

(date, currency, double).tostring = CurrentCulture

resource.fr-CA.resx file = currentUICulture

Differences:

  1. CurrentCulture es para formatear fechas y moneda mientras CurrentUICulture va con idioma / traducciones. Será utilizado por ResourceManager buscar recursos por cultura.
  2. Espacio de nombres de CurrentCulture está en System.Globalization mientras que CurrentUICulture proviene de System.Threading .
  3. CurrentCulture persiste en diferentes solicitudes en la sesión mientras CurrentUICulture debe configurarse con cada solicitud.

Similitud :

Ambos son System.Globalization.CultureInfo instancias.

Una buena manera de marcar la diferencia, además de las buenas explicaciones hechas 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, el valor de CutlureInfo.CurrentCulture probablemente sea de-DE . Por lo tanto, el formato predeterminado .ToString () para los tipos IFormattable usarí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 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 regional al servidor (Opera e IE hacen esto automáticamente, no estoy seguro de Chrome y Firefox), el < code> CurrenUICulture representaría ru-RU . Esto hará que cualquier recurso como cadenas localizadas recuperadas a través de ResourceManager o expresiones de localización en archivos aspx / ascx ASP.NET estén en ruso (si hay traducciones disponibles).

Vale la pena señalar que CurrentUICulture admite configuraciones regionales no específicas de país como 'en' (Cultivos neutrales) mientras que CurrentCulture SOLO admite configuraciones regionales específicas de país como 'en -GB '. Establecer CurrentCulture en una cultura neutral arrojará una ArgumentException .

Supongo que esto se debe a que los formatos como las fechas y la moneda están más fuertemente vinculados al país en sí, pero el idioma que se muestra a menudo es intercambiable entre países.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top