Cuando trabajamos en la internacionalización y localización de un juego con LibGDX, una herramienta fundamental que utilizamos es el i18n bundle. Este recurso nos permite agrupar todas las cadenas de texto que nuestro juego utiliza, facilitando su traducción y adaptación a diferentes idiomas y regiones. Pero, ¿cómo podemos traducir realmente nuestro juego para que se muestre en otro idioma?
Para empezar, debemos crear un nuevo archivo bundle para cada idioma que queramos soportar. Este archivo debe ubicarse en la misma carpeta que el bundle original y seguir una convención de nombres muy concreta. El nombre base del archivo es el mismo que el bundle por defecto, seguido de un guion bajo y el código del idioma según el estándar ISO 639-1. Por ejemplo, para español, el archivo se llamaría locale-es.properties.
El estándar ISO 639-1 define códigos de dos letras para la mayoría de los idiomas, como es para español, pt para portugués, ko para coreano o de para alemán. En casos excepcionales donde no exista un código de dos letras, se puede usar el estándar ISO 639-2, que emplea códigos de tres letras, aunque lo ideal es usar siempre el primero si está disponible.
Una vez creado el archivo con el nombre correcto, podemos traducir las cadenas que queramos. No es necesario traducir todo el contenido, lo que resulta muy útil si el juego es extenso o si algunas cadenas no requieren traducción. Para traducir, simplemente copiamos las claves (keys) que queremos traducir del bundle original y les asignamos el valor en el idioma correspondiente. Por ejemplo, si tenemos una clave mainmenu.play que en inglés es Play, en el archivo locale-es.properties pondremos:
mainmenu.play=jugar
Cuando ejecutamos el juego, si el idioma del sistema está configurado en español, el juego mostrará jugar en lugar de Play. Si alguna clave no está traducida, el sistema usará la versión por defecto en inglés, evitando errores o fallos.
Pero la localización puede ir más allá del idioma y adaptarse a regiones específicas dentro de un mismo idioma. Por ejemplo, en español existen variaciones entre países como España y Argentina. Para manejar esto, creamos archivos de bundle que incluyan además el código del país, siguiendo el estándar ISO 3166, que define códigos de dos letras para cada país en mayúsculas. Así, para Argentina, el archivo se llamaría locale-es-AR.properties.
En este archivo podemos modificar las cadenas para que reflejen las particularidades del español argentino. Por ejemplo, la frase ¿Seguro que quieres salir? podría cambiarse a ¿Seguro que querés salir? para adaptarse al uso local. El sistema de LibGDX y Java detecta automáticamente el idioma y la región configurados en el dispositivo o sistema operativo, y buscará primero en el archivo más específico (locale-es-AR.properties), luego en el archivo general del idioma (locale-es.properties), y finalmente en el bundle por defecto si no encuentra la cadena.
Este mecanismo nos permite ofrecer una experiencia personalizada y culturalmente adecuada a los jugadores, respetando las diferencias lingüísticas y regionales sin complicaciones.
Además, la clase que maneja estos bundles en Java permite utilizar métodos como format para insertar valores dinámicos dentro de las cadenas, lo que es muy útil para mostrar números, nombres o cualquier otro dato variable dentro de los textos traducidos, respetando el orden y la gramática de cada idioma.
En definitiva, con esta estructura basada en estándares internacionales y la detección automática del idioma y región del usuario, podemos traducir y localizar nuestro juego de forma sencilla y eficiente, mejorando la experiencia de los jugadores en todo el mundo.