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.

Linha de comando

A linguagem pode ser testada ao executar o Godot a partir da linha de comando. Por exemplo, para testar um jogo em francês, o seguinte argumento pode ser fornecido:

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.