Internacionalizando los juegos

Introducción

Sería excelente que el mundo hablara solo un idioma. Desafortunadamente para nosotros los desarrolladores, ese no es el caso. Mientras que los juegos independientes o de nicho no suelen necesitar localización, los juegos dirigidos a un mercado más masivo a menudo requieren localización. Godot ofrece muchas herramientas para que este proceso sea más sencillo, por lo que este tutorial es más bien una colección de consejos y trucos.

La localización suele ser realizada por estudios específicos contratados para el trabajo y, a pesar de la gran cantidad de software y formatos de archivo disponibles para ello, la forma más común de realizar la localización hasta el día de hoy sigue siendo con hojas de cálculo. El proceso de crear las hojas de cálculo e importarlas ya está cubierto en el tutorial Importar traducciones, por lo que éste podría verse más como una continuación del mismo.

Nota

Usaremos la demo oficial como ejemplo, puedes descargarla desde la Asset Library.

Configuración de la traducción importada

Las traducciones pueden ser actualizadas y reimportadas cuando cambian, pero tienen que ser añadidas al proyecto. Esto se hace en Proyecto → Ajustes del proyecto → Traducciones:

../../_images/localization_dialog.png

Este cuadro de diálogo permite añadir o eliminar traducciones en todo el proyecto.

Localización de recursos

También es posible indicar a Godot para que abra versiones alternativas de assets (recursos) dependiendo del idioma actual. Para ello existe la pestaña "Remapeos":

../../_images/localization_remaps.png

Selecciona el recurso a ser remapeado, y las alternativas para cada localización.

Conversión de claves a texto

Algunos Control como Button, Label, etc. obtendrán automáticamente una traducción cada vez que se establezca una clave en lugar de un texto. Por ejemplo, si se asigna una etiqueta "MAIN_SCREEN_GREETING1" y existe una clave para diferentes idiomas en las traducciones, ésta se convertirá automáticamente.

Este comportamiento de traducción automática puede ser indeseable en ciertos casos. Por ejemplo, cuando usa una etiqueta para mostrar el nombre de un jugador, lo más probable es que no desee que el nombre del jugador se traduzca si coincide con una clave de traducción. Para deshabilitar la traducción automática en un nodo específico, use Object.set_message_translation y envíe un Object.notification para actualizar la traducción:

func _ready():
    # This assumes you have a node called "Label" as a child of the node
    # that has the script attached.
    var label = get_node("Label")
    label.set_message_translation(false)
    label.notification(NOTIFICATION_TRANSLATION_CHANGED)

Para nodos de interfaz de usuario más complejos, como OptionButtons, es posible que deba usar esto en su lugar:

func _ready():
    var option_button = get_node("OptionButton")
    option_button.set_message_translation(false)
    option_button.notification(NOTIFICATION_TRANSLATION_CHANGED)
    option_button.get_popup().set_message_translation(false)
    option_button.get_popup().notification(NOTIFICATION_TRANSLATION_CHANGED)

Para código, se puede utilizar la función Object.tr(). Esto simplemente buscará el texto en las traducciones y lo convertirá si lo encuentra:

level.set_text(tr("LEVEL_5_NAME"))
status.set_text(tr("GAME_STATUS_" + str(status_index)))

Redimensionar los controles

El mismo texto en diferentes idiomas puede variar mucho en longitud. Por este motivo, asegúrate de leer el tutorial sobre Tamaño y anclas, ya que puede ser útil tener tamaños de control ajustados dinámicamente. Ref:`Container <class_Container>, así como las múltiples opciones en Label para el ajuste del texto.

TranslationServer

Godot dispone de un servidor para la gestión de traducciones de bajo nivel llamado TranslationServer. Las traducciones pueden agregarse o eliminarse durante el tiempo de ejecución, y también se puede cambiar el idioma actual.

Probando traducciones

Es posible que desees probar la traducción de un proyecto antes de lanzarlo. Godot ofrece dos formas de hacerlo.

Primero, en la configuración del proyecto, en Dispositivos de entrada > Localización, hay una propiedad llamada Test. Configura esta propiedad con el código de idioma de la localización que deseas probar. Godot ejecutará el proyecto con esa localización cuando se ejecute el proyecto (ya sea desde el editor o al exportarlo).

../../_images/locale_test.png

Ten en cuenta que, dado que esta es una configuración del proyecto, aparecerá en el control de versiones cuando se establezca en un valor no vacío. Por lo tanto, debes asegurarte de restablecerlo a un valor vacío antes de realizar cambios y confirmarlos en el control de versiones.

El lenguaje puede ser probado cuando se ejecuta Godot desde la línea de comandos. Por ejemplo, para probar un juego en francés, se pueden proporcionar los siguientes argumentos:

godot --language fr

Traducir el nombre del proyecto

El nombre del proyecto se convierte en el nombre de la aplicación cuando se exporta a diferentes sistemas operativos y plataformas. Para especificar el nombre del proyecto en más de un idioma, crea un nuevo ajuste application/name en el diálogo de Ajustes del Proyecto y añádele el identificador de localización. Por ejemplo, para español, sería application/name_es:

../../_images/localized_name.png

Si no está seguro del código de idioma a usar, consulte la list of locale codes.