it-swarm.com.de

Wie entwickelt man ein mehrsprachiges Thema?

Ich habe noch keine genaue Beschreibung zum Erstellen eines mehrsprachigen WordPress-Themas gefunden.

Ich bin ein ziemlich kompetenter Entwickler und habe in meiner Zeit einige benutzerdefinierte Themen erstellt. Für ein Projekt, an dem ich arbeite, beginne ich gerade mit der Konvertierung meiner Drahtmodelle in WordPress. Ich weiß bereits, dass diese Site nur dieses eine benutzerdefinierte Thema verwenden wird, das ich erstelle, und ich weiß, dass die Site in ungefähr 5 verschiedenen Sprachen verfügbar sein wird.

Oben auf der Seite befindet sich eine Sprachauswahl, mit der der Benutzer einfach auf die Flagge seines Landes klicken kann. Dabei werden einige interne Einstellungen aktualisiert, mit denen die Sprache der gesamten Website geändert wird. Soweit ich weiß, können Sie po/mo-Dateien zum Übersetzen von Websites verwenden, aber ich kann es leider nicht verstehen.

Das ideale Szenario wäre, dass ich das Thema auf Englisch entwickle und für jeden String, der mehrere Übersetzungen hat, eine Lokalisierungsfunktion (__ () & _e ()?) Verwende. Wenn die Entwicklung abgeschlossen ist, muss ich in der Lage sein, jeder übersetzbaren Zeichenfolge für jede Sprache eine Übersetzung hinzuzufügen. Ich bin mir ziemlich sicher, dass die Lösung POEdit ist, aber ich kann nicht verstehen, wie das alles zusammen hängt.

Zur Verdeutlichung suche ich kein Plugin, bei dem Sie unterschiedliche Übersetzungen für verschiedene Seiten/Beiträge haben. Ich suche nach einer Lösung, mit der ich einzelne Zeichenfolgen in meinem benutzerdefinierten Thema übersetzen kann.

Vielen Dank im Voraus für alle Ratschläge, die Sie geben können.

2
Ollie

Daniels Antwort war sehr ähnlich, galt jedoch eher für Plugins als für Themen. Aus diesem Grund erkläre ich, wie ich es speziell für Themen für alle gemacht habe, die auf dieses Problem gestoßen sind.

  1. Erstellen Sie im Stammverzeichnis Ihres Themas einen Ordner mit dem Namen "languages".
  2. Gehen Sie zu https://wpcentral.io/internationalization/ , suchen Sie nach Ihrer Sprache und kopieren Sie den Code "WordPress Locale" (z. B. cs_CZ für Tschechisch).
  3. Öffnen Sie Poedit
  4. Datei -> Neu
  5. Fügen Sie den von wpcentral kopierten Code in das angezeigte Feld ein
  6. Drücken Sie Speichern und speichern Sie in dem Ordner "languages", den Sie in Schritt 1 erstellt haben
  7. Klicken Sie auf "Aus Quellen extrahieren" (oder auf "Katalog" -> "Eigenschaften").
  8. Drücken Sie unter "Quellenpfade" das Pluszeichen (+) im Feld "Pfade"
  9. Wählen Sie Ihren Themenordner aus (z. B. wp-content/themes/my-theme).
  10. Klicken Sie auf der Registerkarte "Quellenschlüsselwörter" auf "Neues Element".
  11. Geben Sie "__" (Unterstrich, 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. Es sollten alle übersetzbaren Zeichenfolgen aus Ihrem Thema angezeigt werden (im Grunde wird die Übersetzung jedes Mal angezeigt, wenn Sie "__ ('Hello world', 'mydomain')" verwenden).
  17. Sobald Sie Ihre Übersetzungen abgeschlossen haben, drücken Sie Datei-> In MO übersetzen (ab Schritt 1 im selben Sprachordner speichern).
  18. Fügen Sie den folgenden Code oben in die Funktionsdatei Ihres Themas ein:

    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 Ihre Site nun dynamisch zu übersetzen, können Sie einfach den URL-Parameter l = {language code} hinzufügen (z. B. mysite.com/?l=cs_CZ - hierdurch wird die mit poedit übersetzte Datei cs_CZ.mo geladen).

Um zusammenzufassen: Um Zeichenfolgen innerhalb Ihres Themas zu übersetzen, verwenden Sie den folgenden Code:

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

Wobei 'mytheme' die Textdomäne ist, die Sie in der Funktion aus Schritt 18 festgelegt haben. Kombinieren Sie dies mit der Erstellung der PO/MO-Dateien mit Poedit, und Sie können Ihr Thema mehrsprachig gestalten. In meinem Fall war dies die perfekte Lösung, da ich die Sprache mithilfe eines Flag-Selektors auf meiner Site dynamisch ändern und die Präferenzen des Benutzers in einem Cookie speichern und sie umleiten kann, wenn sie zurückkommen.

Ich hoffe, das hilft jemand anderem, der ein ähnliches Problem hat, da ich Ewigkeiten gebraucht habe, um es herauszufinden.

3
Ollie

Ich selbst habe es im letzten Jahr ein paar Mal gemacht, aber dann nur für Plug-Ins, die ich gemacht habe. Aber ich denke, es wird so oder so ähnlich funktionieren. Sie müssen zwar die Funktion __ () oder eine ähnliche Funktion verwenden, müssen jedoch immer zuerst die Textdomäne laden. Ich lade die Textdomäne direkt nach der Erstellung der Top-Klasse und werde explizit von den Nachfahren der Front- und Back-End-Controller veranlasst, sie zu erzeugen, sodass diese und Konstanten usw. immer geladen werden, bevor weitere Funktionen 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 ); 

Das sollte mit Template-Funktionen ähnlich funktionieren, denke ich. Verwenden Sie es dann mit einer Zeichenfolge, um in der Ansichtsebene zu übersetzen, d. H

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

Damit es funktioniert, muss der Ordner plugin_basename (FILE)) verwendet werden. '/ 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 und Weise, wie WordPress übersetzt, und wie MO mit WordPress funktioniert, wird hier erklärt https://codex.wordpress.org/I18n_for_WordPress_Developers .

Hoffe das hilft und ich bin einverstanden, dass gute Infos dazu nicht viel vorhanden sind. Fragen Sie bei Bedarf gerne nach! GR

1
Daniel Mulder