Preparando código C# para el mundo global: internacionalización de aplicaciones

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Por qué su aplicación C# necesita internacionalización?

Imagine: ha escrito un servicio genial para gestionar notas. Todo funciona, la interfaz es minimalista, los usuarios están contentos. Pero solo los de habla rusa. En cuanto sale al mercado de EE. UU. o Alemania, el proyecto se detiene. No porque el código sea malo, sino porque el botón «Сохранить» no se convierte en «Save», y el mensaje «Ошибка ввода» asusta a un extranjero.

Ese es el problema de la localización. En el mundo .NET, su solución se llama internacionalización C# (o i18n — de la palabra «internationalization», donde 18 es el número de letras entre i y n). Si usa C# y la plataforma .NET (Core, 5/6/7/8/9), ya tiene bajo el capó un potente conjunto de herramientas para hacer que su aplicación sea multilingüe. En este artículo, lo analizaremos en la práctica: desde recursos simples hasta el cambio de idioma «sobre la marcha».

Fundamentos: qué es la cultura y el idioma neutro

Antes de escribir código, aclaremos los términos. En .NET, dos clases clave del espacio de nombres System.Globalization se encargan de la localización:

  • CultureInfo — objeto que describe el idioma y los estándares regionales (por ejemplo, ru-RU, en-US, de-DE).
  • CurrentUICulture — la cultura actual de la interfaz de usuario. El sistema se basa en ella al buscar traducciones.
  • CurrentCulture — formato de fechas, números, moneda. También se puede cambiar, pero para las traducciones, el primero es importante.

En las aplicaciones C#, normalmente usamos archivos de recursos (.resx). Son archivos XML donde se almacenan cadenas, imágenes y otros datos vinculados a una cultura específica. Por ejemplo:

  • Messages.resx — cadenas predeterminadas (generalmente inglés).
  • Messages.ru.resx — traducción al ruso.
  • Messages.de.resx — traducción al alemán.

Cuando la aplicación se inicia, .NET selecciona automáticamente el archivo que corresponde a la UICulture actual. Si no hay una coincidencia exacta, usa el archivo neutro (base).

Creando el primer archivo de recursos en Visual Studio

Supongamos que tenemos una aplicación de consola o un proyecto ASP.NET Core. Agreguemos una carpeta Resources y dentro de ella el archivo Strings.resx. Lo llenamos:

Nombre       | Valor
-------------|-------------------
WelcomeMsg   | Welcome to our app!
GoodbyeMsg   | Goodbye!

Ahora creamos Strings.ru.resx:

Nombre       | Valor
-------------|-------------------
WelcomeMsg   | Добро пожаловать в наше приложение!
GoodbyeMsg   | До свидания!

Tenga en cuenta: los nombres de las claves deben coincidir. Después de guardar, Visual Studio generará automáticamente la clase Strings con acceso a las cadenas a través de propiedades estáticas.

Cambio de idioma mediante programación

Para que la internacionalización C# funcione, debe establecer la cultura deseada al inicio de la aplicación (por ejemplo, en Main o Startup). Así es como se ve:

using System.Globalization;
using System.Threading;

// Establecemos el idioma ruso de la interfaz
CultureInfo culture = new CultureInfo("ru-RU");
Thread.CurrentThread.CurrentUICulture = culture;
Thread.CurrentThread.CurrentCulture = culture; // para formatos de fecha/número

// Ahora accedemos a los recursos
Console.WriteLine(Strings.WelcomeMsg);  // Muestra: Добро пожаловать в наше приложение!

Si desea permitir que el usuario cambie de idioma «sobre la marcha» (sin reiniciar), simplemente vuelva a llamar a estas líneas después de cambiar la cultura. En ASP.NET Core, para esto se usa middleware:

app.UseRequestLocalization(new RequestLocalizationOptions
{
    DefaultRequestCulture = new RequestCulture("en-US")
});

Blogs

Book Recommendations