2012-02-29 22 views

Respuesta

128

Culture afecta la forma en que se presentan los datos dependientes 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 sintáctico 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 

Cuidado con los casos en que el análisis tiene éxito pero el resultado no es lo que se esperaría es ser.

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 afectos que va a ser cargado a su aplicación por archivo de recursos (recursos. lang .resx).

Así que para cargar recursos alemanes (texto supuestamente localizado) establecería UICulture en la cultura alemana y para mostrar el formato alemán (sin ningún impacto sobre qué recursos están cargados) establecería Culture.

+36

Lo que significa que puede tener etiquetas inglesas y UI (inglés UICulture) y moneda noruega, fecha, hora y formato de número (norwegian Culture.) En términos de Windows, piense que tiene un paquete de idioma instalado para los menús y cuadros de diálogo (UICulture), pero ejecutándose con las configuraciones regionales noruegas (Cultura). –

+1

Para enfatizar las implicaciones de esto: ¡Incluso si no admite el idioma de un usuario, asegúrese de apoyar su cultura para el formateo! He visto errores en los que una aplicación se retrotrae a "en EE. UU." Tanto para la cultura como para el idioma, cuando solo era necesario recurrir al idioma. – ToolmakerSteve

+0

¿Cuál es el punto en el uso de un objeto entero 'CultureInfo' solo para determinar el archivo de recursos donde una' cadena' sería suficiente? (Por ejemplo, la propiedad 'Lenguaje' del' FrameworkElement') – Wouter

-4

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

El valor de Cultura solo se puede establecer 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 diferentes símbolos de moneda. Los usuarios pueden establecer la cultura y la cultura de la interfaz de usuario en sus navegadores.

0

Solo una pequeña cuestión a considerar además de la increíble explicación de @Vache: Puede establecer UICulture y Culture en (nivel de página y nivel de aplicación).

Con el fin de ponerlos a nivel de aplicación, basta con añadir sesión de la globalización en web.config

por ejemplo, <globalization uiCulture="es" culture="es-MX" />

Y para ponerlos a nivel de página, lo cual es bueno para añadir en una página específica (individuales), establecen la cultura y UICulture atributos dentro de la página @ directiva

por ejemplo, <%@ Page UICulture="es" Culture="es-MX" %>

1

Culture and UICulture

Los valores son pares de cuerdas de dos letras, la primera es para la definición de la lengua y la segunda para la definición de la región. Ejemplo:

en-GB aquí en representa English y GB representa Great Briton

en-US aquí en representa English y US representa United States

Uso Culture para las funciones que dependen de Cultura como fecha, hora. y UICulture es para la carga correcta del archivo de recursos.

Cuestiones relacionadas