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

\n\n

La internacionalización (abreviada i18n — de la palabra internationalization, donde entre la primera letra 'i' y la última 'n' hay 18 letras) es el proceso de diseñar software de manera que pueda adaptarse a diferentes idiomas y regiones sin realizar cambios en el código fuente. Java proporciona un potente conjunto de herramientas integradas para la internacionalización, que permite a los desarrolladores crear fácilmente aplicaciones multilingües.

\n\n

En este artículo, analizaremos en detalle los componentes principales de i18n en Java: Locale, ResourceBundle, archivos de propiedades y MessageFormat. Aprenderá a estructurar correctamente los recursos localizados y a manejar excepciones relacionadas con la falta de traducción.

\n\n

1. Componentes principales de i18n en Java

\n\n

La internacionalización en Java se basa en tres elementos clave:

\n\n
    \n
  • Locale — un objeto que representa un área geográfica, política o cultural específica. Contiene información sobre el idioma, el país (opcional) y la variante (opcional).
  • \n
  • ResourceBundle — una clase que carga recursos localizados (cadenas, formatos) desde archivos de propiedades (.properties) u otras fuentes.
  • \n
  • Archivos de propiedades — archivos de texto con extensión .properties, donde se almacenan pares clave=valor. El nombre del archivo se construye según las reglas: NombreBase_idioma_PAIS.properties.
  • \n
\n\n

Ejemplo de estructura de archivos para los idiomas ruso e inglés:

\n\n
Messages.properties          // Archivo predeterminado\nMessages_en.properties       // Inglés (general)\nMessages_en_US.properties    // Inglés (EE. UU.)\nMessages_ru_RU.properties    // Ruso (Rusia)\n
\n\n

2. Creación de archivos de propiedades

\n\n

Creemos el archivo base Messages.properties (valores predeterminados en inglés):

\n\n
greeting=Hello\nfarewell=Goodbye\napp.name=My Application\n
\n\n

Ahora creemos la localización en ruso Messages_ru_RU.properties:

\n\n
greeting=Здравствуйте\nfarewell=До свидания\napp.name=Моё приложение\n
\n\n

Para inglés (EE. UU.) — Messages_en_US.properties:

\n\n
greeting=Hello\nfarewell=Goodbye\napp.name=My Application\n
\n\n

3. Uso de Locale y ResourceBundle

\n\n

Para cargar cadenas localizadas se utiliza el siguiente código:

\n\n
import java.util.Locale;\nimport java.util.ResourceBundle;\n\npublic class I18nExample {\n    public static void main(String[] args) {\n        // Establecemos la configuración regional (por ejemplo, ruso, Rusia)\n        Locale ruLocale = new Locale("ru", "RU");\n        ResourceBundle bundle = ResourceBundle.getBundle("Messages", ruLocale);\n        \n        // Obtenemos las cadenas localizadas\n        String greeting = bundle.getString("greeting");\n        String farewell = bundle.getString("farewell");\n        String appName = bundle.getString("app.name");\n        \n        System.out.println(greeting + " " + farewell); // Здравствуйте До свидания\n        System.out.println(appName);                   // Моё приложение\n    }\n}\n
\n\n

Si no se encuentra la configuración regional, Java utiliza automáticamente una cadena de búsqueda:

\n
    \n
  1. Primero busca un archivo con coincidencia exacta (Messages_ru_RU.properties).
  2. \n
  3. Luego — sin país (Messages_ru.properties).
  4. \n
  5. Después — el archivo base (Messages.properties).
  6. \n
  7. Si no se encuentra nada — se lanza la excepción MissingResourceException.
  8. \n
\n\n

4. Formateo de mensajes con MessageFormat

\n\n

A menudo las cadenas contienen partes variables. Para esto se utiliza MessageFormat. Ejemplo con datos dinámicos:

\n\n<

Recommendations