Fehlende Übersetzungen in Ihrem WordPress-Plugin oder -Theme finden

Wenn Teile Ihres Plugins oder Themes nach der Verwendung von PTC unübersetzt erscheinen, verwenden Sie diesen Leitfaden, um zu überprüfen, ob der String Teil Ihres Projekts ist und ob WordPress die korrekte Datei lädt.

Überprüfen Sie, ob der String in PTC verfügbar ist

Gehen Sie vom PTC-Dashboard zum Tab Übersetzungen und suchen Sie nach dem ursprünglichen String. Wenn Sie ihn nicht sehen, hat PTC ihn nicht erhalten. Dies bedeutet normalerweise eines der folgenden:

  • Der String fehlt in Ihrer POT-Datei

Wenn Ihre POT nicht alle übersetzbaren Strings enthält, erstellen Sie sie mit WP-CLI neu. Befolgen Sie dann die Schritte in unserem Leitfaden zur Internationalisierung von WordPress-Themes und -Plugins von Anfang an.

  • Der Text ist nicht in einer GetText-Funktion umschlossen

Stellen Sie sicher, dass aller übersetzbarer Text in __() oder _e() umschlossen ist und die korrekte Textdomäne verwendet.

Beispiel:

__('Hello, world!', 'your-plugin');

Weitere Details finden Sie unter Schritt 2 unseres Leitfadens zur Übersetzung von WordPress-Themes und -Plugins.

  • JavaScript-Strings wurden nicht als übersetzbar markiert

Wenn Ihr Plugin übersetzbaren Text in JavaScript enthält:

  1. Gehen Sie zu PTC → Einstellungen und klicken Sie auf Überwachte Dateien. Bearbeiten Sie die entsprechende Ressourcendatei und aktivieren Sie „Ist dies ein WordPress-Projekt mit lokalisierbarem JavaScript?“
PTC mitteilen, dass Ihr Produkt übersetzbaren Text in Javascript enthält

Dies weist PTC an, JavaScript-Dateien nach übersetzbaren Strings zu durchsuchen. Es wird Übersetzungen neu generieren und einen neuen Merge-Request mit aktualisierten Dateien erstellen.

  1. Stellen Sie sicher, dass WordPress weiß, wo die von PTC erstellten .json Übersetzungsdateien geladen werden sollen.

Wenn die .json Dateien im /languages/ Verzeichnis Ihres Plugins oder Themes abgelegt sind, rufen Sie wp_set_script_translations() mit dem korrekten Pfad auf.

Für Plugins:

wp_set_script_translations( 'script-handle', 'text-domain', plugin_dir_path( __FILE__ ) . 'languages' );

Für Themes:

wp_set_script_translations( 'script-handle', 'text-domain', get_template_directory() . '/languages' );

Dies weist WordPress explizit an, .json Dateien aus Ihrem Plugin- oder Theme-Ordner zu laden.

Bestätigen Sie, dass WordPress Ihre Übersetzungsdateien lädt

Wenn der übersetzte String in PTC erscheint, aber immer noch nicht in Ihrem Plugin angezeigt wird, lädt WordPress möglicherweise nicht die korrekte Übersetzungsdatei. Überprüfen Sie Folgendes:

  • Textdomäne wird korrekt geladen

Wenn Sie eingebettete Plugins oder mehrere Domänen verwenden, stellen Sie sicher, dass jede mit load_plugin_textdomain() oder load_theme_textdomain() geladen wird.

  • Übersetzungen von PTC werden nicht überschrieben

Standardmäßig priorisiert WordPress Übersetzungsdateien in /wp-content/languages/. Wenn Ihr Plugin oder Theme Übersetzungen enthält, die von der WordPress-Community erstellt wurden, können diese Ihre gebündelten .mo-Dateien überschreiben.

Um sicherzustellen, dass WordPress stattdessen Ihre .mo-Dateien lädt, wenden Sie den load_textdomain_mofile Filter an.

Anwendungsbeispiel für Plugins

Fügen Sie die Filterfunktion zur Haupt-PHP-Datei Ihres Plugins hinzu (zum Beispiel my-plugin.php):

function my_plugin_load_embedded_translation_file( $mofile, $domain ) {
  // Replace 'my-domain' with your actual plugin's text domain
	if ( 'my-domain' === $domain && false !== strpos( $mofile, WP_LANG_DIR . '/plugins/' ) ) {
		$locale = apply_filters( 'plugin_locale', determine_locale(), $domain );
		$local_mofile = WP_PLUGIN_DIR . '/' . dirname( plugin_basename( __FILE__ ) ) . '/languages/' . $domain . '-' . $locale . '.mo';
		
		if ( file_exists( $local_mofile ) ) {
			return $local_mofile; // Use bundled translation if available
		}		
	}
	return $mofile;
}
add_filter( 'load_textdomain_mofile', 'my_plugin_load_embedded_translation_file', 10, 2 );

Anwendungsbeispiel für Themes

Fügen Sie die Filterfunktion in die functions.php-Datei Ihres Themes ein:

function my_theme_load_embedded_translation_file( $mofile, $domain ) {
    // Replace 'my-domain' with your actual theme's text domain
    if ( 'my-domain' === $domain && false !== strpos( $mofile, WP_LANG_DIR . '/themes/' ) ) {
        $locale = apply_filters( 'theme_locale', determine_locale(), $domain );
        $local_mofile = get_template_directory() . '/languages/' . $locale . '.mo';
        
        if ( file_exists( $local_mofile ) ) {
            return $local_mofile; // Use bundled translation if available
        }
    }
    return $mofile;
}
add_filter( 'load_textdomain_mofile', 'my_theme_load_embedded_translation_file', 10, 2 );

Stellen Sie sicher, dass die MO-Dateibenennung den WordPress-Erwartungen entspricht

WordPress erwartet unterschiedliche Benennungskonventionen für .mo-Dateien, je nachdem, wo Sie sie speichern.

  • Wenn sich Ihre Übersetzungsdateien im Theme-Ordner befinden, verwenden Sie:

{locale}.mo
Beispiel
: de_DE.mo (gepaart mit de_DE.po)

  • Wenn Sie die Dateien im globalen WordPress-Sprachverzeichnis (wp-content/languages/themes/) abgelegt haben, verwenden Sie:

{text-domain}-{locale}.mo
Beispiel
: my-theme-de_DE.mo (gepaart mit my-theme-de_DE.po)

Nach oben scrollen