Je pense avoir trouvé une solution, mais avant un peu
Prémisse
load_theme_textdomain()et load_child_theme_textdomain()sont fondamentalement égaux, la seule différence est le chemin par défaut qu'ils utilisent:
- ils récupèrent la langue courante (en utilisant
get_locale()) et ajoutent le fichier .mo relatif au chemin passé en argument;
- puis ils appellent
load_textdomain()passer comme argument à la fois le domaine de texte et le chemin d'accès résultant vers le fichier .mo.
load_textdomainCharge ensuite le fichier .mo dans la variable globale de domaine de texte, mais comme nous pouvons le lire à partir de la source :
Si le domaine existe déjà, les traductions seront fusionnées.
Si les deux ensembles ont la même chaîne, la traduction de la valeur d'origine sera prise.
Ainsi, afin de remplacer / remplacer uniquement les chaînes du parent de thème que nous voulons, nous devons charger un fichier .mo personnalisé pour le domaine de texte parent, contenant uniquement les chaînes traduites, avant que le thème parent ne charge son fichier .mo.
Solution
À la fin, j'ai simplement créé un dossier avec le nom du thème parent (juste pour plus de commodité) dans le dossier des langues du thème enfant, et y ai placé mes fichiers .mo personnalisés pour le domaine de texte parent (un pour la langue, sous la xx_XX.moforme, où xx_XXest le code de langue).
Et puis j'ai ajouté une ligne dans mon functions.phpfichier de thème enfant pendant l' after_setup_themeaction, près de celle qui charge le fichier .mo pour mon domaine de texte de thème enfant:
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' );
} );
Étant donné que le functions.phpfichier du thème enfant est chargé avant celui du parent, cet ensemble de chaînes aura priorité sur la traduction du thème parent (ou j'aurais pu simplement définir la priorité en utilisant le troisième paramètre de la add_actionfonction).
Remarque: j'aurais pu utiliser load_child_theme_textdomainau lieu de load_theme_textdomain, comme dit dans la prémisse, cela aurait été le même.