Organizando e Personalizando Traduções no WordPress com Theme Child

Entendendo a Estrutura

Criar uma estrutura personalizada para armazenar seus arquivos de tradução dentro de um tema filho é uma excelente prática, especialmente para traduções que você deseja manter personalizadas e independentes das atualizações dos temas e plugins originais.

Estrutura Proposta:

seu-tema-filho/
├── languages/
│   ├── plugins/
│   │   └── seu-plugin/seu-plugin.mo
│   └── themes/
│       └── seu-tema/seu-tema.mo
└── functions.php

Código no functions.php

Para que o WordPress reconheça e utilize os arquivos de tradução localizados nesta estrutura personalizada, você precisará adicionar o seguinte código ao seu arquivo functions.php:

PHP

function meu_tema_filho_load_textdomain() {
    load_textdomain( 'seu-plugin', get_stylesheet_directory() . '/languages/plugins/seu-plugin/seu-plugin.mo' );
    load_textdomain( 'seu-tema', get_stylesheet_directory() . '/languages/themes/seu-tema/seu-tema.mo' );
}
add_action( 'after_setup_theme', 'meu_tema_filho_load_textdomain' );

Explicando o Código:

  • meu_tema_filho_load_textdomain(): Essa função define o nome da função que carregará os arquivos de tradução.
  • load_textdomain(): Essa função é nativa do WordPress e é responsável por carregar um arquivo .mo de tradução.
  • seu-plugin e seu-tema: Substitua esses nomes pelos textdomains (identificadores únicos) dos seus plugins e temas, respectivamente.
  • get_stylesheet_directory(): Essa função retorna o caminho completo até a pasta raiz do seu tema filho.
  • add_action( 'after_setup_theme', 'meu_tema_filho_load_textdomain' ): Essa linha adiciona a função criada anteriormente ao hook after_setup_theme, garantindo que ela seja executada após a inicialização do tema.

Criando os Arquivos .mo

Para criar os arquivos .mo, você pode utilizar ferramentas como o Poedit. Essa ferramenta permite que você edite os arquivos .po (que contêm as strings a serem traduzidas) e gere os arquivos .mo compilados, que são os que o WordPress realmente utiliza.

Vantagens dessa Estrutura:

  • Personalização: Você pode personalizar as traduções sem afetar os arquivos originais dos plugins e temas.
  • Organização: Mantém os arquivos de tradução organizados em uma estrutura lógica.
  • Atualizações: As suas traduções personalizadas não serão sobrescritas por futuras atualizações.

Considerações Adicionais:

  • Textdomains: Certifique-se de utilizar os textdomains corretos para cada plugin e tema. Você pode encontrar o textdomain nos arquivos .pot ou nos próprios arquivos de código dos plugins e temas.
  • Múltiplos Idiomas: Se você precisar suportar múltiplos idiomas, você pode criar pastas adicionais dentro da pasta languages para cada idioma.
  • Plugins de Tradução: Existem plugins como o Loco Translate que facilitam a criação e gestão de traduções no WordPress.

Exemplo Completo:

PHP

function meu_tema_filho_load_textdomain() {
    load_textdomain( 'woocommerce', get_stylesheet_directory() . '/languages/plugins/woocommerce/woocommerce.mo' ); // Exemplo para WooCommerce
    load_textdomain( 'my-custom-theme', get_stylesheet_directory() . '/languages/themes/my-custom-theme/my-custom-theme.mo' );
}
add_action( 'after_setup_theme', 'meu_tema_filho_load_textdomain' );

Com essa configuração, o WordPress buscará os arquivos de tradução personalizados para o WooCommerce e para o seu tema personalizado dentro da estrutura definida.

Dica: Para facilitar a criação e gestão dos arquivos de tradução, você pode utilizar ferramentas como o Poedit ou plugins como o Loco Translate.

Exemplo 2:

// Traduções Personalizadas pt-br
function meu_tema_filho_load_textdomain() {
    load_textdomain( 'elessi-theme', get_stylesheet_directory() . '/languages/themes/elessi-theme-pt_BR.mo', 'pt_BR' );
    load_textdomain( 'nasa-core', get_stylesheet_directory() . '/languages/plugins/nasa-core-pt_BR.mo', 'pt_BR' );
}
add_action( 'after_setup_theme', 'meu_tema_filho_load_textdomain', 20 );

Como corrigir possíveis problemas nas traduções personalizadas:

Vamos tentar resolver o problema das traduções personalizadas no seu site WordPress. Aqui estão algumas verificações e ajustes que podem ajudar:

  1. Verifique o Text Domain: Certifique-se de que os text domains utilizados no código correspondem exatamente aos text domains usados nos arquivos de idioma dos plugins e temas. O código fornecido usa nasa-core e elessi-theme. Verifique se são esses mesmos text domains que aparecem nas chamadas __() ou _e() nos arquivos PHP dos plugins e temas.
  2. Carregar Traduções do Tema Filho: Como você está usando um tema filho, verifique se as traduções estão sendo carregadas corretamente do tema pai antes de adicionar suas traduções personalizadas. Você pode ajustar o código para garantir isso:
   // Traduções Personalizadas pt-br
   function meu_tema_filho_load_textdomain() {
       load_child_theme_textdomain( 'elessi-theme', get_stylesheet_directory() . '/languages/themes' );
       load_textdomain( 'nasa-core', get_stylesheet_directory() . '/languages/plugins/nasa-core-pt_BR.mo' );
   }
   add_action( 'after_setup_theme', 'meu_tema_filho_load_textdomain' );
  1. Estrutura de Pastas e Nomes de Arquivos: Confirme que os arquivos .mo estão na estrutura correta. Para temas, normalmente, a estrutura de pastas seria:
   wp-content/themes/seu-tema-filho/languages/themes/elessi-theme-pt_BR.mo

Para plugins:

   wp-content/themes/seu-tema-filho/languages/plugins/nasa-core-pt_BR.mo
  1. Permissões do Servidor: Certifique-se de que as permissões dos arquivos e pastas permitem que o WordPress acesse e carregue os arquivos .mo. Geralmente, as permissões devem ser 755 para pastas e 644 para arquivos.
  2. Cache: Além do cache do navegador, considere limpar qualquer cache de plugins de cache ou do próprio servidor.
  3. Depuração: Ative o modo de depuração do WordPress para verificar se há algum erro relacionado ao carregamento dos arquivos de tradução:
   define('WP_DEBUG', true);
   define('WP_DEBUG_LOG', true);
   define('WP_DEBUG_DISPLAY', false);

Os logs serão salvos em wp-content/debug.log.

  1. Prioridade do Hook: Tente ajustar a prioridade do hook para garantir que as traduções sejam carregadas no momento certo:
   add_action( 'after_setup_theme', 'meu_tema_filho_load_textdomain', 20 );
  1. Função de Depuração: Adicione uma função de depuração para confirmar se os arquivos .mo estão sendo carregados corretamente:
   function meu_tema_filho_load_textdomain() {
       $result_nasa = load_textdomain( 'nasa-core', get_stylesheet_directory() . '/languages/plugins/nasa-core-pt_BR.mo' );
       $result_elessi = load_textdomain( 'elessi-theme', get_stylesheet_directory() . '/languages/themes/elessi-theme-pt_BR.mo' );

       if ( ! $result_nasa ) {
           error_log( 'Falha ao carregar nasa-core-pt_BR.mo' );
       }
       if ( ! $result_elessi ) {
           error_log( 'Falha ao carregar elessi-theme-pt_BR.mo' );
       }
   }

Verifique o log de erros para mensagens de falha.

Essas verificações e ajustes devem ajudar a identificar o problema. Ao seguir esses passos, você terá um controle mais preciso sobre as traduções do seu site WordPress e poderá manter suas personalizações mesmo após atualizações de plugins e temas.