Localization using gettext

Em adição a Importando traduções em formato CSV, Godot também suporta carregar arquivos de tradução escritos no formato GNU gettext (.po).

Nota

Para obter uma introdução ao gettext, consulte A Quick Gettext Tutorial. Ele foi escrito com projetos em C em mente, mas muitos dos conselhos também se aplicam ao Godot (com exceção de xgettext).

Vantagens

  • gettext é um formato padrão, que pode ser editado usando qualquer editor de texto ou editores de GUI como Poedit.

  • gettext é suportado por plataformas de tradução como Transifex e Weblate, o que torna mais fácil para as pessoas colaborarem na localização.

  • Comparado ao CSV, gettext funciona melhor com sistemas de controle de versão como Git, já que cada locale tem seu próprio arquivo de mensagens.

  • Strings multilinhas são mais convenientes para editar em arquivos gettext em comparação com arquivos CSV.

Desvantagens

  • gettext é um formato mais complexo do que o CSV e pode ser mais difícil de entender para quem não conhece localização de software.

  • Pessoas que mantêm arquivos de localização terão que instalar ferramentas gettext em seus sistemas. No entanto, como o Godot não usa arquivos de objeto de mensagem compilados (.mo), os tradutores podem testar seu trabalho sem ter que instalar ferramentas gettext.

Ressalvas

  • Como o Godot usa seu próprio analisador de arquivo PO nos bastidores (que é mais limitado do que a implementação GNU gettext de referência), alguns recursos como pluralização não são suportados.

Instalando ferramentas gettext

As ferramentas gettext de linha de comando são necessárias para executar operações de manutenção, como atualizar arquivos de mensagens. Portanto, é altamente recomendável instalá-las.

  • Windows: Baixe um instalador a partir desta página. Qualquer arquitetura e tipo binário (compartilhado ou estático) funciona; em caso de dúvida, escolha o instalador estático de 64 bits.

  • macOS: Install gettext either using Homebrew with the brew install gettext command, or using MacPorts with the sudo port install gettext command.

  • Linux: Na maioria das distribuições, instale o pacote gettext do gerenciador de pacotes de sua distribuição.

Criando o modelo PO (POT) manualmente

O Godot atualmente não suporta a extração de strings de origem usando xgettext, então o arquivo .pot deve ser criado manualmente. Este arquivo pode ser colocado em qualquer lugar do diretório do projeto, mas recomenda-se mantê-lo em um subdiretório, pois cada local será definido em seu próprio arquivo.

Crie um diretório chamado locale no diretório do projeto. Neste diretório, salve um arquivo denominado messages.pot com o seguinte conteúdo:

# Don't remove the two lines below, they're required for gettext to work correctly.
msgid ""
msgstr ""

msgid "Hello world!"
msgstr ""

Mensagens em gettext são feitas de pares msgid e msgstr. msgid é a string fonte (geralmente em inglês), msgstr será a string traduzida.

O valor msgstr em arquivos de modelo PO (.pot) deve sempre estar vazio. A localização será feita nos arquivos .po gerados.

Criando o modelo PO (POT) usando pybabel

A ferramenta Python pybabel tem suporte para Godot e pode ser usada para criar e atualizar automaticamente o arquivo POT de seus arquivos de cena e scripts.

Depois de instalar babel e babel-godot, por exemplo, usando pip:

pip install babel babel-godot

Escreva um arquivo de mapeamento (por exemplo babelrc) que indicará quais arquivos pybabel precisa processar (observe que processamos GDScript como Python, o que geralmente é suficiente):

[python: **.gd]
encoding = utf-8

[godot_scene: **.tscn]
encoding = utf-8

Você pode então executar o pybabel assim:

pybabel extract -F babelrc -k text -k LineEdit/placeholder_text -k tr -o godot-l10n.pot .

Use a opção -k para especificar o que precisa ser extraído. Neste caso, os argumentos para tr() serão traduzidos, assim como as propriedades chamadas "text" (comumente usadas pelos nós de Controle) e a propriedade "placeholder_text" do LineEdit.

Criando um arquivo de mensagens a partir de um modelo PO

O comando msginit é usado para transformar um modelo PO em um arquivo de mensagens. Por exemplo, para criar um arquivo de localização em francês, use o seguinte comando enquanto estiver no diretório locale:

msginit --no-translator --input=messages.pot --locale=fr

O comando acima criará um arquivo chamado fr.po no mesmo diretório do modelo PO.

Alternativamente, você pode fazer isso graficamente usando o Poedit ou enviando o arquivo POT para a plataforma web de sua escolha.

Carregando um arquivo de mensagens no Godot

Para registrar um arquivo de mensagens como uma tradução em um projeto, abra as Configurações do Projeto e vá para a aba ** Localização . Em **Traduções, clique em Adicionar… e escolha o arquivo .po na caixa de diálogo do arquivo. O locale será inferido da propriedade "Language: <code>\n" no arquivo de mensagens.

Nota

Veja Internacionalizando jogos para mais informações sobre como importar e testar traduções no Godot.

Atualizando arquivos de mensagem para seguir o modelo PO

After updating the PO template, you will have to update message files so that they contain new strings, while removing strings that are no longer present in the PO template. This can be done automatically using the msgmerge tool:

# The order matters: specify the message file *then* the PO template!
msgmerge --update --backup=none fr.po messages.pot

Se você deseja manter um backup do arquivo da mensagem original (que seria salvo como fr.po~ neste exemplo), remova o argumento --backup=none.

Verificando a validade de um arquivo ou modelo PO

É possível verificar se a sintaxe de um arquivo gettext é válida executando o comando abaixo:

msgfmt fr.po --check

Se houver erros de sintaxe ou avisos, eles serão exibidos no console. Caso contrário, msgfmt não exibirá nada.