¿Podría alguien darme un poco más de información sobre la diferencia entre Culture
y UICulture
dentro del marco .NET? ¿Qué hacen y cuándo usar qué?
126
Culture
afecta 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
UICulture
afecta a qué archivo de recursos (Resources. lang .resx) va a cargar su aplicación.
Entonces, para cargar recursos alemanes (presumiblemente texto localizado), establecería UICulture
la cultura alemana y para mostrar el formato alemán (sin ningún impacto en los recursos cargados) que configuraría Culture
.
CultureInfo
objeto completo solo para determinar el archivo de recursos donde astring
sería suficiente? (Por ejemplo,Language
propiedad deFrameworkElement
)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-GB
aquíen
representaEnglish
yGB
representaGreat Briton
en-US
aquíen
representaEnglish
yUS
representaUnited States
Úselo
Culture
para funciones dependientes de Cultura como fecha, hora. yUICulture
es para la correcta carga de archivos de recursos.fuente
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" %>
fuente
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.
fuente