O caminho das pedras pra gerar traduções de temas do WordPress

Primeiro temos que reescrever tudo que escreve texto fixo na tela, usando as funções de internacionalização do WordPress. Então em vez de:

<h2>Notícias</h2>

Fazemos:

<h2><?php echo __( ‘Notícias’, ‘text-domain’ ); ?></h2>

Ou ainda:

<h2><?php _e( ‘Notícias’, ‘text-domain’ ); ?></h2>

“text-domain” é o “domínio” desse arquivo de tradução. No nosso caso, o nome do diretório do tema (“meu-tema”).

Se quisermos dar uma força para o tradutor, podemos usar as funções que fornecem “contexto”; tipassim:

<h2><?php echo _x( ‘Notícias’, ‘Título da tela de notícias’, ‘meu-tema’ ); ?></h2>

Ou ainda:

<h2><?php _ex( ‘Notícias’, ‘Título da tela de notícias’, ‘meu-tema’ ); ?></h2>

Existe mais um monte de funções prontas bem interessantes: pra já escapar atributos de tags, pra lidar com singular e plural, pra lidar com data…


Depois disso, temos que carregar este “domínio de texto” no nosso tema. Colocamos uma linha a mais no cabeçalho do style.css :

/*
Theme Name: Meu Tema
Theme URI: https://meutema.com.br
Author: Ederson Peka
Author URI: https://ederson.peka.nom.br
Text Domain: meu-tema
Version: 1.0
*/

E uma função num hook:

public static function load_my_theme_textdomain() {
    load_theme_textdomain( ‘meu-tema’, get_template_directory() . ‘/languages’ );
}
add_action( ‘after_setup_theme’, ‘load_my_theme_textdomain’ );


Aí temos que criar um diretório “languages” dentro do tema, e dentro dele vão os arquivos de tradução. Só agora começa a complicar, rsrs.

O primeiro arquivo que criamos é um “modelo de tradução”. A extensão é “.pot”. Este arquivo tem todas as strings que existem para serem traduzidas, e as linhas onde estariam as traduções ficam vazias. É o arquivo que a gente vai copiar pra criar cada tradução de cada idioma. Um pedacinho dele:

#: footer.php:42
msgctxt “Citação de Douglas Adams”
msgid “Resumindo: É um fato bem conhecido que todos que querem governar as outras pessoas são, por isso mesmo, os menos indicados para isso.”
msgstr “”

#: footer.php:934
msgctxt “Citação de Alvo Dumbledore”
msgid “Palavras são, na minha nada humilde opinião, nossa inesgotável fonte de magia. Capazes de formar grandes sofrimentos e também de remediá-los.”
msgstr “”

Chamei esse arquivo de “meu-tema.pot”. Você pode criar esse arquivo na mão, varrendo todas as strings utilizadas no tema (trabalho escravo), ou usar uma ferramenta que faz isso automagicamente. Eu usei o wp-cli, dentro do diretório do tema, assim:

/caminho/para/wp-cli.phar i18n make-pot . languages/meu-tema.pot –ignore-domain

Ele gerou um meu-tema.pot pra mim dentro da pasta languages. Aí eu copiei esse cara para languages/es_ES.po , abri no editor e comecei a traduzir:

#: footer.php:42
msgctxt “Citação de Douglas Adams”
msgid “Resumindo: É um fato bem conhecido que todos que querem governar as outras pessoas são, por isso mesmo, os menos indicados para isso.”
msgstr “Resumamos: es un hecho bien conocido que las personas que más deseos tienen de gobernar a la gente son, ipso facto, las menos adecuadas para ello.”

#: footer.php:934
msgctxt “Citação de Alvo Dumbledore”
msgid “Palavras são, na minha nada humilde opinião, nossa inesgotável fonte de magia. Capazes de formar grandes sofrimentos e também de remediá-los.”
msgstr “Las palabras son, en mi no tan humilde opinión, nuestra más inagotable fuente de magia, capaces de infringir daño y de remediarlo.”


Depois que o arquivo .po estiver pronto, temos que compilá-lo (Java feelings?) para um arquivo binário .mo. Eu usei um comando chamado msgfmt:

msgfmt languages/es_ES.po -o languages/es_ES.mo

Esse comando vem num pacote chamado gettext (pode ser necessário um apt-get install gettext ).


Depois disso tudo, eu entrei no painel, em “Configurações”, e selecionei o idioma “Español”. Finalmente, as strings que eu traduzi apareceram em espanhol no site! Glória a Deux!


Problemão: toda vez que a gente gerar o arquivo modelo (.pot), e copiá-lo por cima do arquivo de tradução (.po), ele vai estar vazio e a gente vai ter que colocar as traduções tudinovo. Como resolver isso?

msgmerge languages/es_ES.po languages/meu-tema.pot > languages/es_ES.po

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s