Acho que encontrei uma solução, mas antes de um pouco
Premissa
load_theme_textdomain()
e load_child_theme_textdomain()
são basicamente iguais, a única diferença é o caminho padrão que eles usam:
- eles obtêm o idioma atual (usando
get_locale()
) e adicionam o arquivo .mo relativo ao caminho passado como argumento;
- eles chamam
load_textdomain()
passando como argumento o domínio de texto e o caminho resultante para o arquivo .mo.
Em seguida, load_textdomain
carrega o arquivo .mo na variável global de domínio de texto, mas como podemos ler a partir da fonte :
Se o domínio já existir, as traduções serão mescladas.
Se ambos os conjuntos tiverem a mesma sequência, a tradução do valor original será realizada.
Portanto, para substituir / substituir apenas as cadeias de caracteres do tema pai que desejamos, precisamos carregar um arquivo .mo personalizado para o domínio de texto pai, contendo apenas as cadeias traduzidas, antes que o tema pai carregue seu arquivo .mo.
Solução
No final, simplesmente criei uma pasta com o nome do tema pai (apenas por conveniência) na pasta de idiomas do tema filho e coloquei nela meus arquivos .mo personalizados para o domínio de texto pai (um para o idioma, no xx_XX.mo
formato, onde xx_XX
está o código do idioma).
E, em seguida, adicionei uma linha no meu functions.php
arquivo de tema filho durante a after_setup_theme
ação, próximo à que carrega o arquivo .mo para o domínio de texto do meu tema filho:
add_action( 'after_setup_theme', function () {
// load custom translation file for the parent theme
load_theme_textdomain( 'parent-textdomain', get_stylesheet_directory() . '/languages/parent-theme' );
// load translation file for the child theme
load_child_theme_textdomain( 'my-child-theme', get_stylesheet_directory() . '/languages' );
} );
Como o functions.php
arquivo do tema filho é carregado antes do pai, esse conjunto de seqüências terá precedência sobre a tradução do tema pai (ou eu poderia ter definido a prioridade usando o terceiro parâmetro da add_action
função).
Nota: Eu poderia ter usado em load_child_theme_textdomain
vez de load_theme_textdomain
, como dito na premissa, seria o mesmo.