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.ferreira.tec.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