Como preparar uma tradução de plug-in do WordPress?

19

Qual é a melhor maneira de criar um plugin pronto para tradução?

Ele não precisa ser traduzido desde o início, mas deve ser facilmente traduzível para que outros desenvolvedores de diferentes culturas possam participar do processo de localização do plug-in.

Nabil Kadimi
fonte

Respostas:

38

1. Escreva com a localização em mente

Não use echoou print()produza saída de texto; 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á a tradução - no idioma atual - do texto fornecido como o primeiro parâmetro. _e()produzirá o texto enquanto __()o retornará.

O segundo parâmetro é o domínio do texto , você o usará para informar ao WordPress que o texto fornecido como o primeiro parâmetro pertence a este plugin, você pode usar qualquer nome que desejar, mas eu prefiro usar o mesmo nome que usei para o plugin arquivo de 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 tenha concluído, o WordPress não o usa.
  • Arquivo A.mo : é criado automaticamente pelo Poedit sempre que você salva um arquivo .po, tudo o que você pode fazer com esses arquivos é carregá-los ou carregá-los novamente sempre que você criar ou atualizar um arquivo .po. O WordPress obtém traduções de arquivos .mo .

Abra o Poedit e crie um novo catálogo (Arquivo ›Novo Catálogo ...) com estas configurações:

  • Informações do projeto: use suas informações (ou sua equipe), o idioma e o país devem corresponder ao idioma padrão do plug-in
  • Caminhos:
    • Caminho base: .
    • Caminhos: remova tudo e adicione ..(armazenaremos o arquivo de idioma em um subdiretório de plug-in chamado de idiomas)
  • Palavras-chave: remover tudo e adicionar __e_e

Salve o catálogo e verifique os arquivos do plug-in em busca de texto traduzível, pressionando o botão Atualizar. Quando a atualização terminar, feche esse catálogo, você não precisará atualizar esse arquivo, a menos que adicione novas strings traduzíveis (por exemplo, incluídas ou ) no seu plug-in./my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin.pot__()_e()

Agora vamos criar a primeira tradução (usarei fr_FR):

Usando Podeit , crie um catálogo a partir de um arquivo POT (Arquivo ›Novo Catálogo a partir do Arquivo POT ...) :

  • Informações do projeto: Use suas informações (ou sua equipe), altere o idioma e o país , usarei francês e França
  • Caminhos: Não mude
  • Palavras-chave: Não chame

Salve o catálogo como . Traduza algumas ou todas as seqüências de caracteres, salve o arquivo .po novamente, faça o upload dos arquivos .po e .mo./my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin-fr_FR.po

Observe que sempre que você salva um arquivo .po, um arquivo .mo é gerado com o mesmo nome, o nome do arquivo .po é crucial , ele é composto da concatenação do domínio de texto do plug-in (my-plugin) e do código do idioma ( fr_FR), sempre nomeie seus arquivos .po para plugins como este: [textdomain] - [locale] .po , eis 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 for atualizado com novo texto, atualize o arquivo po, traduza novas strings e recarregue novamente os arquivos .po e .mo

3. Instrua o plugin a carregar o texto traduzido para o idioma atual

Em algum lugar do seu plug-in, você deve dizer ao WordPress para usar o seu arquivo .mo, você pode fazê-lo usando este código no início do seu arquivo de plug-in:

function my_plugin_init() {
  load_plugin_textdomain( 'my-plugin', false, 'my-plugin/languages' );
}
add_action('init', 'my_plugin_init');

Substitua my-pluginpelo nome do seu plug-in no 1º e no 3º parâmetro da load_plugin_textdomainfunção.

4. Teste e solucione problemas

Alguns motivos podem não funcionar:

  • Strings não são importadas para o arquivo .pot ou .po
    • → Configurações incorretas do catálogo (caminho ou palavras-chave ou ambas)
  • O texto não é traduzido no site WordPress
    • → arquivo .mo para esse idioma ausente ou com um nome de arquivo errado
    • → 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 avisará sobre erros)
Nabil Kadimi
fonte
3
+1 Boa redação :) Dê uma olhada neste artigo: Carregando os arquivos de idioma do WordPress da maneira certa , " Diretrizes práticas para aliviar o problema de carregar arquivos de idiomas no WordPress ". :::::: Glotpress e o grupo Polyglots também podem ser mencionados.
Brasofilo
Obrigado por esta instrução agradável! Pena de mencionar que load_plugin_textdomain () precisa ser chamado em cada método, onde você usa _e () e __ ()
Andreas
2

A resposta de Nabil é bastante completa, mas há uma variação fácil, desde que:

  1. Seu plugin está no repositório de plugins WordPress.org

  2. Você deseja exigir que seu plug-in funcione apenas com o WordPress 4.6 ou superior.

Os passos são os seguintes:

  1. No arquivo readme.txt do seu plug-in, adicione Requires at least: 4.6. Consulte https://developer.wordpress.org/plugins/wordpress-org/how-your-readme-txt-works/

  2. se ainda não estiver, faça o upload do seu plug-in no repositório de plug-ins do WordPress. Veja https://wordpress.org/plugins/developers/add/ .

  3. Encontre o domínio slug / texto do seu plugin. Para fazer isso, acesse a página do seu plug-in no repositório de plug-ins do WordPress. O URL será como https://wordpress.org/plugins/your-plugin-slug/ . Essa última parte da URL, "your-plugin-slug", é a lesma do seu plugin. É isso que você usa para o domínio de texto das funções de tradução.

  4. Use as funções de tradução do WordPress em seu plugin (como __e(‘hello’, ‘my-plugin-domain’);). Apenas certifique-se de usar o domínio de texto do plug-in correto, adquirido na etapa anterior. Consulte https://developer.wordpress.org/plugins/internationalization/how-to-internationalize-your-plugin/ para obter mais informações.

Se você seguir as etapas acima, o WordPress cuidará de:

  • Analisando através do seu Plugin todas as strings traduzíveis (não é necessário instalar e executar o Poedit ou algo assim)
  • Facilite para qualquer pessoa contribuir com traduções do seu plug-in no translate.wordpress.org (não é necessário ter seu próprio site dedicado à tradução do plug-in ou ter um processo personalizado para que os tradutores enviem suas traduções para você)
  • quando alguém usa seu plug-in, o WordPress cuida para verificar se ele é traduzido para o idioma deles e, se for o caso, para mostrá-lo no idioma deles (não é necessário que você ou você carregue os arquivos de tradução no site deles)

(Resposta da minha postagem no blog aqui: https://cmljnelson.blog/2019/01/01/the-really-lazy-way-to-translate-a-wordpress-plugin/ )

thespacecamel
fonte
Não sei por que isso foi prejudicado. Foi o que fiz para tornar o wordpress.org/plugins/print-my-blog pronto para tradução (e o plugin foi traduzido com sucesso)
thespacecamel
Isso significa que, se um plugin / tema não estiver no repositório de plug-ins do WordPress, mas usar o domínio de texto de um plug-in, o wordpress carregará os arquivos de tradução incorretos?
bodo 14/04
Boa pergunta @bodo. Se um plug-in indicar usar o domínio de texto de outro plug-in que está no repositório wp.org, acho que o WordPress usará com prazer os arquivos de tradução do plug-in wp.org. Mas desculpe, não tenho certeza.
thespacecamel 23/04