WordPress von qTranslate-X nach WPML migrieren

Seit einigen Jahren blogge ich mehrsprachig: in meiner Muttersprache deutsch und - aufgrund der internationalen Besucher - auch in englisch. Hierfür habe ich anfangs das Plugin qTranslate verwendet, welches bedauerlicherweise irgendwann nicht mehr weiterentwickelt wurde. Glücklicherweise gab es einige Forks des Plugins - mit qTranslate-X fand ich einen würdigen Nachfolger.

Allerdings stagniert auch hier leider seit geraumer Zeit die Entwicklung. Seit 2016 gab es keine Updates mehr und mit neueren WordPress-Versionen gibt es zunehmend immer mehr ärgerliche Bugs. Seit WordPress 4.9 ist das Plugin nicht mehr in der Lage Kategorien und andere Taxonomien, wie beispielsweise Tags, zu übersetzen (das war auch einer der Gründe, weswegen ich in letzter Zeit keine neuen Artikel veröffentlicht habe). Da mit einem Update in absehbarer Zeit nicht mehr zu rechnen ist, war es an der Zeit, einen Nachfolger zu suchen.

Nach einiger Recherchen stellte sich heraus, dass WordPress Multilingual Plugin (WPML) der Platzhirsch in diesem Segment zu sein scheint. Dieses Plugin steht nicht kostenlos zur Verfügung, hat sich aber aufgrund des schnellen und qualitativen Supports einen Defacto-Standard Status erarbeitet. Insbesondere die positiven Bewertungen des Supports haben mich überzeugt - qTranslate bzw. qTranslate-X waren zwar kostenlos, jedoch gab es nach Major-Updates öfter Probleme. Auf der anderen Seite gibt es wenig vergleichbare bzw. günstigere Alternativen. Einige Vergleiche (auch mit qTranslate-X) finden sich auf der Webseite des Anbieters.

Unterschiede zu qTranslate-X

qTranslate-X platziert im Wesentlichen in sämtlichen WordPress-Elementen (Posts, Seiten, Menüs,...) Meta-Tags, um die Anzeige der Sprache zu steuern - beispielsweise:

1[:de]Hallo Welt[:en]Hello World

Mit WPML ändert sich das - hier werden sämtliche Elemente verdoppelt. Das bedeutet, ein zweisprachiger Artikel besteht aus zwei Posts mit unterschiedlichen IDs. Über die Datenbank sind die beiden Posts verknüpft und werden - je nach Client-Sprache bzw. URL - in der entsprechend lokalisierten Version angezeigt.

Da es je nach Sprache unterschiedliche Post-IDs gibt, führt das auch dazu, dass je nach Sprache andere Kommentare angezeigt werden. Das ist ein großer Unterschied - kann aber durchaus die Übersichtlichkeit erhöhen. So sehen französische Besucher beispielsweise keine deutschen Kommentare, mit denen sie erstmal nichts anfangen können.

Migration

Bevor die Migration gestartet wird, ist es unabdingbar ein Backup der WordPress-Installation inklusive Datenbank zu erstellen und dieses zu überprüfen. Ein nicht funktionierendes Backup könnte hier fatale Folgen haben.. 😉

Die Migration wurde vom Hersteller dokumentiert und verläuft in mehreren Schritten:

  1. Installation des qTranslate X Cleanup and WPML Import-Plugins
  2. Deaktivieren von qTranslate-X und Aktivieren des eben installierten Plugins
  3. Importieren der Übersetzungen
  4. Erstellen von Rewrite-Regeln
  5. Entfernen von qTranslate-X

Die Migration hat bei mir wie in der Dokumentation beschrieben einwandfrei funktioniert.

Nacharbeiten

Nach der Migration fielen mir einige Posts auf, die fehlerhafte, leere Titel hatten - statt des eigentlichen Titels waren hier nur Titelfragmente, wie beispielsweise "(de)" oder "(de) (en)" zu finden. Die Titel ließen sich jedoch schnell aus dem Backup wiederherstellen.

Darüber hinaus mussten Kategorien und Tags manuell übersetzt werden - unterhalb des Menüs WPML > Taxonomy Translation gibt es hier einen Editor, mit welchem die Taxonomien pro Sprache angepasst werden können:

Übersetzen von Kategorien

Ich habe mich dazu entschieden, die einzelnen Taxonomien mit einer Postfix, die den ISO 639-1 Code der Sprache (beispielsweise de, en,...) enthält, zu versehen. Das half mir bei späteren Nacharbeiten - doch dazu gleich mehr. Ärgerlicher war jedoch die Tatsache, dass sämtliche, nach englisch übersetzten Blog-Artikel keinen Kategorien und Tags zugewiesen waren. Bei über 500 Artikeln war das eine Aufgabe, die ich keineswegs manuell erledigen wollte. Hier erschien es mir sinnvoller, die Struktur der WordPress-Datenbank zu analysieren, da ich im WPML-Plugin auch keine Möglichkeit fand, die fehlenden Daten zu aktualisieren.

WPML Category and Tag Migration Assistant

Nach einigen Recherche-Arbeiten habe ich kurzerhand ein kleines PHP-Tool erstellt, welches die fehlenden Kategorien und Tags ergänzt. Dieses befindet sich mittlerweile auch auf GitHub.

Voraussetzungen und Funktionsweise

Das Tool setzt voraus, dass sämtliche Taxonomien bereits, wie oben erläutert, übersetzt wurden. Zur Wiederholung: es ist wichtig ist, dass das folgende Namenschema befolgt wird:

1taxonomyName-languageCode

languageCode steht hier für einen zweistelligen Sprachcode nach ISO 639-1 (beispielsweise de, en,...).

Ich weise an dieser Stelle nochmals auf die Notwendigkeit eines funktionierenden Backups hin. Ich habe das Migrationswerkzeug nur mit meiner Installation (WordPress 4.9) getestet und kann nicht garantieren, dass es auch mit anderen Versionen funktioniert. 😉

Das Tool erledigt im Wesentlichen die folgenden Schritte:

  1. Es iteriert durch alle Artikel der angegebenen Quellsprache und erkennt verknüpfte Kategorien, Tags und Übersetzungen
  2. Darüber hinaus versucht es Übersetzungen von verknüpften Taxonomien zu finden - das setzt voraus, dass diese bereits übersetzt wurden und das oben erwähnte Format aufweisen
  3. Anschließend verknüpft es die erkannten Übersetzungen mit den übersetzten Taxonomien und erhöht Zähler

Installation und Start

Zur Installation genügt es, das Repository zu klonen und den wpml_assistant-Ordner auf den Webserver zu kopieren. Wird das darin enthaltene Skript über einen Web-Browser aufgerufen, muss ein Formular mit den obligatorischen Datenbank-Informationen und einigen Hinweisen zur verwendeten Sprache befüllt werden:

  • Hostname des Datenbank-Servers
  • Name der WordPress-Datenbank
  • Benutzername
  • Passwort
  • Quell-Sprache (ISO 639-1 Code, z. B. en oder de)
  • Ziel-Sprache (ISO 639-1 Code)
  • Simulation der Änderungen

wpml-migration-assistant

Der Fortschritt der Migration wird in Form einer Tabelle angezeigt. So kann eingesehen werden, welche Blog-Artikel (inklusive Kategorien und Tags) erkannt und ihren Übersetzungen zugeordnet wurden. Es empfiehlt sich, im ersten Schritt lediglich eine Simulation der Änderungen durchzuführen. So lassen sich grobe Fehler aufgrund falscher Sprachparameter vermeiden. Bei Installationen mit besonders vielen Artikeln ist es möglich, dass das Skript in einen Timeout läuft oder noch einmal ausgeführt werden muss.

Übersetzungen: