2008-11-30 6 views
304

En .NET existe la clase CultureInfo en el espacio de nombres System.Globalization. Tiene dos propiedades similares, ambas devuelven valores del tipo CultureInfo: CurrentCulture y CurrentUICulture.¿Cuál es la diferencia entre CurrentCulture y las propiedades de CurrentUICulture de CultureInfo en .NET?

¿Cuál es la diferencia entre ellos?

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

+25

Tenga en cuenta que Microsoft, en su sabiduría, no separa las culturas UI del inglés estadounidense y el inglés (británico) u otros idiomas. No hay MUI para inglés, lo que significa que 'CurrentUICulture' siempre estará en EE. UU. En una máquina en inglés, independientemente de' CurrentCulture', que se puede configurar para localizar las configuraciones regionales. – nicodemus13

+9

Sí. Estoy en el Reino Unido y encuentro 'CurrentCulture' como 'en-GB', pero' CurrentUICulture' es 'en-US'. –

Respuesta

297

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 hace referencia al idioma predeterminado de la interfaz del 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 que el sistema esté configurado para tener serán los valores "actuales" en su aplicación .NET.

Muchas veces son las mismas. Pero en mi sistema serían diferentes: prefiero mis números y fechas en el formato alemán, por lo que el CurrentCulture sería alemán, pero también prefiero todas mis aplicaciones en inglés, por lo que el CurrentUICulture sería inglés.

Hay un buen artículo sobre el tema: Sorting it all Out: Why we have both CurrentCulture and CurrentUICulture

+4

En realidad, esta podría ser una buena alternativa para una explicación en profundidad: http://forums.asp.net/post/1080435.aspx – Michael12345

+0

@ 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

+2

Esos son nombres terribles, porque CurrentUICulture significa realmente CurrentLanguageCulture y CurrentCulture realmente significa CurrentDataCulture. – Pxtl

97

Se trata de un simple truco que utilizo para recordar cuál usar:

(date, currency, double).tostring = CurrentCulture 

resource.fr-CA.resx file = currentUICulture 
2

Diferencias:

  1. CurrentCulture es para formatear fechas y monedas, mientras que CurrentUICulture va con el idioma/traducciones. Será utilizado por ResourceManager para buscar recursos por cultura.
  2. El espacio de nombre de la clase CurrentCulture está en System.Globalization mientras que CurrentUICulture viene de System.Threading.
  3. CurrentCulture se mantiene a través de diferentes solicitudes en la sesión, mientras que CurrentUICulture debe establecerse con cada solicitud.

Semejanza:

Ambos son System.Globalization.CultureInfo casos.

8

Una buena manera de hacer una diferencia, además de las buenas explicaciones realizadas 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 de CutlureInfo.CurrentCulture sería probablemente de-DE. Por lo tanto, el formato .ToString() predeterminado para los tipos IFormattable 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 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 lo hacen automáticamente, no está seguro para Chrome y Firefox), el CurrenUICulture representaría ru-RU. Esto hará que los recursos como las cadenas localizadas recuperadas a través de ResourceManager o las expresiones de localización en ASP.NET archivos aspx/ascx estén en ruso (si hay traducciones disponibles).

3

Vale la pena señalar que el CurrentUICulture apoya lugares no específicos de los países, tales como 'en' (cultivos Neutral), mientras que CurrentCulture sólo soporta locales específicas de cada país tales como 'en-GB'. Configurando CurrentCulture en una cultura neutral arrojará un ArgumentException.

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

Cuestiones relacionadas