Una cultura es el conjunto de convenciones de idioma y región que usamos para representar datos como fechas, números y monedas.
En C#, la clase CultureInfo, dentro del espacio de nombres System.Globalization, permite aplicar estas convenciones sin reescribir la lógica de la aplicación.
Qué representa una cultura
En programación, el concepto de cultura se refiere a la combinación de varios factores que afectan a los formatos y convenciones en una región determinada. Estos factores incluyen:
- Idioma: El idioma principal en el que se comunica la región (por ejemplo, inglés, español, francés).
- Convenciones regionales: Incluyen la manera en que se muestran fechas, números, horas y monedas.
- Formato de datos: Como la puntuación decimal, el uso de comas o puntos para separar miles, y el formato de la moneda.
En C#, la clase CultureInfo proporciona toda la funcionalidad necesaria para trabajar con culturas, permitiendo que una aplicación sea adaptada a diferentes lenguas y regiones sin necesidad de reescribir el código base.
La clase CultureInfo
La clase CultureInfo forma parte del espacio de nombres System.Globalization y permite representar una cultura o configuración regional. La instancia de CultureInfo proporciona acceso a la información sobre un idioma específico y su convención regional, como la moneda, las fechas y los números.
Crear una instancia de CultureInfo
Para crear una instancia de CultureInfo, se puede utilizar el constructor pasando un código de cultura, que es una cadena que representa una cultura específica. Los códigos de cultura son identificadores estándar como "en-US" (Inglés de Estados Unidos) o "es-ES" (Español de España).
using System;
using System.Globalization;
class Program
{
static void Main()
{
// Crear una instancia de CultureInfo para Estados Unidos
CultureInfo culturaUS = new CultureInfo("en-US");
// Crear una instancia de CultureInfo para España
CultureInfo culturaES = new CultureInfo("es-ES");
Console.WriteLine("Cultura US: " + culturaUS.Name);
Console.WriteLine("Cultura ES: " + culturaES.Name);
}
}En este ejemplo, se crean dos instancias de CultureInfo: una para Estados Unidos y otra para España. El método Name devuelve el nombre completo de la cultura, que incluye el idioma y el país.
Propiedades de CultureInfo
Algunas de las propiedades clave de la clase CultureInfo son:
- Name: El nombre completo de la cultura (por ejemplo,
"en-US"). - DisplayName: El nombre de la cultura en un formato legible (por ejemplo,
"Inglés (Estados Unidos)"). - DateTimeFormat: Un objeto
DateTimeFormatInfoque contiene las convenciones de fecha y hora para esa cultura. - NumberFormat: Un objeto
NumberFormatInfoque define las convenciones para la representación de números. - NumberFormat.CurrencySymbol: El símbolo de la moneda para la cultura especificada.
Usar la propiedad NumberFormat
La propiedad NumberFormat de CultureInfo permite acceder a las convenciones para mostrar números en una cultura específica. A través de esta propiedad, se puede obtener información sobre el separador decimal, los símbolos de los miles, y otros detalles de formato numérico.
using System;
using System.Globalization;
class Program
{
static void Main()
{
// Crear una instancia de CultureInfo para Alemania
CultureInfo culturaDE = new CultureInfo("de-DE");
// Mostrar el separador decimal y el separador de miles
Console.WriteLine("Separador decimal en Alemania: " + culturaDE.NumberFormat.NumberDecimalSeparator);
Console.WriteLine("Separador de miles en Alemania: " + culturaDE.NumberFormat.NumberGroupSeparator);
}
}En este caso, para la cultura alemana (de-DE), los números tienen un formato diferente al de la cultura estadounidense, ya que en Alemania se usa una coma como separador decimal y un punto para los miles.
Cambiar la cultura durante la ejecución
En aplicaciones que necesitan cambiar dinámicamente entre diferentes configuraciones regionales, se puede modificar la cultura del hilo actual. Esto es útil, por ejemplo, cuando el usuario cambia el idioma en una aplicación.
using System;
using System.Globalization;
using System.Threading;
class Program
{
static void Main()
{
// Cambiar la cultura del hilo a Español (México)
Thread.CurrentThread.CurrentCulture = new CultureInfo("es-MX");
// Mostrar la fecha en el formato de la cultura actual
Console.WriteLine(DateTime.Now.ToString("D"));
}
}En este ejemplo, la cultura del hilo se cambia a es-MX (Español de México), y la fecha se muestra de acuerdo con las convenciones locales de esa región.
Formatear fechas y números
Con la clase CultureInfo, es fácil formatear fechas y números de acuerdo con las convenciones de una cultura específica. El método ToString en tipos como DateTime y Double puede aceptar un objeto CultureInfo para adaptar el formato.
Formatear fechas
using System;
using System.Globalization;
class Program
{
static void Main()
{
// Crear una fecha
DateTime fecha = new DateTime(2024, 11, 8);
// Formatear la fecha según la cultura de Estados Unidos
CultureInfo culturaUS = new CultureInfo("en-US");
Console.WriteLine("Fecha en US: " + fecha.ToString("D", culturaUS));
// Formatear la fecha según la cultura de España
CultureInfo culturaES = new CultureInfo("es-ES");
Console.WriteLine("Fecha en España: " + fecha.ToString("D", culturaES));
}
}Aquí, la fecha se presenta de diferentes maneras según la cultura configurada. El formato D genera una fecha larga con el orden y los nombres propios de cada cultura.
Formatear números
using System;
using System.Globalization;
class Program
{
static void Main()
{
// Crear un número
double numero = 1234567.89;
// Formatear el número según la cultura de Japón
CultureInfo culturaJP = new CultureInfo("ja-JP");
Console.WriteLine("Número en Japón: " + numero.ToString("N", culturaJP));
// Formatear el número según la cultura de Alemania
CultureInfo culturaDE = new CultureInfo("de-DE");
Console.WriteLine("Número en Alemania: " + numero.ToString("N", culturaDE));
}
}Este código muestra cómo el mismo número se presenta de manera diferente según la cultura: en Japón se usan comas como separadores de miles y en Alemania se usa un punto.