Support » Allgemeine Fragen » Sprachdateien bearbeiten

  • Gelöst wootimes

    (@wootimes)


    Hallo zusammen,

    in meinem Theme gibt es für die Sprache eine pot/po/mo Datei. Diese konnte ich erfolgreich mit POEDIT in Deutsch übersetzen. Aber wie stelle ich es an, wenn ich neue Wörter die bisher nicht in der Sprachdatei vorhanden sind, hinzufügen will?

    Viele Grüße,
    Martin

Ansicht von 6 Antworten - 1 bis 6 (von insgesamt 6)
  • WordPress bietet eine ganze Reihe von Funktionen zur Internationalisierung (I18n). (Damit ist übrigens nicht allein die Übersetzung gemeint, sondern auch die Anpassung an regionale Schreibweisen von z.B. Ziffern, Datum, Verwendung eines Schrift-Zeichensatzes, etc.) Zu diesem Thema findest du einen ausführlichen Beitrag im Codex:

    https://codex.wordpress.org/i18n

    Kurz gesagt: Statt echo 'Hello Dolly'; verwendest du z.B. _e( 'Hello Dolly', 'textdomain' ). Programme wie Poedit suchen nach solchen Funktionen und erstellen daraus einen Katalog der zu übersetzenden Textstrings, den du als Übersetzung-Vorlage (Portable Object Template, kurz .pot) abspeichern (bzw. nach Hinzufügen weiterer Textstrings aktualisieren) kannst. Dann kannst du z.B. auf Deutsch übersetzen und erhältst dann eine .po-Datei (Portable Object) und eine binäre, komprimierte Fassung .mo (machine readable object). Anhand der Textdomain wird klar zugewiesen, welches Plugin/Theme welche Sprachdatei verwendet, damit Übersetzungen nicht falsch zugewiesen werden und für das englische Wort store die Übersetzung speichern verwendet wird, wenn es sich um ein Plugin für e-Commerce (Übersetzung: (Einkaufs-)Laden) handelt.

    Nochmal zusammengefasst: Internationalisierungs-Funktion verwenden > Katalog-Datei in Poedit neu erstellen > übersetzen.

    Thread-Starter wootimes

    (@wootimes)

    Danke für diese ausführliche Beschreibung. Ich hänge aber absolut an der Stelle fest, wo eine neue Sprachvariable in die POT Datei übergeben wird.

    Bei mir sieht das in den Templates so aus: <?php echo esc_attr(sprintf( __( ‚Preparation Time: %s‘, ‚osetin‘ ) …

    Preparation Time ist in der POT Datei enthalten. Jetzt möchte ich z.B. noch eine weitere Variable wie „Location“ hinzufügen. Die gibt es ja nicht in der POT Datei und ich finde in POEDIT auch keine Möglichkeit eine neue einzutragen.

    Selbst wenn ich Sie jetzt ins Template eintrage, wie gelangt sie jetzt in die POT Datei, damit ich meine bestehende de_DE.po damit aktualisieren kann?

    Ich stehe gerade wirklich auf dem Schlauch, sorry :-/

    • Diese Antwort wurde geändert vor 7 Jahren, 7 Monaten von wootimes.

    OK, ich gehe mal davon aus, dass du dir die Seite im Code nicht angeschaut hast?

    Dann zitiere ich mal von der Seite ein Code-Beispiel:

    __( 'Your city is %1$s, and your zip code is %2$s.', 'my-text-domain' ), $city, $zipcode );

    %1$s und %2$s sind zwei Platzhalter, die durch den Wert der Variablen $city und $zipcode gefüllt werden.

    <?php echo esc_attr(sprintf( __( 'Preparation Time: %1$s, Location: %2$s', 'osetin' ), $preptime, $location ) ) );
    

    Woher die Variable $location stammt, (z.B. Benutzereingabe in einem Formular?) weiß ich nicht. Wenn du sie aber vorgibst und diesen Wert ebenfalls übersetzen möchtest, musst du auch dort eine der Internationalisierungs-Funktionen verwenden:

    <select>
      <option value="<?php __('one', 'textdomain');? >"><?php _e('one', 'textdomain');></option>
      <option value="<?php __('two', 'textdomain');? >"><?php _e('two', 'textdomain');></option>
      <option value="<?php __('three', 'textdomain');? >"><?php _e('three', 'textdomain');></option>
    </select>
    Thread-Starter wootimes

    (@wootimes)

    Danke für Deine Erklärung, aber wir haben wohl was unterschiedliches gemeint. Ich habe jetzt die Lösung gefunden. Es ging ja darum das es „Location“ als Sprachvariable noch nicht gab und diese im Template immer in Englisch ausgezeichnet werden sollten. Ich benötige aber alles auf Deutsch.

    Ich habe jetzt einfach eine Sprachvariable „<?php echo esc_attr(sprintf( __( ‚Location: %1$s“ in die php-Datei des Templates geschrieben, dann den gesamten Theme-Ordner heruntergeladen und mit POEDIT durchsuchen lassen. Er hat damit die ganzen Dateien neu gescannt und die Sprachvariable „Location“ war nun auch in der PO-Datei enthalten. Diese konnte ich jetzt mit der bestehenden de_DE.po abgleichen und im leeren Feld „Location“ mit „Ort“ übersetzen.

    Genau das wollte ich, nur wusste ich nicht wie 🙂

    Ich habe jetzt einfach eine Sprachvariable „<?php echo esc_attr(sprintf( __( ‚Location: %1$s“ in die php-Datei des Templates geschrieben, dann den gesamten Theme-Ordner heruntergeladen und mit POEDIT durchsuchen lassen. Er hat damit die ganzen Dateien neu gescannt und die Sprachvariable „Location“ war nun auch in der PO-Datei enthalten.

    So hatte ich das auch beschrieben:

    Programme wie Poedit suchen nach solchen Funktionen und erstellen daraus einen Katalog der zu übersetzenden Textstrings, den du als Übersetzung-Vorlage (Portable Object Template, kurz .pot) abspeichern (bzw. nach Hinzufügen weiterer Textstrings aktualisieren) kannst. Dann kannst du z.B. auf Deutsch übersetzen und erhältst dann eine .po-Datei (Portable Object)…

    Thread-Starter wootimes

    (@wootimes)

    Jedenfalls danke, jetzt hat es ja geklappt! 🙂

Ansicht von 6 Antworten - 1 bis 6 (von insgesamt 6)
  • Das Thema „Sprachdateien bearbeiten“ ist für neue Antworten geschlossen.