Internacionalización (i18n) en Java: guía completa con ejemplos

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 Java: haciendo la aplicación multilingüe



La internacionalización (a menudo abreviada como i18n — de la palabra internationalization, donde 18 es el número de letras entre la primera 'i' y la última 'n') — es el proceso de diseñar software de manera que pueda adaptarse a diferentes idiomas y características regionales sin modificar el código fuente. En Java, esta tarea se resuelve de manera elegante y potente mediante las API integradas: java.util.Locale, java.util.ResourceBundle y un conjunto de clases para formato.



En este artículo, analizaremos cómo implementar soporte para múltiples idiomas en una aplicación Java utilizando las herramientas estándar. Aprenderá a crear archivos de localización, cambiar dinámicamente el idioma y formatear correctamente números, fechas y monedas.



Componentes principales de i18n en Java



Java proporciona tres elementos clave para trabajar con la internacionalización:



  • Locale — un objeto que representa un idioma y región específicos (por ejemplo, ruso en Rusia — ru_RU, inglés en EE. UU. — en_US).
  • ResourceBundle — una clase para cargar recursos localizados (cadenas, mensajes, etiquetas) desde archivos .properties o clases.
  • Formateadores — clases del paquete java.text (NumberFormat, DateFormat, MessageFormat) para mostrar correctamente números, fechas y mensajes compuestos.


Paso 1: Creación de archivos de recursos



La forma tradicional de almacenar cadenas localizadas son los archivos .properties. Se crean siguiendo esta regla:



Messages.properties          # Archivo predeterminado (generalmente inglés)Messages_ru_RU.properties    # Para ruso (Rusia)Messages_de_DE.properties    # Para alemán (Alemania)Messages_fr.properties       # Para francés (sin especificar región)


Ejemplo del contenido del archivo Messages.properties (inglés, predeterminado):



welcome.message = Welcome to our application!farewell.message = Goodbye!date.format = dd/MM/yyyy


Ejemplo del contenido del archivo Messages_ru_RU.properties (ruso):



welcome.message = Добро пожаловать в наше приложение!farewell.message = До свидания!date.format = dd.MM.yyyy


Importante: los archivos deben estar en codificación ISO 8859-1 (Latin-1) o usar escape Unicode para caracteres que no pertenezcan a esta codificación. Para letras rusas se requerirá escape, por ejemplo \\u0414\\u043E\\u0431\\u0440\\u043E. Sin embargo, en entornos de desarrollo modernos (IntelliJ IDEA, Eclipse) y al compilar con Maven/Gradle, esto suele estar automatizado.



Paso 2: Carga de recursos en el código



Para usar cadenas localizadas, basta con crear un objeto Locale y obtener el ResourceBundle correspondiente:



import java.util.Locale;import java.util.ResourceBundle;

public class I18nDemo { public static void main(String[] args) { // Creamos una locale para ruso Locale ruLocale = new Locale("ru", "RU"); // Cargamos el bundle (nombre base del archivo - "Messages") ResourceBundle bundle = ResourceBundle.getBundle("Messages", ruLocale);

// Obtenemos las cadenas String welcome = bundle.getString("welcome.message"); String farewell = bundle.getString("farewell.message");

System.out.println(welcome); // Добро пожаловать в наше приложение! System.out.println(farewell); // До свидания! }}


Si no se encuentra el archivo para una locale específica, Java utiliza automáticamente el archivo predeterminado (Messages.properties).



Paso 3: Cambio dinámico de idioma



En una aplicación we

Recommendations