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): Guía completa



La internacionalización (a menudo abreviada como i18n — del inglés «internationalization», donde entre la primera letra 'i' y la última 'n' hay 18 caracteres) es el proceso de diseñar software de manera que pueda adaptarse fácilmente a diferentes idiomas y estándares regionales sin realizar cambios en el código fuente. En el ecosistema C# (.NET), la internacionalización es una capacidad integrada y potente que permite a los desarrolladores crear aplicaciones verdaderamente multilingües.



En este artículo, analizaremos en detalle cómo implementar i18n en .NET (incluyendo .NET Core, .NET 5/6/7/8 y .NET Framework). Conocerá conceptos clave como culturas, archivos de recursos (RESX), localización de cadenas, imágenes y formato de datos.



Conceptos principales



Antes de pasar al código, es importante comprender dos términos clave:

  • Globalización (Globalization): El proceso de diseñar una aplicación que admita interfaces localizadas y datos regionales para usuarios de diferentes culturas. En .NET, esto se logra mediante las clases CultureInfo y RegionInfo.
  • Localización (Localization): El proceso de adaptar una aplicación ya globalizada para un idioma/región específico (por ejemplo, traducir textos, configurar formatos de fecha y moneda).


.NET utiliza culturas (Cultures), que se especifican en el formato idioma-región (por ejemplo, ru-RU — ruso (Rusia), en-US — inglés (EE. UU.), de-DE — alemán (Alemania)).



Paso 1: Creación de archivos de recursos (.resx)



La forma principal de almacenar cadenas localizadas en .NET son los archivos de recursos (.resx). Son archivos XML que se compilan en el ensamblado.



Veamos un ejemplo. Crearemos archivos para los idiomas ruso e inglés:



  1. Resources.resx — archivo de recursos predeterminado (generalmente en inglés).
  2. Resources.ru.resx — archivo para el idioma ruso.
  3. Resources.de.resx — archivo para el idioma alemán.


Dentro de cada archivo, agregaremos recursos de cadena con los mismos nombres pero valores diferentes:



Resources.resx (idioma predeterminado — en-US):

Name: GreetingValue: Hello, World!

Name: WelcomeMessageValue: Welcome to our application!


Resources.ru.resx (Ruso):

Name: GreetingValue: Привет, мир!

Name: WelcomeMessageValue: Добро пожаловать в наше приложение!


Paso 2: Acceso a los recursos en código C#



.NET genera automáticamente una clase fuertemente tipada para acceder a los recursos. Supongamos que los archivos están en la carpeta Resources del proyecto. Entonces, el acceso sería así:



using System;using System.Globalization;using System.Threading;

class Program{ static void Main(string[] args) { // Establecemos la cultura para el hilo actual Thread.CurrentThread.CurrentUICulture = new CultureInfo("ru-RU"); Thread.CurrentThread.CurrentCulture = new CultureInfo("ru-RU");

// Obtenemos las cadenas localizadas string greeting = Resources.Messages.Greeting; string welcome = Resources.Messages.WelcomeMessage;

Console.WriteLine(greeting); // Mostrará: Привет, мир! Console.WriteLine(welcome); // Mostrará: Добро пожаловать в наше приложение! }}


Tenga en cuenta: Resources.Messages es una clase generada automáticamente basada en el nombre de su archivo RESX (si el archivo se llama Messages.resx).



Paso 3: Localización en ASP.NET Core



En aplicaciones web ASP.NET Core, el proceso

Recommendations