Support » Plugins » load_plugin_textdomain funktioniert einfach nicht trotz korrektem Code

  • Gelöst mlfactory

    (@mlfactory)


    Erstmal Hallo an alle, ich hoffe Ihr könnt mir helfen denn ich bin langsam am verzweifeln.

    Ich schaffe es einfach nicht ein Test Plugin mehrsprachig zu machen.

    Fakten:
    Wordpress 5.2 (installiert in Englisch – die Deutsche Sprachdatei nachinstalliert und Deutsch als Standard gewählt)
    Polylang

    Mein Test Code sehr simpel sodass ich mal testen kann woran es denn genau liegt:

    <?php
    /*
     * Plugin Name: Translation Test
     * Author: Plugin Author
     * Text Domain: test-translate
     */
    
    add_action('plugins_loaded', array('TranslationTest', 'plugin_name_load_plugin_textdomain'));
    class TranslationTest {
        public static function plugin_name_load_plugin_textdomain() {
    	
    	$domain = 'test-translate';
    
    	load_plugin_textdomain( $domain, FALSE, dirname(plugin_basename(__FILE__ )) . '/' );
    echo "translate test: ". __('Some text','test-translate');	
    	}
    }

    Die 2 Dateien .mo und .po mit dem test-translate liegen im Plugin Hauptverzeichnis.

    Nunja egal was ich mache (versuche es nun seit 2 Tagen) bei Polylang wird mir nur WordPress angezeigt nicht aber der String bzw. die Sprachdatei des Plugins.

    Wäre jemand so nett über den obigen Code kurz drüber zu schauen?

    Danke im voraus,
    Michael

Ansicht von 11 Antworten - 1 bis 11 (von insgesamt 11)
  • Thread-Starter mlfactory

    (@mlfactory)

    EDIT:

    versucht hab ich auch das:

    add_action( 'init', 'plugin_name_load_plugin_textdomain' ); 
    
    function plugin_name_load_plugin_textdomain() {
    	$domain = 'translationtest';
    
    	$loaded= load_plugin_textdomain( $domain, FALSE, basename( dirname( __FILE__ ) ) . '/' );
    if ( ! $loaded ){
    echo "<hr/>";
    echo "Error: the mo file was not found! ";
    //exit();
    }else{
    echo "<hr/><strong>Debug info</strong>:<br/>";
    echo "WPLANG: ". WPLANG;
    echo "<br/>";
    echo "translate test: ". __('Some text','translationtest');
    //exit();
    }	
    }

    $loaded gibt 1 zurück trotzdem erscheint unter Polylang nichts vom Plugin.

    Grüße

    Hallo,
    ich verstehe nicht so ganz, wozu Du Polylang dafür brauchst. Die Strings werden ja in den jeweiligen Sprachdateien PO übersetzt und dazu musst Du zuerst aus dem Quellcode eine Sprachdatei (POT) erstellen. Die Sprachdateien kannst Du z. B. mit POEDIT erstellen.

    Hier siehst Du eine Funktion zur Mehrsprachigkeit, die ich in ähnlicher Form in einem Plugin von mir einsetze:

    // Load language files
    function myplugin_meine_textdomain_laden() {
    	load_plugin_textdomain(
    	'myplugin_language',
    	false,
    	basename( dirname( __FILE__ ) ) . '/languages'
    	);
    }
    add_action('plugins_loaded','myplugin_meine_textdomain_laden');
    

    Hier ein Link dazu.
    Viele Grüße
    Hans-Gerd

    Thread-Starter mlfactory

    (@mlfactory)

    Hallo Hans-Gerd,

    danke für deine Antwort.

    Also Polylang brauche ich nicht unbedingt – es geht eher darum, dass die User meines Plugins die Strings/Texte gerne bequem ändern würden.

    Habe nun rausgefunden das geht mit Loco Translate.

    PoEdit nutze ich bereits – damit habe ich die beiden Dateien erstellt .po & .mo.

    Ich bin etwas verwirrt da bei vielen Plugins ja dabei steht „Polylang ready“ etc. was ist damit gemeint?
    Auch finde ich Strings anderer Plugins unter String Translations.

    Aktueller Stand:

    Unter Loco Translate -> Plugins erscheint mein Plugin.

    Habe ein paar Texte sowohl in DE als auch in EN definiert.

    Wenn ich nun aber im Backend oder Frontend die Sprache wechsle werden die Texte nicht übersetzt.

    Ich weiß ist schwierig so aus der Ferne dazu was zu sagen…

    Danke für deine Hilfe,
    Michael

    EDIT:

    Was ich gerade noch gesehen habe ist diese Meldung:

    No translation template for the "testplugin" text domain

    Google findet dazu leider nichts.

    • Diese Antwort wurde geändert vor 4 Jahre, 3 Monaten von mlfactory.

    Hallo,
    also wie gesagt, das hat mit Polylang nichts zu tun, weil mit Polylang z. B. Seiten mehrsprachig erstellt werden können.
    Du kannst zwar mit Loco Translate – so weit ich das sehe (ich setze Loco Translate nicht ein) – die Strings übersetzen, davon hat aber der Nutzer Deines Plugins nichts, weil er das ja dann auch noch mal neu übersetzen müsste, so weit ich das sehe.
    Wenn Du aber die o. a. Funktion korrekt einsetzt, sollte das funktionieren. Schau am besten noch mal in den Link, den ich Dir oben angegeben habe. Da ist das m. E. ganz gut erklärt.
    Hilfreich war für mich auch, einfach in „kleinere“ Plugins zu schauen, wie das gemacht worden ist.
    Viele Grüße
    Hans-Gerd

    Thread-Starter mlfactory

    (@mlfactory)

    Hallo,

    hmm okay verstehe – ein bisschen zumindest 😀

    Sprich wenn ich die mo und po Files für DE und EN erstelle wird je nachdem welche Sprache der Benutzer bei den WordPress Einstellungen wählt diese Sprache für das Plugin gewählt und ausgegeben, korrekt?

    Okay gut soweit.

    Ich hätte aber eben gerne das wie bei anderen Plugins (ob jetzt WPML oder bei Polylang) die Texte des Plugins je nach gewählter Sprache ausgegeben werden.
    Wie gehe ich da am besten vor?

    Ich habe mir den Link natürlich schon angeschaut.
    Auch alles zu load_plugin_textdomain und sogut alle Themen in Foren dazu die existieren würde ich behaupten.

    Grüße, Michael

    Hallo,

    Sprich wenn ich die mo und po Files für DE und EN erstelle wird je nachdem welche Sprache der Benutzer bei den WordPress Einstellungen wählt diese Sprache für das Plugin gewählt und ausgegeben, korrekt?

    genau – und die POT-Datei musst Du natürlich auch erstellen.

    Ich hätte aber eben gerne das wie bei anderen Plugins (ob jetzt WPML oder bei Polylang) die Texte des Plugins je nach gewählter Sprache ausgegeben werden.

    das erreichst Du genau so, wie ich das weiter oben (zugegebenermaßen etwas kurz) beschrieben habe. Die Infos auf der angegebenen Seite auf wordpress.org sind da schon ziemlich ausführlich.
    Hier habe ich noch eine Seite gefunden, wo das erklärt wird. Vielleicht hilft Dir das weiter.
    Viele Grüße
    Hans-Gerd

    Hallo,
    ich kann Dir übrigens ein sehr gutes aktuelles Buch dazu empfehlen:
    Onno Gabriel, Entwicklung von WordPress-Plugins
    Lohnt sich, weil es kompakt auf etwas mehr als 100 Seiten so ziemlich alles erklärt. Es kommt natürlich auch darauf an, ob Du Dein Plugin im offiziellen WordPress-Plugin-Verzeichnis veröffentlichen willst. Wenn Du das (noch) nicht willst, dann brauchst Du manche Dinge nicht berücksichtigen, die da beschrieben sind.
    Viele Grüße
    Hans-Gerd

    Thread-Starter mlfactory

    (@mlfactory)

    Alles klar – wirklich vielen dank für deine Hilfe – soweit ist alles klar.

    Hab da zu kompliziert gedacht – es ist bei meinem Plugin halt auch so das die Texte die im Plugin vorkommen durch den Admin der Seite geändert werden können.
    Daher hatte ich da irgendwie ein Verständnisproblem.

    Ich arbeite einfach mal weiter und sehe ob ich es verstanden habe 🙂

    Grüß und dir ein schönes Wochenende,
    Michael

    Thread-Starter mlfactory

    (@mlfactory)

    Ach eins eventuell noch kurz.

    Wegen der .pot Datei.

    Die erstellt poedit nicht automatisch , korrekt?

    Ich erhalte nur .mo und .po

    Grüße

    Thread-Starter mlfactory

    (@mlfactory)

    Hmm nun habe ich ein neues Problem.

    Habe sowohl die mo als auch die po files sowohl für DE als auch für EN erstellt.

    Das komische nun: Wenn ich im WordPress Backend unter Allgemein die Sprache auf Deutsch ändere erhalte ich bei load_plugin_textdomain als Wert 1 zurück.

    Sobald ich im Backend die WP Sprache auf Englisch ändere – erhalte ich bei load_plugin_textdomain nichts zurück bzw. laut meinem Code im ersten Post eben das die mo Datei nicht geladen werden kann.
    Bei Deutsch wird die Datei geladen.

    Verstehe ich gar nicht.

    Du eventuell eine Idee?

    Grüße

    EDIT:

    Hmm ok ein Problem war en_US gewählt in WordPress aber erstellt en_EN.

    Ein Problem besteht aber nun noch.

    Im Backend erhalte ich eine 1 als Wert zurück, allerdings im Frontend nicht und das nur bei Englisch.

    Was kann da sein?

    EDIT 2:

    Ok es wird jeweils nur im Backend die Sprachdatei geladen (Bei beiden Sprachen).
    Hmm komisch.

    • Diese Antwort wurde geändert vor 4 Jahre, 3 Monaten von mlfactory.
    • Diese Antwort wurde geändert vor 4 Jahre, 3 Monaten von mlfactory.

    Hallo,
    kein Problem, ich kann Dir gerne dabei helfen. Aber Deine function wird Dich dabei nicht weiter bringen. Daher hier noch mal ein paar Erläuterungen bezogen auf die function, die ich Dir gepostet habe:

    // Load language files
    function myplugin_meine_textdomain_laden() {
    	load_plugin_textdomain(
    	'myplugin_language',
    	false,
    	basename( dirname( __FILE__ ) ) . '/languages'
    	);
    }
    add_action('plugins_loaded','myplugin_meine_textdomain_laden');

    In dem Beispiel wird über die function myplugin_meine_textdomain_laden() in load_plugin_textdomain die Sprachdatei myplugin_language Ordner /languages zugeordnet. In dem Ordner /languages befinden sich die MO und PO-Dateien.
    Über das Programm POEDIT kann man über „Datei“->“Neu“ und anschließender Auswahl der Übersetzungssprache die Option „Aus Quellcode extrahieren“ wählen.
    Wenn im Quellcode dann z. B. die folgende Zeile
    echo __( 'Background color:', 'add-infos-to-the-events-calendar' ); steht, dann wird bei der Einstellung in WP unter Einstellungen->Allgemein->Sprache der Webseite: Deutsch automatisch die Übersetzung aus der Sprachdatei myplugin_language-de_DE.po geholt.

    Wie gesagt: Am besten einfach mal auf Basis der genannten Webseite nach Anleitung das aufbauen oder die Beispielfunction von mir nutzen oder mal das angesprochene Buch nutzen.

    Sorry, aber mehr kann ich jetzt an dieser Stelle leider nicht für Dich tun.
    Viele Grüße
    Hans-Gerd

Ansicht von 11 Antworten - 1 bis 11 (von insgesamt 11)
  • Das Thema „load_plugin_textdomain funktioniert einfach nicht trotz korrektem Code“ ist für neue Antworten geschlossen.