WP-Frage: Übersetzung

thobie

Aktives Mitglied
Thread Starter
Dabei seit
23.04.2006
Beiträge
1.063
Reaktionspunkte
187
Moin, Moin,

auf meinem Foodblog https://www.nudelheissundhos.de mit dem neu gewählten Theme Sydney (mit einem Child-Theme) sind bei den Tags zu den einzelnen Blogbeiträgen die Angaben zu Autor und Kommentar nicht übersetzt, dort steht „By“ (Autor) und „0 Comments“.

Ich habe nun mit dem Plugin Loco Translate und dann nochmals mit der App Poedit lokal auf meinem Mac die Übersetzung geprüft bzw. ergänzt.

Für „% Comments“ habe ich „% Kommentare“ eingegeben. Das Wort „By“ finde ich aber erst gar nicht.

Trotz der Änderung zeigt das Theme die Übersetzung nicht an.

Der Entwickler des Plugins Loco Translate leistet keinen Support, denn das Plugin sei nur ein Fileeditor.

Woran liegt das nun? Am Theme? Oder doch an den Sprachdateien?

Grüße aus Hamburg


Thobie
 
Ich würde vermuten, dass das eventuell tatsächlich im Theme drin steht, wenn das in den Sprachdateien nicht vorhanden ist.

edit:
template-tags.php Zeile 132:
PHP:
_x( 'By %1$s %2$s', 'post author', 'sydney' ),

sieht mir danach aus.
Sollte funktionieren, wenn du es austauschst mit:
PHP:
_x( '%1$s %2$s', 'post author', 'sydney' ),

in "extras.php" Zeile 410:
PHP:
esc_html__( 'By %s', 'sydney' ),

ändern zu:

PHP:
esc_html__( '%s', 'sydney' ),
 
Mache das sonst richtig mit PoEdit und einer eigenen Language-Datei für dein Theme.
 
Mache das sonst richtig mit PoEdit und einer eigenen Language-Datei für dein Theme.
Ich habe die Übersetzung zuerst in Loco Translate vorgenommen. „Comments“ übersetzt, „By“ ist jedoch nicht auffindbar. Die übersetzten „Comments“ werden nicht angezeigt.

Und mit PoEdit habe ich ja als zweiten Schritt diese Änderungen an den Language-Dateien für das Sydney-Theme im Ordner „Languages“ nochmals geprüft. Aber sie sind korrekt vorhanden, und obwohl es sich um die Language-Dateien des Themes handelt, passiert nichts.
 
  • Gefällt mir
Reaktionen: BEASTIEPENDENT
Du musst dich informieren, wie bzw. ob die language-Dateien von deinem Theme verwaltet werden.
Normalerweise legst du einen Ordner im Child-Theme an (languages) und packst dort die beiden Datein rein (.mo + .po).
Alternative müsstest du in der functions.php noch den language-Pfad hinzusetzen:
https://docs.easydigitaldownloads.com/article/908-how-do-i-translate-my-theme-from-a-child-theme
Haben wir da den ersten Fehler, den ich entdecke?

Mein Webspace enthält unter wp-content/languages/themes vier Sprachdateien für das Theme Sydney, zwei formell und zwei informell (jeweils .mo und .po). Der Ordner themes enthält jedoch keinen Ordner für das Child-Theme.

Benutzt jetzt das Parent- und das Child-Theme die gleichen Sprachdateien? Und muss ich einen Ordner für das Child-Theme anlegen, die bearbeiteten Sprachdateien da hineinpacken und dem Child-Themen dann „beibringen“, diese bitte zu nutzen?
 
Benutzt jetzt das Parent- und das Child-Theme die gleichen Sprachdateien? Und muss ich einen Ordner für das Child-Theme anlegen, die bearbeiteten Sprachdateien da hineinpacken und dem Child-Themen dann „beibringen“, diese bitte zu nutzen?
Das child-Theme lässt seine Dateien primär laden, danach werden alle dort nicht vorhandenen Dateien aus dem Parent-Theme geladen.
Und ja:
Upload your .po and .mo files to the /wp-content/themes/child-theme/languages directory. If you do not have a /languages folder in your child theme, create it.
 
  • Gefällt mir
Reaktionen: BEASTIEPENDENT
@Jarvis: Danke, das klappt mit der Änderung der beiden php-Dateien. Das "By" ist auf der Start- und den Beitragsseiten verschwunden. Macht aber an sich nicht viel Sinn, denn das Child-Theme hat diese beiden php-Daten nicht, bei einem Update des Parent-Themes sind die Änderungen wieder weg.

@Difool: Das ist ein wenig verwirrend. Ich bekomme in Loco Translate bei Wahl des Child-Themes die Meldung, das Child-Theme verwendet die gleichen Sprachdateien wie das Parent-Theme. Nun stelle ich fest, dass das Parent-Theme im Ordner themes/sydney/languages eine sydney.pot-Datei hat, die anscheinend auch benötigt wird. Nun habe ich für das Child-Theme auch einen Ordner languages erzeugt und diese sydney.pot-Datei hineinkopiert. Dann gebe ich in den Einstellungen unter Erweitert in Loco Translate für das Child-Theme diesen Ordner an und lade die po.-Dateien (formell/informell) hoch. Die .mo-Dateien werden dann erzeugt.

Ich habe den php-Code zunächst einmal nicht in die functions.php eingebaut, weil hier folgender Unterschied besteht:

Speichere ich die Languages-Dateien im Ordner wp-content
  • unter languages (!) in den jeweiligen Theme-Ordner oder
  • unter themes (!) in den Ordner des jeweiligen (Child-)Themes in den dortigen language-Ordner
Aber ich habe jetzt in Loco Translate auch zwei Quellen zur Bearbeitung, das Parent-Theme und das Child-Theme. Nach wie vor ist in letzterem aber das Wort "Comments" ordnungsgemäß übersetzt. Die Site zeigt es aber nicht an. Siehe Screenshots.
 

Anhänge

  • Sydney_Languages_Dateien_Uebersicht.jpg
    Sydney_Languages_Dateien_Uebersicht.jpg
    172,4 KB · Aufrufe: 41
  • Uebersetzung.jpg
    Uebersetzung.jpg
    159,8 KB · Aufrufe: 46
Zumindest ohne das Plugin "Loco" legt man in einem languages-Ordner im child-Theme die Sprachdateien an
und teilt dem System über einen Eintrag in der functions.php mit, dass diese primär geladen werden sollen.

Eigene Sprachdateien kann man mit PoEdit erstellen; dafür lädt man die .pot-Datei des Themes in PoEdit
und erledigt dort seine Übersetzungen und speichert diese ab – zeitgleich werden davon die .mo und .po Dateien erstellt.

Wie das "Loco" über diese Dateien regelt, weiß ich nicht – bisher habe ich das Plugin nicht benutzt,
weil ich den oben genannten Weg immer gehe, um dass Plugin vermeiden zu können.
 
Wie das "Loco" über diese Dateien regelt, weiß ich nicht – bisher habe ich das Plugin nicht benutzt,
weil ich den oben genannten Weg immer gehe, um dass Plugin vermeiden zu können.
Schau mal den Beitrag #4, „Und mit PoEdit habe ich ja als zweiten Schritt diese Änderungen an den Language-Dateien für das Sydney-Theme im Ordner „Languages“ nochmals geprüft. Aber sie sind korrekt vorhanden, und obwohl es sich um die Language-Dateien des Themes handelt, passiert nichts.“

Ich habe als zweiten Schritt, nachdem das Plugin „nicht“ funktionierte, die Dateien lokal mit PoEdit geprüft. Übersetzung vorhanden. Aber Theme zeigt nichts an.
 
Zumindest ohne das Plugin "Loco" legt man in einem languages-Ordner im child-Theme die Sprachdateien an
und teilt dem System über einen Eintrag in der functions.php mit, dass diese primär geladen werden sollen.
Loco hat eine Einstellungsmöglichkeit, dass man dort für die jeweiligen .po-/.mo-Dateien genau den Speicherort angeben kann, also der language-Ordner in jeweiligen theme-Ordner oder eben umgekehrt der theme-Ordner im language-Ordner, jeweils im wp-content-Ordner. Damit muss man dem System nicht mehr über die functions.php mitteilen, wo sich die Dateien befinden.
 
Moin, Moin, Difool, ich bin jetzt Deinem Rat gefolgt und habe folgendes durchgeführt.

Zuerst einmal das Plugin Loco Translate deaktiviert. Das macht an sich keinen Sinn, denn es ist ja nur ein File-Editor und sagt dem System ja nicht, auf welche Sprachdateien und wo es zugreifen soll.

Ich habe im Ordner wp-content/languages/themes einen Ordner child-theme-sydney erzeugt und darin einen Ordner languages. In diesen Ordner habe ich die Spachdateien kopiert. Vorher habe ich mit PoEdit nochmals lokal geprüft, ob die Übersetzung von „Comments“ vorhanden ist. Dann habe ich dem System über den vor Dir in einem Link genannten PHP-Code in der functions.php „beigebracht“, wo es die Sprachdateien suchen soll.

Aber auch mit dieser Vorgehensweise wird „Comments“ im Frontend nicht übersetzt.
 
Je weniger Plugins mitlaufen, umso besser.

Der languages-Ordner muss im aktiven child-Theme liegen – so wie im parent-Theme.

wp-content/themes/child-theme-sydney/languages
wp-content/themes/child-theme-sydney/languages/sydney.pot
wp-content/themes/child-theme-sydney/languages/sydney.mo
wp-content/themes/child-theme-sydney/languages/sydney.po

Wobei natürlich das "child-theme-sydney" auch das aktive Theme für deine Website sein muss.
Das verwendete aktive Theme muss einen languages-Ordner bekommen, in dem du deine übersetzten .mo und .po Dateien legst.

Hat das verwendete aktive child-Theme keinen languages-Ordner mit .mo und .po Dateien,
dann werden die languages-Dateien aus dem parent-Theme geladen!
 
  • Gefällt mir
Reaktionen: BEASTIEPENDENT
Bevor ich daran gehe, das alles nochmals zu prüfen, kurze Verständnisfrage, um Fehler zu beheben.

Der Ordner mit dem Child-Theme, den das Orbisius-Plugin zur Erstellung eines Child-Themes erstellt, lautet nicht (!) child-theme-sydney, sondern sydney-child-theme. Vermutlich wird dieser Ordner im ganzen WP-System so verwendet. Muss ich den PHP-Code oder etwas anderes dementsprechend anpassen?
 
Natürlich.
Der Pfad muss angepasst werden, sonst funktioniert es ja nicht.
Bzw. ist der Pfad in dem Aufruf vorhanden ('get_stylesheet_directory()'):


Rich (BBCode):
/**
 * Loads the child theme textdomain.
 */
function wpdocs_child_theme_setup() {
    load_child_theme_textdomain( 'my_parent_theme', get_stylesheet_directory() . '/languages' );
}
add_action( 'after_setup_theme', 'wpdocs_child_theme_setup' );

1. ‘my_parent_theme’ = Der Name des parent-theme (Beispiel: 'sydney')
2. ‘wpdocs_child_theme_setup’ = Der Name deines child theme (Beispiel: 'sydney-child-theme')

Wenn du mit PoEdit die .pot öffnest und deine Übersetzungen anlegst,
dann müssen die beiden Sprachdateien, welche du in den languages-Ordner des child-Themes legst,
wie folgt benannt werden (language-only filenames wie 'de_DE'):

- languages/de_DE.mo
- languages/de_DE.po

Wenn die beiden Dateien anders heißen oder benannt werden, dann wird es nicht geladen und funktioniert nicht.
 
Moin, Moin, Difool,

ich habe das jetzt entsprechend angepasst.

Dein PHP-Code funktionierte nicht, ich bekam beim Abspeichern der functions.php-Datei eine Fehlermeldung (Bindestriche statt Unterstriche).

Dieser Code wurde von der functions.php angenommen:

PHP:
/**
 * Loads the child theme textdomain.
 */
function sydney_child_theme_setup() {
    load_child_theme_textdomain( 'sydney', get_stylesheet_directory() . '/languages' );
}
add_action( 'after_setup_theme', 'sydney_child_theme_setup' );

Und in diesem Ordner:

wp-content/themes/sydney-child-theme/languages

liegen nun diese Dateien:

de_DE.mo, de_DE.po, de_DE_formal.mo, de_DE_formal.po, sydney.pot

Aber das System übersetzt das „Comments“ immer noch nicht.
 
Aber das System übersetzt das „Comments“ immer noch nicht.
Daher mehrmals mein Hinweis darauf, dass alles Fehlende oder alle nicht vorhandenen Template-Dateien im child-Theme
aus dem parent-Theme geladen werden.

Hardcoded ändern:
Jede im child-Theme angelegte Datei wird primär – vor denen aus dem parent-Theme geladen.
Nimm' nun die Template-Datei, welche die 'comments by'-Zeile enthält und lege diese exakt so wie im parent-Theme im child-Theme an.
Je nach dem wie das Framework von Theme 'sydney' aufgebaut ist, kann das in der comments.php oder single.php sein.
Diese Datei dann mit selben Pfad, den sie im parent-Theme hat, im child-Theme anlegen (reinkopieren).
In der child-Theme Datei kannst du dann die Stellen mit Deutsch überschreiben.

Beipiel hardcoded:
aus:
<p class="no-comments"><?php _e( 'Comments are closed.', 'sydney' ); ?></p>
wird:
<p class="no-comments"><?php _e( 'Die Kommentare sind geschlossen.', 'sydney' ); ?></p>

languages Datei übersetzen:
Alternativ und der bessere Weg wäre die Übersetzung selbst in der .pot-Datei anzulegen.

Beipiel:
<p class="no-comments"><?php _e( 'Comments are closed.', 'sydney' ); ?></p>

Findest du keine Übersetzung von 'Comments are closed.' in der .pot, dann lege sie dort an, wie die anderen dort angelegt sind:
Comments are closed. = Die Kommentare sind geschlossen.
 
  • Gefällt mir
Reaktionen: BEASTIEPENDENT
Daher mehrmals mein Hinweis darauf, dass alles Fehlende oder alle nicht vorhandenen Template-Dateien im child-Theme
aus dem parent-Theme geladen werden.
Das habe ich verstanden.
Hardcoded ändern:
(…)Je nach dem wie das Framework von Theme 'sydney' aufgebaut ist, kann das in der comments.php oder single.php sein.
Diese Datei dann mit selben Pfad, den sie im parent-Theme hat, im child-Theme anlegen (reinkopieren).
Das Child-Theme enthält weder eine comments.php noch eine single.php.
languages Datei übersetzen:
Alternativ und der bessere Weg wäre die Übersetzung selbst in der .pot-Datei anzulegen.
Wenn Du sagst, dies sei der bessere Weg, dann gehe ich so vor.

Ich habe die Datei sydney.pot im Verzeichnis wp-content/themes/sydney-child-theme/languages editiert und folgendes geändert (die Änderungen siehst Du ja an den deutschen Wörtern):

Code:
#: inc/template-tags.php:99
msgid "1 Kommentar"
msgstr ""

#: inc/template-tags.php:99
msgid "% Kommentare"
msgstr ""

Keine Änderung im Frontend.
 
Wenn du eine .pot Datei in PoEdit öffnest, editierst du sie dort und wenn du sie abspeicherst,
dann legt dir PoEdit die beiden benötigten languages-Datei (.mo + .po) von der .pot an.

Die beiden Dateien werden dann zum Laden benötigt:
de_DE.mo
de_DE.po

Die .pot Datei musst du in PoEdit editieren und nicht manuell mit einem Editor – dafür ist die nicht gedacht.
Das ist quasi "nur" die Arbeitsdatei.

edit:
Und du müsstest dir die entsprechende .php-Datei anschauen, in der die Wörter "comments" sind;
evtl. haben die Theme-Ersteller diese nicht für die language-Dateien angelegt.
Dann kannst du entweder "hardcoded" in deutsch ändern oder aber die Variable zur/als languages-Datei umschreiben.
Dafür kopierst du die die .php-Datei aus dem parent-Theme in dein child-Theme:

In deinem child-Theme anlegen:
- einen Ordner namens "inc"
- in den "inc" Ordner die template-tags.php kopieren

… und editierst in der in das child-Theme kopierten "template-tags.php" Datei den Abschnitt:

PHP:
if ( ! function_exists( 'sydney_entry_comments' ) ) :
    function sydney_entry_comments() {
        if ( ! post_password_required() && ( comments_open() || get_comments_number() ) ) {
            echo '<span class="comments-link">';
            comments_popup_link( esc_html__( '0 comments', 'sydney' ), esc_html__( '1 comment', 'sydney' ), esc_html__( '% comments', 'sydney' ) );
            echo '</span>';
        }   
    }
endif;

… den Part in:

PHP:
comments_popup_link( esc_html__( '0 Kommentare', 'sydney' ), esc_html__( '1 Kommentar', 'sydney' ), esc_html__( '% Kommentare', 'sydney' ) );
 
  • Gefällt mir
Reaktionen: BEASTIEPENDENT
Ich habe jetzt Deinem Rat nach folgendes durchgeführt:

1. Ich habe in PoEdit die Sprachdateien neu erzeugt, geprüft, ob "Comments" usw. übersetzt sind und die .mo-/.po.-Dateien in den Ordner wp-content/themes/sydney-child-theme/languages kopiert.

2. Ich bin vor kurzem auch auf die Idee gekommen, da ein Child-Theme erst auf die eigenen, vorhandenen Dateien zugreift und erst dann auf die Dateien des Parent-Themes, die von Jarvis und Dir genannten Daten in den Child-Time-Ordner zu kopieren und dort die Änderungen vorzunehmen.

Ich habe also die Datei template-tags.php und extras.php in den Ordner inc im Child-Theme kopiert. Dann habe ich die drei Änderungen im PHP-Code gemäß Vorgabe von Jarvis für den Autor und von Dir für die Kommentare durchgeführt.

Mittlerweile war eine Update des Themes Sydney vorhanden. Dieses habe ich ausgeführt. Und nun, obwohl das Child-Theme aktiv ist und die Änderungen im PHP-Code der beiden Dateien im Child-Time-Ordner vorgenommen sind, habe ich im Frontend wieder den Text "By Thobie" und "0 Comments".

Das WP-System greift gar nicht auf die Child-Time-Dateien zu!
 
Zurück
Oben Unten