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.

Esse comportamento de tradução automática pode ser indesejável em certos casos. Por exemplo, ao usar um rótulo para exibir o nome de um jogador, você provavelmente não deseja que o nome do jogador seja traduzido se corresponder a uma chave de tradução. Para desativar a tradução automática em um nó específico, use Object.set_message_translation e envie um Object.notification para atualizar a tradução:

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 nós de interface do usuário mais complexos, como OptionButtons, talvez seja necessário usar isso:

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.

Testando traduções

Você pode querer testar a tradução de um projeto antes de lançá-lo. Godot fornece duas maneiras de fazer isso.

Primeiro, em Configurações do Projeto, em Input Devices > Locale, há uma propriedade Test. Configure esta propriedade para o código de localidade do idioma que você deseja testar. Godot executará o projeto com essa localidade quando o projeto for executado (seja do editor ou quando exportado).

../../_images/locale_test.png

Lembre-se de que, como essa é uma configuração do projeto, ela aparecerá no controle de versão quando for definida como um valor não vazio. Portanto, ele deve ser definido como um valor vazio antes de confirmar as alterações no controle de versão.

O idioma pode ser testado 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.