Bereite Plugin-Optionen für mehrsprachige Unterstützung vor

Ich suche nach einer Möglichkeit, die Optionen meines Plugins auf einer mehrsprachigen Website verfügbar / übersetzbar zu machen.

Zum Beispiel sind einige meiner Optionen Textzeichenfolgen, die dann am Frontend verwendet werden.

echo get_option( 'my_plugin_text', __( 'Whoa default text', 'my-plugin' ) ); 

Es ist mir jedoch aufgefallen, dass diese Strings dann von WPML nicht übersetzbar sind. Und ich würde auch von anderen mehrsprachigen Plugins ausgehen. Der springende Punkt der Optionen war, den Benutzern eine Möglichkeit zu geben, einen Teil des Textes anzupassen, aber dies wird derzeit in einem mehrsprachigen Kontext negiert.

Da der Optionstext variieren wird, scheint es keinen Sinn zu machen, das Ganze in eine gettext function zu gettext :

 _e( get_option( 'my_plugin_text', __( 'Whoa default text', 'my-plugin' ) ), 'my-plugin' ); 

Ich könnte die ganze Sache in einen Filter wickeln, aber dann sind die Leute verpflichtet, zu wissen, wie man einen Filter schreibt, um den Text zu ändern, aber das widerspricht dem Zweck, Benutzern zu erlauben, diese bestimmten Texte vom Admin zu ändern.

Ein Vorschlag, den ich erhalten habe, ist get_locale() .

 $text = get_option( 'my_plugin_text_' . get_locale(), false ); if( $text === false ){ $text = get_option( 'my_plugin_text', __( 'Whoa default text', 'my-plugin' ) ); } echo $text; 

Das scheint ziemlich vernünftig zu sein, aber ich kenne mich mit den mehrsprachigen Plugins nicht aus, um zu wissen, ob das universell funktioniert. Ändert sich das Gebietsschema auch auf der Admin-Seite, so dass jemand die Plugin-Optionen in der englischen Version speichern und dann anderen Text für die (zum Beispiel) spanische Version speichern kann?

Ist jemals jemand darauf gestoßen? Gibt es eine andere Lösung, die ich übersehen habe?

Solutions Collecting From Web of "Bereite Plugin-Optionen für mehrsprachige Unterstützung vor"

WP-Übersetzungsfunktionen sollen statische Strings übersetzen. ZB In Bezug auf Optionen sollten Sie diese verwenden, um die Beschriftungen und nicht die Werte zu übersetzen.

Soweit ich mich erinnere, funktioniert das Übersetzungs-Dienstprogramm von WPML im Gegensatz zur Standard-Übersetzung, dh wenn Sie das verwenden, können Sie die Übersetzung nicht mit .po / .mo-Dateien laden.

Wenn Benutzer dieses feauture verwenden möchten, ist jeder frei, zu, was sie auf seiner eigenen Site mögen, aber bauen ein Plugin auf das ist eine Sache, von der ich wirklich weg bleiben würde.

Der Trick get_locale() kann verwendet werden, um einen Optionswert abzurufen , kann aber nicht zum Speichern verwendet werden : Sie können sicher sein, dass die function die Sprache für die Seite zurückgibt, die ein Site-Besucher get_locale() , aber get_locale() in den Admin-Seiten Es wird vorausgesetzt, dass das Gebietsschema zurückgegeben wird, in dem der Administrator die Verwaltungsseiten navigiert, nicht das Gebietsschema des zu speichernden Optionswerts.

Der Workflow, den Sie benötigen, wäre etwa so:

  • Überprüfen Sie, ob die Website mehrsprachig ist. Wenn Sie nicht nur ein Feld ausgeben, speichern Sie optional das Formular 'my_plugin_text_' . get_locale() 'my_plugin_text_' . get_locale() . Dabei wird sogar das eindeutige Gebietsschema zum Erstellen des Optionsnamens verwendet.

  • Wenn die Site mehrsprachig ist, zeigen Sie mehrere Felder für jede Option an, eine für jede Site-Sprache. Das bedeutet, dass Sie in der Lage sein müssen, alle Site-Sprachen zu erhalten, und es gibt keinen Standard Weg zu dieser Aufgabe: Sie müssen sich verschiedene Plugin-Dokumente anschauen (oder Plugin-Unterstützung fragen) und dann entsprechende Felder anzeigen, die an die Option angehängt werden Benennen Sie das richtige Gebietsschema.

Das ist so ein Schmerz. Nicht universell zu sein, ist nur ein Teil des Problems, es bringt einen nicht trivialen Programmieraufwand mit sich und macht Ihre Optionsseiten leicht unordentlich und aufgebläht.

Ein alternativer Weg könnte darin bestehen, Standard-WP-Entitäten zu verwenden, z. B. Posts oder Taxonomie-Terme, um Informationen zu speichern.

Wenn zB die Optionstexte, die Sie übersetzen möchten, als CPT-Titel gespeichert sind, müssen Sie diese nicht übersetzen: Alle Übersetzungs-Plugins sind in der Lage, CPT-Titel zu übersetzen, und sie werden eine Übersetzungs-UI bereitstellen.

Ich weiß nicht, ob dein Plugin gut zu diesem Workflow passt, aber wenn dem so ist, denke ich, dass es ein viel besserer Weg ist, das Problem zu lösen.