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

359

En .NET existe la CultureInfoclase en el System.Globalizationespacio de nombres. Tiene dos propiedades similares, ambos valores de retorno del CultureInfotipo: CurrentCulturey CurrentUICulture.

¿Cuál es la diferencia entre ellos?

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

splattne
fuente
28
Tenga en cuenta que Microsoft, en su sabiduría, no separa las culturas de la interfaz de usuario del inglés de EE. UU. Y el inglés (británico) u otros ingleses. No hay MUI para inglés, lo que significa CurrentUICultureque siempre estará en EE. UU. En una máquina de idioma inglés, independientemente de lo CurrentCultureque se pueda configurar para localizar la Configuración regional.
nicodemus13
11
Si. Estoy en el Reino Unido y encontrar CurrentCulturees 'en-GB', pero CurrentUICulturees 'en-US'.
Coronel Panic el
Acabo de encontrar este artículo que explica esto en detalle: github.com/jbe2277/waf/wiki/CurrentCulture-vs.-CurrentUICulture
RinoTom

Respuestas:

347

CurrentCulturees 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án los valores "actuales" 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 el formato alemán, por lo CurrentCultureque sería alemán, pero también prefiero todas mis aplicaciones en inglés, por lo CurrentUICultureque sería inglés.

Hay un buen artículo sobre el tema: Ordenarlo todo: por qué tenemos CurrentCulture y CurrentUICulture

Tomalak
fuente
55
En realidad, esta podría ser una buena alternativa para una explicación detallada: foros.asp.net/post/1080435.aspx
Michael12345
@ Michael12345 Gracias por la pista. He actualizado el enlace. La publicación a la que se vincula también es decente, tal vez incluso mejor.
Tomalak
55
Esos son nombres terribles, entonces, ya que CurrentUICulture realmente significa CurrentLanguageCulture y CurrentCulture realmente significa CurrentDataCulture.
Pxtl
2
@Pxtl: Optaría por CurrentFormattingCulture en lugar de CurrentDataCulture . Aún así, tenga en cuenta que estos pueden no ser tan evidentemente disjuntos como lo sugieren incluso sus nombres. Por ejemplo, yo diría que el formato de fecha larga ( D) puede contener bastante "lenguaje": en-USdevuelve "Viernes 6 de abril de 2018", mientras que ru-RUdevuelve "6 de abril de 2018 г.".
O Mapper el
107

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

(date, currency, double).tostring = CurrentCulture

resource.fr-CA.resx file = currentUICulture
Foxontherock
fuente
Si los comentarios de nicodemus13 y el coronel Panic son confiables, parece que la segunda parte de tu truco no debería funcionar.
O Mapper el
15

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:

  • CurrentCulturerepresenta la configuración del servidor web. Por ejemplo, si su aplicación web ASP.NET está alojada en Alemania, el valor de CutlureInfo.CurrentCultureprobablemente sea de-DE. Por lo tanto, el .ToString()formato predeterminado para los IFormattabletipos utilizaría los formatos alemanes predeterminados, o los que se han configurado en el sistema operativo del servidor como valores predeterminados.

  • CurrentUICulturepuede capturarse desde el agente de usuario y puede representar la cultura de interfaz de usuario del cliente que se conecta al sitio web. Por ejemplo, si carga que el sitio web de Rusia, los valores locales están configurados para utilizar la lengua rusa, y su agente de usuario envía valores de localización para el servidor (Opera e IE hacen esto automáticamente, sin saber para Chrome y Firefox), la CurrenUICultureharía representar 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).

Ivaylo Slavov
fuente
13

Diferencias:

  1. CurrentCulturees para formatear fechas y moneda mientras CurrentUICultureva con el idioma / traducciones. Será utilizado por ResourceManagerpara buscar recursos por cultura.
  2. El espacio de nombres de la CurrentCultureclase está en System.Globalizationmientras CurrentUICultureproviene System.Threading.
  3. CurrentCulturepersiste en diferentes solicitudes en la sesión, mientras CurrentUICultureque debe configurarse con cada solicitud.

Semejanza:

Ambos son System.Globalization.CultureInfoinstancias.

Matas Vaitkevicius
fuente
8

Vale la pena señalar que CurrentUICultureadmite configuraciones regionales no específicas del país, como 'en' (culturas neutrales), mientras que CurrentCultureSOLO admite configuraciones regionales específicas del país, como 'en-GB'. Establecer CurrentCultureuna cultura neutral arrojará un 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.

Sebris87
fuente