WordPress Plugin qTranslate entfernen

Mit qTranslate könnt ihr euren Blog mit mehrsprachigen Inhalten füllen. Wenn ihr euch doch entscheidet, von einem mehrsprachigen Blog wieder auf eine Sprache zurückzukehren, gibt es einige Schritte zu beachten um qTranslate vollständig zu deaktivieren.


Das Plugin selbst bietet einige Einstellungsmöglichkeiten, wie dem Nutzer der mehrsprachige Content präsentiert wird. So kann man dies z.B. über Subdomains (de.wrel.de) oder Prefixe (www.wrel.de/en/ARTIKEL_PERMALINK) in der URL lösen. Was qTranslate selbst im Hintergrund macht ist, dass in dem Artikel / Seite alle aktivierten Sprachen gespeichert werden. Bei einer Impressumsseite, welche auf deutsch und englisch verfügbar ist, würde der Titel der Seite wie folgt im Hintergrund gespeichert werden:

<!--:en-->Imprint<!--:--><!--:de-->Impressum<!--:-->

Hier wird im Titel und im Inhaltsbereich der Seite der mehrsprachige Inhalt mittels den qTranslate Tags getrennt und in der Datenbank abgespeichert.

So was machen wir jetzt, wenn wir qTransalte schon erfolgreich auf unserem Blog eingesetzt haben und kommen darauf, dass der Blog hauptsächlich englische Inhalte hat? Auch die Leser sind meist nur aus englischsprachigen Ländern. Ich möchte den Blog jetzt nurnoch einsprachig halten.

Kann ich jetzt einfach qTranslate als Plugin deaktivieren und das wars? Nein das geht leider nicht so einfach. Wenn ich das Plugin nur deaktiviere und anschließend meinen Blog aufrufe, werden bei mehrsprachigen Seiten / Artikel nun alle Sprachen angezeigt. Bei unserer Impressumseite wäre das dann:

ImprintImpressum

Der deutsche und der englische Text erscheinen dann gleichzeitig. Dies kommt daher, weil wir das Plugin deaktiviert haben und der Inhalt / Titel noch immer mehrsprachig mit den Tags in der Datenbank hinterlegt ist. Das wollen wir natürlich nicht. Aber wie bekommen wir das jetzt weg?

Gleich vorab: Der Workaround hier ist nicht ganz ungefährlich. Bitte sichert euch eure Datenbank vorher! Durchgeführt selbst habe ich es bei WordPress Version 3.3. Ich musste auch erst suchen, in wie weit qTranslate in einem Blog Spuren hinterlässt. Und da bin ich auf den Post von guido gestossen. So müsst ihr einfach diese acht Queries direkt in MySQL ausführen:

UPDATE wp_posts SET post_content = case when LOCATE('<!--:en-->', post_content) > 0 then SUBSTRING(post_content, LOCATE('<!--:en-->', post_content)+10) else post_content end;
UPDATE wp_posts SET post_content = case when LOCATE('<!--:-->', post_content) > 0 then SUBSTRING(post_content, 1, LOCATE('<!--:-->', post_content)-1) else post_content end;

UPDATE wp_posts SET post_title = case when LOCATE('<!--:en-->', post_title) > 0 then SUBSTRING(post_title, LOCATE('<!--:en-->', post_title)+10) else post_title end;
UPDATE wp_posts SET post_title = case when LOCATE('<!--:-->', post_title) > 0 then SUBSTRING(post_title, 1, LOCATE('<!--:-->', post_title)-1) else post_title end;

UPDATE wp_posts SET post_excerpt = case when LOCATE('<!--:en-->', post_excerpt) > 0 then SUBSTRING(post_excerpt, LOCATE('<!--:en-->', post_excerpt)+10) else post_excerpt end;
UPDATE wp_posts SET post_excerpt = case when LOCATE('<!--:-->', post_excerpt) > 0 then SUBSTRING(post_excerpt, 1, LOCATE('<!--:-->', post_excerpt)-1) else post_excerpt end;

UPDATE wp_terms SET name = case when LOCATE('<!--:en-->', name) > 0 then SUBSTRING(name, LOCATE('<!--:en-->', name)+10) else name end;
UPDATE wp_terms SET name = case when LOCATE('<!--:-->', name) > 0 then SUBSTRING(name, 1, LOCATE('<!--:-->', name)-1) else name end;

Hier werden aus wp_posts und wp_terms die englischen Artikel behalten und alle anderen gelöscht. Ebenso werden die qTranslate Tags entfernt. Ihr könnt natürlich auch statt en auch de bei den Queries einsetzen, wenn ihr den deutschen Inhalt behalten wollt.

Wenn ihr das ausgeführt habt, könnt ihr das Plugin deaktivieren. Die Permalinks für die Artikel bleiben natürlich erhalten. Eigentlich war’s das dann schon. Das Problem, welches ich noch hatte, war wenn ich auf die Home Seite meines Blogs gegangen bin, kam statt meiner Startseite irgendein Artikel. Das hat den Grund, dass noch nicht komplett alles von qTranslate entfernt wurde. Im Hauptverzeichnis des Blogs in der .htaccess File waren noch Einträge von qTranslate vorhanden. Diese Einträge sind bei qTranslate für das Routing wie z.B. /de/impressum zuständig. Da aber das Plugin nicht mehr aktiv ist, gibt es diese Struktur auch nicht mehr und WordPress findet unter der Resource nichts mehr. Hier wird versucht einen Artikel zu finden, der mit de beginnt und auf diesen umgeleitet.

Um das zu vermeiden, müsst ihr in der .htaccess noch den qTranslate Code entfernen. Bei mir waren es folgende Zeilen:

# qtranslate fix
RewriteBase /
RewriteCond %{QUERY_STRING} ^$
#RewriteCond %{HTTP:Accept-Language} de [NC]
#RewriteRule ^$ http://www.YOURDOMAIN.com/de/ [R,L]

RewriteCond %{QUERY_STRING} ^$
RewriteCond %{HTTP:Accept-Language} en
RewriteRule ^$ http://www.YOURDOMAIN.com/en/ [R,L]

So nun ist qTranslate vollständig aus eurem Blog entfernt. Und alles sollte wieder gehen. Wenn nicht, dann habt ihr immer noch euer Backup. Ich hoffe, ich konnte euch etwas helfen.

2 Gedanken zu “WordPress Plugin qTranslate entfernen

  1. Einmail habe ich eine neue Version von qTranslate in meiner Webseite installiert ohne vorher sicher stellen, das qTranslate compatibel mit diser Version war. Ich hatte keine backup gemacht und alles war ein Mess. Ich finde das der Entfernung von qTranslate viel zu kompliziert wird und, wie du sagst, nicht ganz ungefährlich.

    • Hallo Sandra,

      ja leider ist nach der deaktivierung noch einiges von qtranslate in WordPress noch vorhanden. Man sollte auch nochmal schaun welche Optionen in der Datenbank gesetzt wurden und gegebenenfalls alle Links auf der Seite nochmals durchgehen.

      Lg Tom

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>