¿Cuál es la diferencia entre Culture y UICulture?

126

¿Podría alguien darme un poco más de información sobre la diferencia entre Culturey UICulturedentro del marco .NET? ¿Qué hacen y cuándo usar qué?

Niklas
fuente

Respuestas:

148

Cultureafecta cómo se presentan los datos que dependen de la cultura (fechas, monedas, números, etc.). Aquí están algunos ejemplos:

var date = new DateTime(2000, 1, 2);
var number = 12345.6789;

Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
Console.WriteLine(date); // 02.01.2000 00:00:00
Console.WriteLine(number.ToString("C")); // 12.345,68 €

Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-CA");
Console.WriteLine(date); // 2000-01-02 00:00:00
Console.WriteLine(number.ToString("C")); // 12 345,68 $

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Console.WriteLine(date); // 1/2/2000 12:00:00 AM
Console.WriteLine(number.ToString("C")); // $12,345.68

La cultura también afecta el análisis de la entrada del usuario de la misma manera:

const string numberString = "12.345,68";
decimal money;

Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
money = decimal.Parse(numberString); // OK!

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
money = decimal.Parse(numberString); // FormatException is thrown, TryParse would return false

Tenga cuidado con los casos en los que el análisis tiene éxito pero el resultado no es el que esperaría.

const string numberString = "12.345";
decimal money;

Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
money = decimal.Parse(numberString); // 12345

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
money = decimal.Parse(numberString); // 12.345, where the . is a decimal point

UICultureafecta a qué archivo de recursos (Resources. lang .resx) va a cargar su aplicación.

Entonces, para cargar recursos alemanes (presumiblemente texto localizado), establecería UICulturela cultura alemana y para mostrar el formato alemán (sin ningún impacto en los recursos cargados) que configuraría Culture.

dee-see
fuente
39
Lo que significa que puede tener etiquetas en inglés y UI (inglés UICulture), y moneda noruega, fecha, hora y formato de número (Cultura noruega). En términos de Windows, piense que tiene un paquete de idioma instalado para los menús y cuadros de diálogo (UICulture), pero funcionando con entornos regionales noruegos (Culture.)
Lasse V. Karlsen
2
Para enfatizar las implicaciones de esto: ¡Incluso si no admite el idioma de un usuario, asegúrese de apoyar su cultura, para formatear! He visto errores en los que una aplicación recurre a "en-EE. UU." Tanto para la cultura como para el idioma, cuando solo era necesario recurrir al idioma.
ToolmakerSteve
1
¿Cuál es el punto de usar un CultureInfoobjeto completo solo para determinar el archivo de recursos donde a stringsería suficiente? (Por ejemplo, Languagepropiedad de FrameworkElement)
Wouter
2

Culture and UICulture

Los valores son pares de cadenas de dos letras, la primera es para definir el lenguaje y la segunda para definir la región. Ejemplo:

en-GBaquí enrepresenta Englishy GBrepresentaGreat Briton

en-USaquí enrepresenta Englishy USrepresentaUnited States

Úselo Culturepara funciones dependientes de Cultura como fecha, hora. y UICulturees para la correcta carga de archivos de recursos.

Arma X
fuente
0

Solo un pequeño asunto a tener en cuenta además de la increíble explicación de @ Vache: puede configurar UICulture y Culture en (nivel de página y nivel de aplicación).

Para configurarlos a nivel de aplicación, simplemente agregue la sesión de globalización en web.config

p.ej <globalization uiCulture="es" culture="es-MX" />

Y para establecerlos en el nivel de página, que es bueno agregar en una página específica (individual), configure los atributos Cultura y UICultura dentro de la directiva @ page

p.ej <%@ Page UICulture="es" Culture="es-MX" %>

Hooman
fuente
-4

La propiedad UICulture puede cambiar para cada navegador web, mientras que Culture se mantiene constante.

El valor de Cultura se puede establecer solo en culturas específicas, como en-US o en-GB. Esto evita el requisito de identificar el símbolo de moneda correcto para usar en en, donde en-US y en-GB tienen símbolos de moneda diferentes. Los usuarios pueden configurar la cultura de la interfaz de usuario y la cultura en sus navegadores.

Mohammed Nazer
fuente