Internacionalizando jogos

Introdução

It would be great if the world spoke only one language (Seria ótimo se o mundo falasse um só idioma) Infelizmente para nós desenvolvedores, esse não é o caso. Enquanto jogos independentes ou de nicho normalmente não precisam de localização, jogos visando um mercado mais massivo muitas vezes requerem localização. O Godot oferece muitas ferramentas para fazer este processo mais direto, então este tutorial é mais como uma coleção de dicas e truques.

A localização geralmente é feita por estúdios específicos contratados para a função e, apesar da enorme quantidade de softwares e formatos de arquivos disponíveis para isso, a forma mais comum de fazer localização até hoje ainda é com planilhas. O processo de criar as planilhas e importá-las já é abordado no tutorial Importando traduções, então este poderia ser visto mais como uma continuação daquele.

Nota

Utilizaremos a demonstração oficial como exemplo; você pode baixá-la da Biblioteca de Assets.

Configurando a tradução importada

As traduções podem ser atualizadas e reimportadas quando são alteradas, mas ainda precisam ser adicionadas ao projeto. Isso é feito em Projeto → Configurações do projeto → Localização:

../../_images/localization_dialog.png

A caixa de diálogo acima é usada para adicionar ou remover traduções em todo o projeto.

Localizando recursos

Também é possível instruir o Godot para usar versões alternativas de assets (recursos), dependendo do idioma atual. A aba Remapeamentos* pode ser usada para isso:

../../_images/localization_remaps.png

Selecione o recurso a ser remapeado e, em seguida, adicione algumas alternativas para cada locale.

Convertendo chaves em texto

Alguns controles, como Button e Label irão automaticamente buscar uma tradução se o seu texto corresponder a uma chave de tradução. Por exemplo, se o texto de um rótulo for "MAIN_SCREEN_GREETING1" e essa chave existir na tradução atual, o texto será traduzido automaticamente.

This automatic translation behavior may be undesirable in certain cases. For instance, when using a Label to display a player's name, you most likely don't want the player's name to be translated if it matches a translation key. To disable automatic translation on a specific node, use Object.set_message_translation and send a Object.notification to update the translation:

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)

For more complex UI nodes such as OptionButtons, you may have to use this instead:

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)

No código, a função Object.tr() pode ser usada. Isso apenas pesquisará o texto nas traduções e o converterá se encontrado:

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

Tornando os controles redimensionáveis

O mesmo texto em diferentes idiomas pode variar muito em comprimento. Para isso, certifique-se de ler o tutorial em Size and anchors, pois ajustar dinamicamente os tamanhos de controle pode ajudar. Container pode ser útil, assim como as opções de quebra de texto disponíveis em Label.

TranslationServer

O Godot tem um servidor que lida com gerenciamento de tradução de baixo nível chamado TranslationServer. As traduções podem ser adicionadas ou removidas durante o tempo de execução; o idioma atual também pode ser alterado em tempo de execução.

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

Traduzindo o nome do projeto

O nome do projeto se torna o nome do aplicativo ao exportar para diferentes sistemas operacionais e plataformas. Para especificar o nome do projeto em mais de um idioma, crie uma nova configuração application/name nas Configurações do projeto e anexe o identificador do locale a ele. Por exemplo, para o espanhol, isto seria application/name_es:

../../_images/localized_name.png

Se você não tem certeza sobre o código do idioma a ser usado, consulte a lista de códigos de locale.