Creo que encontré una solución, pero antes de un poco
Premisa
load_theme_textdomain()
y load_child_theme_textdomain()
son básicamente iguales, la única diferencia es la ruta predeterminada que usan:
- obtienen el idioma actual (usando
get_locale()
) y agregan el archivo relativo .mo a la ruta que se pasa como argumento;
- luego llaman a
load_textdomain()
pasando como argumento tanto el dominio de texto como la ruta resultante al archivo .mo.
Luego, load_textdomain
carga el archivo .mo en la variable de dominio de texto global, pero como podemos leer en source :
Si el dominio ya existe, las traducciones se fusionarán.
Si ambos conjuntos tienen la misma cadena, se tomará la traducción del valor original.
Por lo tanto, para anular / reemplazar solo las cadenas del tema principal que queremos, necesitamos cargar un archivo .mo personalizado para el dominio de texto principal, que contiene solo las cadenas traducidas, antes del El tema principal carga su archivo .mo.
Solución
Al final, simplemente creé una carpeta con el nombre del tema principal (solo por conveniencia) en la carpeta de idiomas del tema secundario, y puse en ella mis archivos personalizados .mo para el dominio de texto principal (uno para el idioma, en la forma xx_XX.mo
, donde xx_XX
es el código de idioma).
Y luego agregué una línea en el archivo functions.php
de mi tema secundario durante la acción after_setup_theme
, cerca de la que carga el archivo .mo para el dominio de texto del tema secundario:
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' );
} );
Debido a que el archivo functions.php
del tema secundario se carga antes que el principal, este conjunto de cadenas tendrá prioridad sobre la traducción del tema principal (o podría haber establecido la prioridad usando el tercer parámetro de% co_de función%).
Nota: podría haber usado add_action
en lugar de load_child_theme_textdomain
, como se dijo en la premisa de que hubiera sido lo mismo.