csharp-cultureinfo-culturas

Cómo usar CultureInfo y las culturas en C#

  • 6 min

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);
    }
}
Copied!

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 DateTimeFormatInfo que contiene las convenciones de fecha y hora para esa cultura.
  • NumberFormat: Un objeto NumberFormatInfo que 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);
    }
}
Copied!

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"));
    }
}
Copied!

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));
    }
}
Copied!

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));
    }
}
Copied!

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.