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_textdomain
Charge 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.mo
forme, où xx_XX
est le code de langue).
Et puis j'ai ajouté une ligne dans mon functions.php
fichier de thème enfant pendant l' after_setup_theme
action, 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.php
fichier 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_action
fonction).
Remarque: j'aurais pu utiliser load_child_theme_textdomain
au lieu de load_theme_textdomain
, comme dit dans la prémisse, cela aurait été le même.