Ich denke, ich habe eine Lösung gefunden, aber bevor ein wenig
Prämisse
load_theme_textdomain()
und load_child_theme_textdomain()
sind grundsätzlich gleich, der einzige Unterschied ist der Standardpfad, den sie verwenden:
- Sie erhalten die aktuelle Sprache (mit
get_locale()
) und fügen die relative .mo- Datei dem als Argument übergebenen Pfad hinzu.
- Dann rufen
load_textdomain()
sie als Argument sowohl die Textdomäne als auch den resultierenden Pfad zur .mo-Datei auf.
load_textdomain
Lädt dann die .mo-Datei in die globale Textdomänenvariable, aber wie wir aus der Quelle lesen können :
Wenn die Domain bereits existiert, werden die Übersetzungen zusammengeführt.
Wenn beide Sätze den gleichen String haben, wird die Übersetzung vom ursprünglichen Wert übernommen.
Um also nur die Zeichenfolgen des übergeordneten Themas zu überschreiben / ersetzen, müssen Sie eine benutzerdefinierte Mo-Datei für die übergeordnete Textdomäne laden, die nur die übersetzten Zeichenfolgen enthält, bevor das übergeordnete Thema die Mo-Datei lädt.
Lösung
Am Ende habe ich einfach einen Ordner mit dem Namen des übergeordneten Themas (nur zur Vereinfachung) in den Ordner für die Sprachen des untergeordneten Themas erstellt und meine benutzerdefinierten .mo-Dateien für die übergeordnete Textdomäne (eine für die Sprache) in das xx_XX.mo
Formular eingefügt. wo xx_XX
ist der Sprachcode).
Und dann habe ich functions.php
während der after_setup_theme
Aktion eine Zeile in meine untergeordnete Designdatei eingefügt, die sich in der Nähe der Zeile befindet , in der die .mo-Datei für die Textdomäne meines untergeordneten Themas geladen wird:
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' );
} );
Da die functions.php
Datei des untergeordneten Themas vor der des übergeordneten Themas geladen wird, hat dieser Satz von Zeichenfolgen Vorrang vor der Übersetzung des übergeordneten Themas (oder ich hätte die Priorität einfach mithilfe des dritten Parameters der add_action
Funktion festlegen können).
Hinweis: Ich hätte load_child_theme_textdomain
anstelle von verwenden können load_theme_textdomain
, wie in der Prämisse gesagt, wäre es das gleiche gewesen.
Ein 2019 Update für Wordpress 5.0.1.
quelle