Theme-Internationalisierung

  • Hallo,

    ich beschäftige mich gerade mit der Internationalisierung und Lokalisierung von Themes und habe dazu einige Fragen.

    Wann "muss" oder besser, wann sollte ich _e('') und wann __('') benutzen?
    Meine Vermutung ist, dass ich, so PHP im String enthalten ist, __('') zu benutzen ist. Stimmt das?


    Was mache ich mit Strings wie diesem?

    PHP
    <?php comments_number ('0 Reaktionen', '1 Reaktion', '% Reaktionen' );?>

    Muss das dann so aussehen:

    PHP
    <?php comments_number _e('0 Reaktionen', '1 Reaktion', '% Reaktionen', 'Themename'));?>

    ?

    Und die gleiche Frage für folgenden String:

    PHP
    Sie können hier einen <a href="#respond">Kommentar hinterlassen</a>, einen <a href="<? trackback_url() ?>">Trackback setzen</a> oder die Reaktionen per <a href="feed/">RSS-Feed</a> verfolgen.

    Ist meine modifizierte Version richtig?

    PHP
    <?php _e('Sie können hier einen <a href="#respond">Kommentar hinterlassen</a>, einen <a href="trackback_url()">Trackback setzen</a> oder die Reaktionen per <a href="feed/">RSS-Feed</a> verfolgen.', 'Themename')?>

    Danke für die Hilfe :)

    Einmal editiert, zuletzt von _Paul_ (8. Dezember 2008 um 12:54)

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Und was ist in diesem Zusammenhang der Unterschied zwischen direkt auszugebenden und normalen Strings?

    1. Danke fürs Berichtigen :)

    2. Danke für den Link! Den hab ich beim Suchen gar nicht gefunden- nur die normalen WordPress-Docs zur Internationalisierung :)


  • Wann "muss" oder besser, wann sollte ich _e('') und wann __('') benutzen?


    Der Aufruf von _e('') führt ein automatisches [COLOR=Red]e[/COLOR]cho mit der Übersetzung aus, sprich der Text wird sofort ausgegeben.
    DerAufruf von __('') führt kein echo aus sondern gibt nur den übersetzten Text zurück. Diese Variante ist zu bevorzugen, wenn man mit dem Text noch etwas anstellen will, bevor man ihn selbst per echo ausgibt.


    Was mache ich mit Strings wie diesem?

    PHP
    <?php comments_number ('0 Reaktionen', '1 Reaktion', '% Reaktionen' );?>

    Muss das dann so aussehen:

    PHP
    <?php comments_number _e('0 Reaktionen', '1 Reaktion', '% Reaktionen', 'Themename'));?>

    ?


    Nein, denn ich vermute, dass comments_number() eine Funktion ist, die intern erst die Nummer bestimmt, um die richtige Pluralform zu finden.
    Allerdings ist das kontraproduktiv, wenn das der Theme-Author so verfasst hat, denn es gibt Sprachen, die die Pluralisierung mit bis zu 4 verschieden Abstufungen benutzen!

    Angepasst sollte das so aussehen:

    PHP
    <?php comments_number (__('0 Reaktionen', 'Themename'), __('1 Reaktion','Themename'), __('% Reaktionen', 'Themename'));?>

    Diese Lösung stimmt aber z.B. für Russisch oder andere Sprachen mit > 2 Pluralformen nicht. Um das korrekt so zu programmieren, damit man die ebenfalls verfügbare _ngettext Pluralisierung verwenden kann, müsste ich das Theme als Source Code haben.


    Und die gleiche Frage für folgenden String:

    PHP
    Sie können hier einen <a href="#respond">Kommentar hinterlassen</a>, einen <a href="<? trackback_url() ?>">Trackback setzen</a> oder die Reaktionen per <a href="feed/">RSS-Feed</a> verfolgen.

    Ist meine modifizierte Version richtig?

    PHP
    <?php _e('Sie können hier einen <a href="#respond">Kommentar hinterlassen</a>, einen <a href="trackback_url()">Trackback setzen</a> oder die Reaktionen per <a href="feed/">RSS-Feed</a> verfolgen.', 'Themename')?>

    Das funtioniert ebenfalls nicht, denn die Funktion trackback_url() wird nicht ausgeführt. Ausserdem wäre dann der String nicht konstant, was er aber für gettext sein muß. Deshalb muß die URL reinformatiert werden.

    PHP
    <?php echo sprintf(__('Sie können hier einen <a href="#respond">Kommentar hinterlassen</a>, einen <a href="%s">Trackback setzen</a> oder die Reaktionen per <a href="feed/">RSS-Feed</a> verfolgen.', 'Themename'),get_trackback_url()); ?>

    Allerdings solltest du alle Texte als Ausgangssprache in englisch verfassen und danach übersetzen, denn standardmäßig läuft WP ohne Sprachdatei. Dann sollte es auch englisch erscheinen und nicht "zwangsdeutsch".

  • Und was ist in diesem Zusammenhang der Unterschied zwischen direkt auszugebenden und normalen Strings?


    Wie gesagt, _e() enthält ein explizites echo für die Ausgabe, __() nicht.

    Zitat

    2. Danke für den Link! Den hab ich beim Suchen gar nicht gefunden- nur die normalen WordPress-Docs zur Internationalisierung :)


    Codex-Suche nach "gettext". ;-)

  • Wow! Danke, codestyling und marX!

    Nach gettext habe ich gar nicht gesucht, muss ich zu meiner Schande gestehen. Ist aber eigentlich logisch.

    Nun gut, ich werde mir den Artikel jetzt durchlesen und es dann nochmal versuchen- mit meinem bisherigen Wissensstand komme ich ja nicht weit :(

  • Zitat

    Allerdings solltest du alle Texte als Ausgangssprache in englisch verfassen und danach übersetzen, denn standardmäßig läuft WP ohne Sprachdatei. Dann sollte es auch englisch erscheinen und nicht "zwangsdeutsch".

    Ich glaub, das ist jetzt ne dumme Frage, aber...

    Muss ich dazu irgendwelche "offiziellen" englischen WordPress-Vokabeln benutzen oder kann ich die englischen Phrasen benutzen, die mir in den Sinn kommen?

    /edit: Sorry für den Doppelpost.

  • Muss ich dazu irgendwelche "offiziellen" englischen WordPress-Vokabeln benutzen oder kann ich die englischen Phrasen benutzen, die mir in den Sinn kommen?


    Solange es halbwegs korrektes Englisch ist, gibts keine weiteren Anforderungen. Die Amis werden dich schon kritisieren, wenn das Theme mal öffentlich sein sollte und denen was nicht passt. :-)
    Man sollte höchsten z.B. darauf achten, das ein Post ein Post bleibt und nicht mit Sheet übersetzt wird. Ein wenig die englische Terminology sollte man schon im Auge behalten. Am Besten englisch anmelden (WPLANG in der config einen leeren String geben) und dann sieht man, ob es sich ins Bild einfügt.

  • Ich habe das Theme jetzt internationalisiert, übersetzt und nun eine .mo-Datei erstellt. Wenn ich nun aber in der functions.php des Themes das load_theme_textdomain('Themename');einfüge, passiert nichts.

    Habe ich da was vergessen?

    1. die Sprachdatei muss für deutsch "de_DE.mo" heissen.
    2. Sie muß direkt im Theme Ordner liegen, wenn sie mit load_theme_textdomain() geladen werden soll.
    3. in deiner wp-config.php sollte WPLANG auf 'de_DE' stehen.


    Wenn das alles zutrifft, sollte die Datei geladen werden. Wenn nicht, kann es eigentlich nur an einem Translation Plugin liegen (Gengo, qTranslate etc.)

  • Danke :)

    Habe ich dann gestern Abend schon festgestellt: Da wir ja von Deutsch auf Englisch übersetzt haben, musste die Sprachdatei natürlich korrekt en_US heißen- ich habe sie aber en_UK genannt. Obwohl ja en_US sehr viel logischer ist, schließlich kommt WordPress ja aus den USA.... Nun ja, aber jetzt läuft alles wunderbar :)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!