Penso di aver trovato una soluzione, ma prima un po '
Premessa
load_theme_textdomain()
e load_child_theme_textdomain()
sono sostanzialmente uguali, l'unica differenza è il percorso predefinito che usano:
- ottengono la lingua corrente (usando
get_locale()
) e aggiungono il relativo file .mo al percorso passato come argomento;
- quindi chiamano
load_textdomain()
passando come argomento sia il textdomain sia il percorso risultante al file .mo.
Poi load_textdomain
carica il file .mo nella variabile textdomain globale, ma come si può leggere dalla fonte :
Se il dominio esiste già, le traduzioni verranno unite.
Se entrambi gli insiemi hanno la stessa stringa, verrà presa la traduzione dal valore originale.
Quindi, al fine di sovrascrivere / sostituire solo le stringhe del tema principale che vogliamo, dobbiamo caricare un file .mo personalizzato per il dominio di testo principale, contenente solo quelle stringhe tradotte, prima che il tema principale carichi il suo file .mo.
Soluzione
Alla fine, ho semplicemente creato una cartella con il nome del tema principale (solo per comodità) nella cartella delle lingue del tema figlio e ho inserito al suo interno i miei file .mo personalizzati per il dominio di testo principale (uno per la lingua, nel xx_XX.mo
modulo, dov'è xx_XX
il codice della lingua).
E poi ho aggiunto una riga nel functions.php
file del tema del mio bambino durante l' after_setup_theme
azione, vicino a quella che carica il file .mo per il mio dominio del testo del tema del bambino:
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' );
} );
Poiché il functions.php
file del tema figlio viene caricato prima di quello del padre, questo set di stringhe avrà la precedenza sulla traduzione del tema padre (o avrei potuto semplicemente impostare la priorità usando il terzo parametro della add_action
funzione).
Nota: avrei potuto usare load_child_theme_textdomain
invece di load_theme_textdomain
, come detto nella premessa, sarebbe stato lo stesso.