Wie mache ich eine WordPress-Plugin-Übersetzung fertig?

19

Was ist der beste Weg, um ein Plugin zu erstellen, das für die Übersetzung bereit ist?

Es muss nicht von Anfang an übersetzt werden, sondern einfach zu übersetzen sein, damit andere Entwickler aus verschiedenen Kulturen am Lokalisierungsprozess des Plugins teilnehmen können.

Nabil Kadimi
quelle

Antworten:

38

1. Schreiben Sie unter Berücksichtigung der Lokalisierung

Verwenden Sie nicht echooder print(), um eine Textausgabe zu erstellen, sondern verwenden Sie stattdessen die WordPress-Funktionen __()und _e():

/** Not localization friendly */
echo "Welcome to my plugin";    
// OR
print("Welcome to my plugin");

/** Localization friendly */
_e('Welcome to my plugin', 'my-plugin');
// OR
$my_text = __('Welcome to my plugin', 'my-plugin');
echo $my_text;

_e()und __()liefert die Übersetzung - in der aktuellen Sprache - des als erster Parameter angegebenen Textes. _e()gibt den Text aus und __()gibt ihn zurück.

Der zweite Parameter ist die Textdomäne , mit der Sie WordPress mitteilen, dass der als erster Parameter angegebene Text zu diesem Plugin gehört. Sie können einen beliebigen Namen verwenden, aber ich bevorzuge die Verwendung desselben Namens, den ich für das Plugin verwendet habe datei verzeichnis finde ich intuitiver.

Wie kann man dynamischen Text wie "Hallo <Benutzername>" ausgeben?

Mit __()und sprintf():

/** Get the username */
$username = 'Magictrick';

/** Not localization friendly */
echo "Hello $username";     

/** Localization friendly */
printf(__('Hello %s', 'my-plugin'), $username);
// OR 
$my_text = sprintf(__('Hello %s', 'my-plugin'), $username);
echo $my_text;

2. Bereiten Sie die .pot / .po / .mo-Dateien vor

Definitionen

  • Die .pot-Datei : wird vom Plugin-Entwickler zur Verfügung gestellt und dient als Ausgangspunkt für die Erstellung neuer Übersetzungen, WordPress verwendet sie nicht.
  • Eine .po-Datei : Ist eine Übersetzungsdatei, die Sie oder eine andere Person gestartet und möglicherweise vervollständigt haben. WordPress verwendet sie nicht.
  • AMO-Datei : Wird automatisch von Poedit erstellt, wenn Sie eine PO-Datei speichern. Mit diesen Dateien können Sie sie nur hochladen oder erneut hochladen, wenn Sie eine PO-Datei erstellen oder aktualisieren. WordPress ruft Übersetzungen aus .mo-Dateien ab .

Öffnen Sie Poedit und erstellen Sie einen neuen Katalog (Datei ›Neuer Katalog ...) mit diesen Einstellungen:

  • Projektinfo: Verwenden Sie Ihre (oder Ihre Team-) Informationen. Die Sprache und das Land sollten mit der Standardsprache Ihres Plugins übereinstimmen
  • Pfade:
    • Basispfad: .
    • Pfade: alles entfernen & hinzufügen ..(wir speichern die Sprachdatei in einem Plugin-Unterverzeichnis namens languages)
  • Stichwörter: Alles entfernen & hinzufügen __und_e

Speichern Sie den Katalog als/my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin.pot und durchsuchen Sie Ihre Plugin-Dateien nach übersetzbarem Text, indem Sie auf die Schaltfläche Aktualisieren klicken. Wenn das Update abgeschlossen ist, schließen Sie diesen Katalog, und Sie müssen diese Datei erst aktualisieren, wenn Sie Ihrem Plugin neue übersetzbare Zeichenfolgen (dh in __()oder eingeschlossen _e()) hinzufügen .

Jetzt erstellen wir die erste Übersetzung (ich werde fr_FR verwenden):

Mit Podeit , erstellen einen Katalog von einer POT - Datei (Datei> Neuer Katalog aus POT - Datei ...) :

  • Projektinfo: Verwenden Sie Ihre (oder Ihre Team-) Informationen, ändern Sie die Sprache und das Land , ich werde Französisch und Frankreich verwenden
  • Pfade: Nicht ändern
  • Stichwörter: Nicht chagen

Speichern Sie den Katalog als . Übersetzen Sie einige oder alle Zeichenfolgen. Speichern Sie die PO-Datei erneut./my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin-fr_FR.po laden Sie die PO- und hoch.

Beachten Sie, dass beim Speichern einer PO-Datei eine MO-Datei mit demselben Namen erstellt wird. Der Dateiname der PO-Datei ist ausschlaggebend . Er setzt sich aus der Verkettung der Plugin-Textdomäne (my-plugin) und dem Sprachgebietsschema zusammen. fr_FR), benennen Sie Ihre .po-Dateien für Plugins immer wie folgt : [textdomain] - [locale] .po , hier einige Beispiele:

  • Italienisch / Italien: wpcf7-it_IT.po
  • Portugiesisch (Brasilien: wpcf7-pt_BR.po
  • Arabisch: wpcf7-ar.po... ja!

Wenn das Plugin mit neuem Text aktualisiert wird , aktualisieren Sie die PO- Datei, übersetzen Sie neue Zeichenfolgen und laden Sie die .PO- und .MO-Dateien erneut hoch Dateien erneut

3. Weisen Sie das Plugin an, übersetzten Text für die aktuelle Sprache zu laden

Irgendwo in Ihrem Plugin müssen Sie WordPress anweisen, Ihre .mo-Datei zu verwenden. Verwenden Sie dazu den folgenden Code am Anfang Ihrer Plugin-Datei:

function my_plugin_init() {
  load_plugin_textdomain( 'my-plugin', false, 'my-plugin/languages' );
}
add_action('init', 'my_plugin_init');

Ersetzen Sie my-pluginmit Ihrem Plugin-Namen im 1. und 3. Parameter desload_plugin_textdomain Funktion .

4. Testen und Beheben von Problemen

Einige Gründe, die möglicherweise nicht funktionieren:

  • Zeichenfolgen werden nicht in die POT- oder PO-Datei importiert
    • → Falsche Katalogeinstellungen (Pfad oder Schlüsselwörter oder beides)
  • Text wird auf der WordPress-Site nicht übersetzt
    • → .mo-Datei für diese Sprache fehlt oder hat einen falschen Dateinamen
    • → Textdomäne nicht verwendet (ersetzen _e('my text')durch_e('my text', 'my-plugin') )
    • → Textdomain nicht geladen (Beispiel oben mit den richtigen Parametern verwenden, WP warnt Sie nicht vor Fehlern)
Nabil Kadimi
quelle
3
+1 Nice write-up :) Schauen Sie sich diesen Artikel an: Laden von WordPress-Sprachdateien auf die richtige Weise , " Praktische Richtlinien zum schmerzfreien Laden von Sprachdateien in WordPress ". :::::: Auch Glotpress und die Polyglots- Gruppe sind vielleicht erwähnenswert.
Brasofilo
Danke für diese nette Anleitung! Erwähnenswert ist, dass load_plugin_textdomain () in jeder Methode aufgerufen werden muss, in der Sie _e () und __ () verwenden
Andreas
2

Nabils Antwort ist ziemlich vollständig, aber es gibt eine einfache Variante:

  1. Ihr Plugin befindet sich im WordPress.org-Plugin-Repository

  2. Sie möchten, dass Ihr Plugin nur mit WordPress 4.6 oder höher funktioniert.

Die Schritte sind diese:

  1. Fügen Sie in der readme.txt-Datei Ihres Plugins Folgendes hinzu Requires at least: 4.6. Siehe https://developer.wordpress.org/plugins/wordpress-org/how-your-readme-txt-works/

  2. Falls noch nicht geschehen, laden Sie Ihr Plugin in das WordPress-Plugin-Repository hoch. Siehe https://wordpress.org/plugins/developers/add/ .

  3. Finden Sie die Slug / Text-Domain Ihres Plugins. Gehen Sie dazu auf die Seite Ihres Plugins im WordPress-Plugin-Repository. Die URL lautet https://wordpress.org/plugins/your-plugin-slug/ . Der letzte Teil der URL, "your-plugin-slug", ist der Slug Ihres Plugins. Das verwenden Sie für die Textdomäne der Übersetzungsfunktionen.

  4. Verwenden Sie die Übersetzungsfunktionen von WordPress in Ihrem Plugin (wie __e(‘hello’, ‘my-plugin-domain’);). Stellen Sie einfach sicher, dass Sie die richtige Plugin-Textdomäne verwenden, die Sie im vorherigen Schritt erworben haben. Weitere Informationen finden Sie unter https://developer.wordpress.org/plugins/internationalization/how-to-internationalize-your-plugin/ .

Wenn Sie die obigen Schritte ausführen, kümmert sich WordPress um:

  • Durchsuchen Sie Ihr Plugin nach allen übersetzbaren Zeichenfolgen (keine Notwendigkeit, Poedit oder etwas anderes zu installieren und auszuführen)
  • Machen Sie es jedem leicht, Übersetzungen Ihres Plugins auf translate.wordpress.org beizusteuern (Sie müssen weder eine eigene Website für die Übersetzung Ihres Plugins haben, noch einen benutzerdefinierten Prozess für Übersetzer, um Ihnen ihre Übersetzungen vorzulegen).
  • Wenn jemand Ihr Plugin verwendet, überprüft WordPress, ob es in seine Sprache übersetzt wurde, und zeigt es in seiner Sprache an (Sie oder sie müssen die Übersetzungsdateien nicht auf ihre Website laden).

(Antwort von meinem Blog-Post hier: https://cmljnelson.blog/2019/01/01/the-really-lazy-way-to-translate-a-wordpress-plugin/ )

das Weltraumkamel
quelle
Ich bin nicht sicher, warum dies abgelehnt wurde. Es ist das, was ich getan habe, um wordpress.org/plugins/print-my-blog übersetzungsbereit zu machen (und das Plugin wurde erfolgreich übersetzt)
Weltraumkamera
Bedeutet das, dass WordPress die falschen Übersetzungsdateien lädt, wenn sich ein Plugin / Theme nicht im WordPress-Plugin-Repository befindet, sondern die Textdomäne eines Plugins verwendet?
Bodo
Gute Frage @bodo. Wenn ein Plugin angibt, die Textdomäne eines anderen Plugins zu verwenden, das sich im Repo von wp.org befindet, wird WordPress die Übersetzungsdateien des Plugins von wp.org problemlos verwenden. Entschuldigung, ich bin mir nicht sicher.
Thespacecamel