Internacionalización (i18n) en C# (.NET): guía completa

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

Internacionalización (i18n) en C# (.NET)

\n

La internacionalización (abreviada i18n — del inglés "internationalization", donde 18 es el número de letras entre la primera "i" y la última "n") es el proceso de diseño de software que permite adaptarlo a diferentes idiomas, regiones y características culturales sin realizar cambios en el código fuente. En la plataforma .NET (C#), la i18n se implementa a través de los mecanismos de localización y globalización, que están integrados en el núcleo del framework.

\n\n

Conceptos principales de i18n en .NET

\n
    \n
  • Globalización — diseño de la aplicación teniendo en cuenta la compatibilidad con múltiples culturas (por ejemplo, formato de fechas, números, monedas).
  • \n
  • Localización — adaptación de la interfaz a una cultura específica (traducción de textos, imágenes, sonidos).
  • \n
  • Cultura (Culture) — combinación de idioma y configuración regional, indicada mediante un código como ru-RU, en-US, de-DE.
  • \n
  • Archivos de recursos (.resx) — archivos XML que contienen pares "clave-valor" para cada configuración regional.
  • \n
\n\n

Cómo funciona i18n en C# (.NET)

\n

En .NET, para la localización se utilizan archivos de recursos. El archivo principal (por ejemplo, Strings.resx) contiene las cadenas en el idioma predeterminado (generalmente inglés). Para cada idioma adicional se crea un archivo separado con el sufijo del código de cultura: Strings.ru.resx (ruso), Strings.de.resx (alemán). Durante la compilación, estos archivos se convierten en ensamblados satélite que se cargan según la cultura actual del hilo.

\n\n
// Ejemplo de archivo de recursos (Strings.resx)\n// Key: HelloMessage, Value: "Hello, World!"\n// Strings.ru.resx\n// Key: HelloMessage, Value: "Привет, мир!"\n
\n\n

Implementación paso a paso de la localización en una aplicación de consola

\n
    \n
  1. Cree un archivo de recursos en el proyecto: haga clic derecho en el proyecto → Add → New Item → Resources File. Asígnele el nombre Strings.resx.
  2. \n
  3. Agregue cadenas: inserte la clave Greeting y el valor Hello, user!.
  4. \n
  5. Cree un archivo para el idioma ruso: Strings.ru.resx con la misma clave y el valor Привет, пользователь!.
  6. \n
  7. Escriba el código para establecer la cultura y obtener la cadena localizada:
  8. \n
\n\n
using System.Globalization;\nusing System.Resources;\nusing System.Threading;\n\nclass Program\n{\n    static void Main()\n    {\n        // Establecemos la cultura rusa\n        Thread.CurrentThread.CurrentUICulture = new CultureInfo("ru-RU");\n        Thread.CurrentThread.CurrentCulture = new CultureInfo("ru-RU");\n\n        // Obtenemos el administrador de recursos\n        ResourceManager rm = new ResourceManager("YourNamespace.Strings", typeof(Program).Assembly);\n        string greeting = rm.GetString("Greeting");\n\n        Console.WriteLine(greeting); // Mostrará: "Привет, пользователь!"\n    }\n}\n
\n\n

Localización de aplicaciones web ASP.NET Core

\n

En ASP.NET Core, la i18n se implementa a través de middleware y servicios integrados. Veamos un ejemplo de configuración para MVC o Razor Pages.

\n\n

1. Configuración en Program.cs

\n
using Microsoft.AspNetCore.Localization;\nusing System.Globalization;\n\nvar builder = WebApplication.CreateBuilder(args);\n\nbuilder.Services.AddLocalization(options => options.ResourcesPath = "Resources");\nbuilder.Services.AddControllersWithViews()\n    .AddViewLocalization()\n    .AddDataAnnotationsLocalization();\n\nvar app = builder.Build();\n\nvar supportedCultures = new[] { new CultureInfo("en-US"), new CultureInfo("ru-RU") };\napp.UseRequestLocalization(new RequestLocalizationOptions\n{\n    DefaultRequestCulture = new RequestCulture("en-US"),\n    SupportedCultures = supportedCultures,\n    SupportedUICultures = supportedCul                    

Recommendations