1. Escreva com a localização em mente
Não use echo
ou print()
para produzir saída de texto. Em vez disso, use as funções do WordPress __()
e _e()
:
/** Not localization friendly */
echo "Welcome to my plugin";
// OR
print("Welcome to my plugin");
/** Localization friendly */
_e('Welcome to my plugin', 'my-plugin');
// OR
$my_text = __('Welcome to my plugin', 'my-plugin');
echo $my_text;
_e()
e __()
fornecerão a tradução - no idioma atual - do texto fornecido como o primeiro parâmetro. _e()
produzirá o texto, enquanto __()
irá devolvê-lo.
O segundo parâmetro é o domínio de texto , você o usará para dizer ao WordPress que o texto fornecido como o primeiro parâmetro pertence a este plugin, você pode usar qualquer nome que quiser, mas eu prefiro use o mesmo nome que usei para o arquivo plugin do diretório, acho mais intuitivo.
Como gerar texto dinâmico como: "Olá < nome de usuário >"?
Com __()
e sprintf()
:
/** Get the username */
$username = 'Magictrick';
/** Not localization friendly */
echo "Hello $username";
/** Localization friendly */
printf(__('Hello %s', 'my-plugin'), $username);
// OR
$my_text = sprintf(__('Hello %s', 'my-plugin'), $username);
echo $my_text;
2. Prepare os arquivos .pot / .po / .mo
Definições
- O arquivo .pot : é colocado à sua disposição pelo desenvolvedor do plugin e é usado como ponto de partida para criar novas traduções, o WordPress não o utiliza.
- Um arquivo .po : é um arquivo de tradução que você ou outra pessoa iniciou e, talvez concluído, o WordPress não o utiliza.
- Arquivo A.mo : é criado automaticamente pelo Poedit sempre que você salva um arquivo .po, tudo o que você pode fazer com esses arquivos é fazer o upload ou recarregá-los sempre que criar ou atualizar um arquivo .po. WordPress obtém traduções de arquivos .mo .
Abra Poedit e crie um novo catálogo (Arquivo ›Novo Catallog ...) com estas configurações:
- Informações do projeto: use as informações do seu (ou de sua equipe), o idioma e o país devem corresponder ao idioma padrão do seu plug-in
- Caminhos:
- Caminho base:
.
- Caminhos: remova todos os & adicione
..
, (nós iremos armazenar o arquivo de idioma em um subdiretório de plugin chamado languages)
- Caminho base:
- Palavras-chave: remova todos os & adicione
__
e_e
Salve o catálogo como /my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin.pot
e varrer os arquivos do seu plug-in para texto traduzível pressionando o botão Atualizar. Quando a atualização terminar, feche esse catálogo, não será necessário atualizar esse arquivo, a menos que você adicione novas strings traduzíveis (ou seja, incluídas em __()
ou _e()
) ao seu plug-in.
Agora vamos criar a primeira tradução (eu usarei fr_FR):
Usando Podeit , crie um catálogo a partir de um arquivo POT (Arquivo ›Novo catálogo do arquivo POT ...) :
- Informações do projeto: use suas informações (ou de sua equipe), altere o idioma e o país , eu usarei o francês e a França
- Caminhos: não altere
- Palavras-chave: não chage
Salve o catálogo como /my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin-fr_FR.po
. Traduza algumas ou todas as strings, salve o arquivo .po novamente, faça upload dos arquivos .po e .mo.
Observe que sempre que você salva um arquivo .po, um arquivo .mo é gerado com o mesmo nome, o nome do arquivo .po é crucial , é composto da concatenação do domínio de texto do plug-in (my-plugin) e a localidade do idioma (fr_FR), sempre nomeie seus arquivos .po para plugins como este: [textdomain] - [locale] .po , aqui estão alguns exemplos:
- Italiano / Itália:
wpcf7-it_IT.po
- Português / Brasil:
wpcf7-pt_BR.po
- Árabe:
wpcf7-ar.po
... Sim!
Sempre que o plug-in é atualizado com o novo texto, atualize o arquivo po, traduza novas strings e faça o upload novamente dos arquivos .po e .mo
3. Instrua o plug-in a carregar o texto traduzido para o idioma atual
Em algum lugar do seu plugin, você deve dizer ao WordPress para usar o seu arquivo .mo, você pode fazê-lo usando este código no começo do seu arquivo de plugin:
function my_plugin_init() {
load_plugin_textdomain( 'my-plugin', false, 'my-plugin/languages' );
}
add_action('init', 'my_plugin_init');
Substitua my-plugin
pelo nome do seu plug-in no primeiro e no terceiro parâmetro da função load_plugin_textdomain
.
4. Teste e solucione problemas
Algumas razões podem não funcionar:
- As strings não são importadas para o arquivo .pot ou .po
- → Configurações incorretas do catálogo (caminho, palavras-chave ou ambos)
- O texto não está traduzido no site do WordPress
- → arquivo .mo do idioma ausente ou com nome de arquivo incorreto
- → Domínio de texto não usado (substitua
_e('my text')
por_e('my text', 'my-plugin')
) - → Domínio de texto não carregado (use o exemplo acima com os parâmetros corretos, o WP não o avisará sobre erros)