Wie entwickelt man ein mehrsprachiges Thema?

Ich habe noch eine kurze, durchgehende Beschreibung gefunden, wie man ein mehrsprachiges WordPress-Theme erstellt.

Ich bin ein ziemlich kompetenter Entwickler und habe ein paar benutzerdefinierte Themen in meiner Zeit gemacht. Für ein Projekt, an dem ich gerade arbeite, beginne ich gerade damit, meine Wireframes in WordPress zu konvertieren. Ich weiß bereits, dass diese Seite nur dieses eine benutzerdefinierte Thema verwenden wird, das ich erstelle, und ich weiß, dass die Website in ungefähr 5 verschiedenen Sprachen verfügbar sein wird.

Oben auf der Seite wird ein Sprachauswahlfeld angezeigt, in dem der Benutzer einfach auf die Flagge seines Landes klicken kann. Dadurch werden einige interne Einstellungen aktualisiert, die die Sprache der gesamten Website ändern. Von dem, was ich verstehe, können Sie Po / Mo-Dateien verwenden, um Websites zu übersetzen, aber ich kann mich leider nicht darum kümmern.

Das ideale Szenario wäre für mich, das Thema in Englisch zu entwickeln, und für jede Zeichenfolge, die mehrere Übersetzungen haben wird, verwenden Sie eine Lokalisierungsfunktion (__ () & _e ()?). Wenn die Entwicklung abgeschlossen ist, muss ich in der Lage sein, zu jeder der übersetzbaren Zeichenfolgen für jede Sprache eine Übersetzung hinzuzufügen. Ich bin ziemlich sicher, dass die Lösung ist, POEdit zu verwenden, aber ich kann nicht verstehen, wie alles zusammenarbeitet.

Zur Klarstellung, ich suche kein Plugin, wo Sie verschiedene Übersetzungen für verschiedene Seiten / Beiträge haben. Ich bin auf der Suche nach einer Lösung, mit der ich einzelne Strings innerhalb meines benutzerdefinierten Designs übersetzen kann.

Vielen Dank im Voraus für einen Rat, den Sie geben können.

Solutions Collecting From Web of "Wie entwickelt man ein mehrsprachiges Thema?"

Ich selbst habe es ein paar Mal im letzten Jahr gemacht, aber dann nur für Plug-Ins, die ich gemacht habe. Aber ich denke, es wird gleich oder weniger funktionieren. Sie müssen in der Tat die __ () oder ähnliche function verwenden, aber Sie müssen immer zuerst die Textdomäne laden. Ich lade die Textdomäne direkt nach dem Aufbau der obersten class und wird explizit von den Nachfahren der Front- und Backend-Controller initiiert, um sie zu erzeugen, damit diese und Konstanten usw. immer geladen werden, bevor weitere functionen ausgeführt werden.

/* * Init localization text domain */ public static function plugin_load_textdomain(){ load_plugin_textdomain( PLUGIN_TEXTDOMAIN, false, dirname( plugin_basename( __FILE__ ) ) . '/languages' ); } // This action hooks to WordPress init event and triggers it on init event add_action( 'init', array($plugin->model, 'plugin_load_textdomain'), 10 ); 

Dies sollte ähnlich mit Template-functionen funktionieren, denke ich. Dann benutze es mit einer Zeichenkette, um in Ansichtsschicht zu übersetzen, dh

 < ?php echo __( 'Translate me!', PLUGIN_TEXTDOMAIN ); ?> 

Um es funktionieren zu lassen, den Ordner plugin_basename ( FILE )). ‘/ languages’ muss die PO-Dateien mit den übersetzten Zeichenfolgen enthalten. Ich benutze Poedit zum Erstellen der Dateien. Die mit Poedit erstellten Dateien entsprechen der nativen Art WordPress zu übersetzen und wie MO mit WordPress zusammenarbeitet wird hier erklärt https://codex.wordpress.org/I18n_for_WordPress_Developers .

Hoffe, das hilft und ich stimme zu, dass gute Informationen nicht viel zur Verfügung stehen. Fühlen Sie sich frei, mehr zu fragen, wenn nötig! GR

Daniels Antwort war sehr ähnlich, wurde aber eher auf Plugins als auf Themen angewendet. Aus diesem Grund werde ich erklären, wie ich es speziell für Themen für jeden anderen gemacht habe, der auf dieses Problem stößt.

  1. Erstellen Sie einen Ordner im Stammverzeichnis Ihres Themas mit dem Namen “Sprachen”
  2. Gehe zu https://wpcentral.io/internationalization/ , suche nach deiner Sprache und kopiere den “WordPress Locale” -Code (zB cs_CZ für Tschechisch)
  3. Öffnen Sie Poedit
  4. Datei -> Neu
  5. Füge den Code, den du von wpcentral übernommen hast, in das erscheinende Feld ein
  6. Drücken Sie auf Speichern und speichern Sie den Ordner “Sprachen”, den Sie in Schritt 1 erstellt haben
  7. Drücken Sie “Aus Quellen extrahieren” (oder Katalog-> Eigenschaften)
  8. Unter “Sources Paths” drücken Sie das + in der Paths Box
  9. Wählen Sie Ihren Themenordner (zB wp-content / themes / my-theme)
  10. Drücken Sie auf der Registerkarte “Quellen” auf “Neues Element”
  11. Geben Sie “__” (Unterstrich unterstreichen, keine Anführungszeichen) ein, und drücken Sie die Eingabetaste
  12. Geben Sie “_e” (keine Anführungszeichen) ein und drücken Sie die Eingabetaste
  13. drücke OK
  14. Drücken Sie Speichern
  15. Drücken Sie Katalog-> Update von Quellen
  16. Sie sollten alle übersetzbaren Zeichenfolgen Ihres Themas sehen (grundsätzlich jedes Mal, wenn Sie “__ (‘Hallo Welt’, ‘MeineDomain’) verwenden”, wird die Übersetzung angezeigt)
  17. Sobald Sie Ihre Übersetzungen abgeschlossen haben, drücken Sie Datei-> Übersetzen zu MO (speichern Sie im selben Sprachen-Ordner von Schritt 1)
  18. Fügen Sie oben in der functionsdatei Ihres Themas den folgenden Code hinzu:

     function mytheme_localisation(){ function mytheme_localised( $locale ) { if ( isset( $_GET['l'] ) ) { return sanitize_key( $_GET['l'] ); } return $locale; } add_filter( 'locale', 'mytheme_localised' ); load_theme_textdomain( 'mytheme', get_template_directory() . '/languages' ); } add_action( 'after_setup_theme', 'mytheme_localisation' ); 
  19. Um nun Ihre Site dynamisch zu übersetzen, können Sie einfach den URL-Parameter l = {language code} hinzufügen (zB mysite.com/?l=cs_CZ – das wird die cs_CZ.mo-Datei laden, die wir mit poedit übersetzt haben)

Zusammenfassend: Verwenden Sie den folgenden Code, um Zeichenfolgen innerhalb Ihres Designs zu übersetzen:

 __( 'Hello, World!', 'mytheme' ) 

Wobei “Mytheme” die Textdomäne ist, die Sie in der function von Schritt 18 festgelegt haben. Kombinieren Sie dies mit der Erstellung der PO / MO-Dateien mit Poedit und Sie werden in der Lage sein, Ihr Thema mehrsprachig zu gestalten. In meinem Fall war dies die perfekte Lösung, da ich die Sprache mithilfe eines Flag-Selektors auf meiner Website dynamisch ändern kann. Außerdem kann ich die Vorlieben des Benutzers in einem Cookie speichern und sie bei ihrer Rückkehr redirect.

Ich hoffe, dass dies jemand anderem hilft, der ein ähnliches Problem hat, da dies lange Zeit brauchte, um es herauszufinden.