Probleme mit Theme Internationalisierung

  • Hallo,

    ich habe mich gerade mit mehrsprachigen Blogs auseinander gesetzt und versucht meinen Blog zu übersetzen. Ich habe dafür das Language-Switcher Plugin eingebunden und den Artikel Angi’s Blog Language Switcher Wordpress Plugin durchgemacht.

    Leider hakt es mit der Übersetzung der Sidebar-Elemente. Zum Übersetzen habe ich mir zunächst mein Theme wieder auf die lokale Platte geladen und Poedit konfiguriert. Poedit listet mir alle englischen Konstanten auf, die ich dann auch übersetzt habe und in den Namensraum 'test' gestellt habe. Nach dem Speichern bekomme ich zwei Dateien de_DE.mo und de_DE.po.

    So, jetzt fehlt laut dem Artikel noch das Anpassen der PHP-Dateien an gettext. Ich habe mal zum Testen mit der sidebar.php angefangen und bin dort in die ausgelagerte categories.php rein.

    Hier sehe ich den folgenden Code:

    PHP
    <?php wp_list_categories('show_count=1&hide_empty=0&orderby=ID&hierarchical=true&title_li=<h1 class="t2">' . __('Categories') . '</h1>'); ?>

    Gut, also habe ich die Zeile so abgeändert:

    PHP
    <?php wp_list_categories('show_count=1&hide_empty=0&orderby=ID&hierarchical=true&title_li=<h1 class="t2">' . __(__('Categories', 'test')) . '</h1>'); ?>

    Und, was passiert? Nichts natürlich, kein übersetzter Text.

    Gut, dann habe ich es noch mit folgendem versucht:

    PHP
    <?php wp_list_categories('show_count=1&hide_empty=0&orderby=ID&hierarchical=true&title_li=<h1 class="t2">' . __(_e('Categories', 'mtsphoto')) . '</h1>'); ?>

    Hier bekomme ich nicht mal mehr den englischen Text 'Categories' angezeigt.

    Weiss jemand, wo hier der Fehler liegen könnte?

    • 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

  • Das habe ich auch schon ausprobiert, das hatte keine Auswirkungen.

    Was ich mich nur frage: irgendwie muss doch mein Theme davon mitbekommen, dass ich plötzlich zwei Language-Dateien "de_DE.mo" und "de_DE.po" in das Theme-Verzeichnis gelegt habe und dann mit dem

    Code
    [COLOR=#000000][COLOR=#0000cc]__[/COLOR][COLOR=#006600]([/COLOR][COLOR=#cc0000]'Categories'[/COLOR][COLOR=#006600], [/COLOR][COLOR=#cc0000]'test'[/COLOR][COLOR=#006600])[/COLOR][/COLOR]

    genau das Tag aus dieser Language-Datei ausgelesen werden soll.

    Wo mache ich das denn und vor allem, wie?

    Vielleicht habe ich auch diese beiden Dateien in das falsche Verzeichnis gelegt und es geht deshalb nicht? Die liegen momentan in:

    Code
    /wordpress/wp-content/themes/green-avenue/


    Ich habe auch mal in der header.php im <body>-Bereich die folgende Zeile eingefügt, um die Text-Domäne zu laden, aber das war auch ohne Erfolg:

    PHP
    <?php load_theme_textdomain('test');?>


    Zitat

    Der Unterschied zwischen __() und _e() ist dir klar?
    I18n for WordPress Developers WordPress Codex

    Hhm, bei mir kam dieser gettext __('Categories') bereits mit dem Theme mit, nur ohne die Text-Domäne, darum meinte ich, dass ich diese noch doppelt machen müsse.

    Einmal editiert, zuletzt von OXO (1. Juni 2009 um 12:41)

  • in die header.php kann's eigentlich auch rein ... NUR muss der Name des Themes darein anstelle von test.

    PHP
    <?php load_theme_textdomain('green-avenue');?>
    PHP
    __('Categories', 'green-avenue')

    [size=10]Bitte immer zuerst die Forensuche nutzen und erst danach Deine Fragen hier im Forum stellen, denn sehr vieles wurde schon mehrfach beantwortet. Bitte dabei auch die Forenregeln beachten.
    Kein Support per PN - Fragen gehören ins Forum.[/SIZE]
    [size=8]Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Johann Wolfgang von Goethe)[/SIZE]

  • Schade, ging auch noch nicht.

    Also nochmal zur Zusammenfassung:

    1) die gettext-Aufrufe sind schon drin im Theme, zum Beispiel steht ohne dass ich was einfüge folgendes in der categories.php drin:

    Code
    ?php wp_list_categories('show_count=1&hide_empty=0&orderby=ID&hierarchical=true&title_li=<h1 class="t2">' . __('Categories') . '</h1>'); ?>

    2) Ich habe mit poEdit im Theme-Hauptordner übersetzte de_DE.xx Dateien erzeugt (liegen unter /wp-content/themes/green-avenue/) und dabei als Text-Domäne 'test' eingetragen

    3) Allererste Zeile in der functions.php ist:

    PHP
    <?php load_theme_textdomain('green-avenue'); ?>

    4) Im <body>-Abschnitt der header.php steht folgendes drin:

    PHP
    <?php load_theme_textdomain('green-avenue');?>


    Sollte ja so laufen, oder fehlt noch was?

  • 1) die gettext-Aufrufe sind schon drin im Theme, zum Beispiel steht ohne dass ich was einfüge folgendes in der categories.php drin:

    Code
    ?php wp_list_categories('show_count=1&hide_empty=0&orderby=ID&hierarchical=true&title_li=<h1 class="t2">' . __('Categories') . '</h1>'); ?>


    Nur nochmal zur Klarstellung, weil du das weiter obens schonmal gefragt hattest. Der vorhandene Code verwendet die globale .mo-Datei (wp-content/languages). Um eine eigene zu verwenden musst du eben den Parameter für die Textdomain hinzufügen.

    Zitat

    Sollte ja so laufen, oder fehlt noch was?


    Ich mach nicht so viel I18N... Soll ich den thread mal ins Sprachdatei-Forum verschieben?

  • Ja, ich habe es mit beiden versucht

    a) globale de_DE.mo durch meine angepasste ersetzt --> hat nix gebracht
    b)

    Code
    __('Categories', 'test')

    anstelle von

    Code
    __('Categories')


    Vielleicht wäre das mit dem Umziehen des Threads ne ganz gute Idee. Bekomme ich da gleich nen Follow-Up Link per Mail zugeschickt?

  • Welche Möglichkeit(en) habe ich denn, um dem Problem auf die Spur zu kommen?

    Also in den Messages kann ich die Language-Codes des Language Switcher Plugins verwenden und bereits zwischen den Sprachen umschalten.

    Es fehlt noch einzig und allein die Sidebar - hier lässt sich keines der Element umschalten.

    Hat das etwas damit zu tun, dass es im Theme-Verzeichnis zwar eine sidebar.php existiert, die eigentlichen Elemente, wie "Categories", "Pages" etc. in separaten PHP-Dateien in einem "sidebar"-Unterordner des Themes liegen??

    Oder kann man im Zusammenhang mit poEdit etwas falsch machen?

  • Ich habe mir zur Internationalisierung noch ein weiteres Plugin heruntergeladen (qTranslate).

    Wisst Ihr, was komisch ist? Sobald ich dieses Widget aktiviere, sind alle anderen Elemente der Sidebar, wie z.B. 'Categories' verchwunden. Füge ich hierfür auch wieder das entsprechende Widget hinzu + das Widget für qTranslate, dann steht im qTranslate-Widget auf Deutsch "Sprachen" und auf Entlisch "Languages", wohingegen bei den Kategorien in beiden Sprachen "Categories" stehen bleibt.

    Das Widget von qTranslate bekommt auch im Theme eine andere Farbe, als zum Beispiel das Kategorien-Widget.

    Was hat es denn damit aufsich? Kann es sein, dass an meinem Theme irgendetwas so bescheuert eingestellt ist, dass es sich gar nicht übersetzen lässt? Oder muss man da einen anderen Weg zum Übersetzen nehmen?

    Bin wirklich um jeden Vorschlag dankbar!!!

  • in die header.php kann's eigentlich auch rein ... NUR muss der Name des Themes darein anstelle von test.

    PHP
    <?php load_theme_textdomain('green-avenue');?>
    PHP
    __('Categories', 'green-avenue')

    Wo bekomme ich denn den genauen Namen des Themes raus? Vielleicht passt das ja bei mir nicht, so dass hier ein ganz anderes Verzeichnis für das Theme referenziert wird.

    Muss ich eigentlich meine .mo und meine .po-Datei beide in das Theme-Verzeichnis legen, oder wie funktioniert das??

  • Angie's Blog:

    Zitat


    4. Lade die neue Haupt-Sprachdatei in das Verzeichnis “languages” in “wp-includes” hoch (oder in “wp_content”, wenn du Wordpress 2.2 oder höher verwendest). Du musst sie ohne den Ländercode speichern, z.B. “es.mo” anstelle von “es_ES.mo”. Beachte: Die PO Datei/en musst du nicht hochladen, aber speichere sie in deiner lokalen Kopie ab.

    Diese Sprachumschaltungsplugin benötigen die Sprachdateien meist alle nur mit dem Sprachkürzel nicht aber mit der Landeskennung. Deshalb muß man meinsten den Harakiri machen und alle Sprachdateien von allen Plugins und Themes in dieses Format umbenennen, damit das anstandslos klappt.

  • Hallo codestyling,

    bedeutet das, dass es reicht, wenn ich quasi die globale de_DE.mo im "wp-content/languages" lasse und mir dann noch die paar Zusätzlichen Übersetzungen in einer neuen de.mo mache, die dann aber in das Verzeichnis des Themes kommt?

    Ich kann es jetzt leider nicht mehr ausprobieren, da ich frustriert zu qTranslate gewechselt habe. Aber nur für die Zukunft - man weiss ja nie, wann man das mal wieder braucht, oder jemand anders nach der Antwort sucht. ;-)

  • Hallo!
    Ich stehe gerade vor genau dem selben Problem.

    Ich habe mir meine Fehlerseite vom Theme geändert und sie wird einfach nicht übersetzt.

    Hier die Fehlerseite:

    PHP
    <h1><?php _e('Error 404 - Not Found!', 'silhouette'); ?></h1>
    		<p><?php _e('The post you are looking for does not exist anymore.', 'silhouette');?></p>

    Die functions.php

    PHP
    <?php load_theme_textdomain('silhouette');?>

    de.po

    Es passiert einfach gar nichts und ich kann es mir nicht erklären!

    Gruß & vielen Dank,
    MacMo

  • PHP
    <?php load_theme_textdomain('silhouette');?>

    de.po

    Es passiert einfach gar nichts und ich kann es mir nicht erklären!

    Gruß & vielen Dank,
    MacMo


    Ich hoffe, du hast nicht nur die *.po Datei geändert sondern daraus mit einem Tool wieder eine neue *.mo Datei erstellen lassen.
    Die *.po ist nur die Vorlage, denn die von WordPress benutzte Sprachdatei ist immer die *.mo.

    Hier noch eine hilfreich Information, was genau Lokalisierung bedeutet und wie man das macht: Code Styling Project WordCamp Vortrag “Lokalisierung” als PDF Download

  • Selbstverständlich habe ich auch die .mo Datei hochgeladen.^^
    Ich weiß wirklich nicht woran es liegen könnte. Hat jemand eine Idee?

  • Es gibt mehrere Gründe, warum sie nicht mehr geladen wird:
    1.) Übertragungsfehler beim FTP upload (nicht im binär Modus hochgeladen -> Datei kaputt)
    2.) Sie liegt nicht im Theme Hauptordner, denn so wie die Textdomain geladen wird, muß sie in diesen speziellen Theme im Hauptorder und nicht in einem seiner Unterpfade liegen.
    3.) Du benutzt eines der vielen Mehrsprachigkeitsplugins, welches nur 2 stellige Sprachdateinamen versteht (de.mo statt de_DE.mo)
    4.) in deiner wp-config.php steht unter WPLANG nicht 'de_DE'.

    soviel erstmal dazu, kannst du das prüfen ?

Jetzt mitmachen!

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