Internacionalización (i18n) en C# (.NET)
\nLa 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\nConceptos 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
Cómo funciona i18n en C# (.NET)
\nEn .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.
// Ejemplo de archivo de recursos (Strings.resx)\n// Key: HelloMessage, Value: "Hello, World!"\n// Strings.ru.resx\n// Key: HelloMessage, Value: "Привет, мир!"\n\n\nImplementación paso a paso de la localización en una aplicación de consola
\n- \n
- 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. \n - Agregue cadenas: inserte la clave
Greetingy el valorHello, user!. \n - Cree un archivo para el idioma ruso:
Strings.ru.resxcon la misma clave y el valorПривет, пользователь!. \n - Escriba el código para establecer la cultura y obtener la cadena localizada: \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\nLocalización de aplicaciones web ASP.NET Core
\nEn 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\n1. Configuración en Program.cs
\nusing 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 También en la biblioteca
Cliente Elasticsearch C++: guía completa para trabajar con el motor de búsqueda
Registro para Swift (iOS/macOS): mejores soluciones
Migraciones de bases de datos en Java: revisión de herramientas y bibliotecas
Envío de correo electrónico en JavaScript (Node.js): Nodemailer, SendGrid, Mailgun
Biblioteca estándar de C# (.NET): revisión completa