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.

Testing translations

You may want to test a project's translation before releasing it. Godot provides two ways to do this.

First, in the Project Settings, under Input Devices > Locale, there is a Test property. Set this property to the locale code of the language you want to test. Godot will run the project with that locale when the project is run (either from the editor or when exported).

..image:: img/locale_test.png

Keep in mind that since this is a project setting, it will show up in version control when it is set to a non-empty value. Therefore, it should be set back to an empty value before committing changes to version control.

Translations can also be tested when running Godot from the command line. For example, to test a game in French, the following argument can be supplied:

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.