Step by step: Mehrsprachige WordPress-Multisite

Ich verweise für die Installation des Multisite Language Switcher immer gern auf den Artikel Create A Network im Codex, aber vielleicht tue ich mir nicht wirklich einen Gefallen mit dieser Vorgehensweise. Der Text dort ist vollgespickt mit technischen Details, die allesamt natürlich wichtig und interessant sind, nur verliert sich der normale Anwender möglicherweise schnell in der Masse der Informationen.

Eine WordPress Multisite läßt sich lokal nicht bzw. nur sehr umständlich installieren.

Bei einigen Fehlern, die sich in meinen Tests ergaben, konnte ich nicht auch vollständig ausschließen, dass sie eventuell genau durch dieses Manko hervorgerufen wurden, was leider die Installation einer Testumgebung auf einem meiner Webserver für mich unumgänglich machte. „Step by step: Mehrsprachige WordPress-Multisite“ weiterlesen

Zweisprachig gleich zweigleisig?

Ich hatte eigentlich nicht vor, einen flachen Witz aus der Hüfte zu zaubern, aber ich sage lieber gleich mit an, dass es sich hier nicht um irgendwelche zweideutigen Aussagen handelt. Der Auslöser für diesen Post ist, dass ich in wenigen Tagen auf 5 Jahre Leben und Arbeiten in Italien zurückblicken kann. Inzwischen fühle ich mich auch sehr viel sicherer, was meine sprachlichen Fähigkeiten anbelangt. Vermutlich, weil sich mein Umfeld immer öfter auch anerkennend dahingehend äußert. Das führte schließlich dazu, dass ich den italienischen Bereich dieser Website, den ich bis vor wenigen Wochen eher stiefmütterlich behandelt hatte, noch einmal genauer betrachtet und überarbeitet habe. Außerdem habe ich damit begonnen, einige aktuellere Artikel ins Italienische zu übersetzen und diese dann auch zu posten.

Der Vorgang hört sich vielleicht ganz simpel an, aber es ist nicht so einfach. Wenn man kein Muttersprachler ist, kann man in den übersetzten Texten – auch wenn das Sprachniveau schon etwas höher ist – ganz ungewollt ziemlich grossen Quatsch von sich geben, wenn es niemanden gibt, der den Text noch einmal liest und gegebenenfalls korrigiert. In diesem speziellen Fall muss meine Frau regelmäßig „daran glauben“, (vor allem) weil sie als Lehrerin und Übersetzerin arbeitet. Allerdings haben es Muttersprachler auch nicht sehr viel leichter, wenn es sich um Texte aus einem Bereich handelt, der nicht zu ihrem Spezialgebiet gehört.

Eine ganz andere Front ist die Mehrsprachigkeit der Website. Wer hier schon länger liest weiß, dass ich das Plugin WPML dafür einsetze. Trotz einiger Problem habe ich mich noch nicht von dieser Lösung getrennt, auch wenn es seit der Einführung von WordPress 3 die Multisite-Variante gibt, die – mit einem Plugin, das die Beziehung zwischen den Übersetzungen herstellt – eine Lösung sein könnte. Aber hier werde ich wohl auch in der nächsten Zeit die Füße stillhalten, weil ich noch keine Ahnung habe, ob ich mir damit nicht noch mehr Probleme einhandle, wenn ich beispielsweise an die Problematik „WordPress und Speicherhunger“ denke.

Unabhängig von der Lösung, für die man sich letzten Endes entscheidend, ist das Endergebnis aber prinzipiell immer gleich: Man betreibt eigentlich einen Blog bzw. eine Website pro Sprache. Artikelliste, Archive, Suchergebnisse, Feeds usw. sind fein säuberlich von einander getrennt. Das macht auch Sinn. Wer den deutschen Feed abonniert, ist vermutlich nur mäßig oder gar nicht an den italienischen Contents interessiert und umgekehrt. Andererseits ergibt sich dadurch ein ganz anderes Problem. Wie kann ich genug Aufmerksamkeit für die beide Versionen in ihrer jeweiligen Blogosphäre erhalten.

Inzwischen ist wohl klar, dass der Erfolg eines Blogs auch stark von der eigenen Präsenz und der Vernetzung in den Social Networks abhängt. Persönlich nutze ich vorrangig Friendfeed, Twitter und Facebook. Neben direkten Tweets bzw. Statusmeldungen, die ich als sehr wichtig ansehe, lasse ich meine RSS-Feeds von Friendfeed an Twitter weiterleiten oder mittels Application an meine Pinnwand oder auf eine Fanpage bei Facebook schreiben. Genau hier beginnt das Problem und mein Zweifel: Ich sehe die genannten Social-Network-Accounts eher auf die Person als auf ein Projekt bezogen an, was dazu führt, dass sich meine mehrsprachigen Contents dort wieder mischen.

Wie handhabt ihr das? Oder wie würdet ihr das lösen? Lohnt sich der Mehraufwand mit mehreren Accounts bei den Social Networks? Oder ist das letztlich OK so bzw. völlig egal?

WordPress mehrsprachig mit WPML und Hindernissen

WordPress ist schon lange eine ernstzunehmende CMS-Alternative. Einige meiner Kunden müssen nicht mehr großartig überzeugt werden, wenn Sie den Wunsch an mich herantragen, ihre steinzeitliche CMS-Lösung gegen etwas moderneres einzutauschen, und ich ihnen dann WordPress vorschlage.

Zu lange schon konnten sie nur neidisch zuschauen, wie die Benutzer der beliebten Blog-Software einfach frei verfügbare Plugins herunterladen, aktivieren und ihre Website so oftmals mit komplexen Funktionalitäten anreichern, deren Nutzung in den meisten Fällen wiederum kinderleicht ist.

Neben so elementaren Dingen wie der XML-Sitemap, dem Backup der DB oder den von Hause aus verfügbaren RSS-Feeds, gibt es unzählige Erweiterungen für jeden nur vorstellbaren Zweck. Viele Kunden benötigen zudem eine Lösung für mehrsprachige Websites. Auch dafür gibt es inzwischen einige einsetzbare Möglichkeiten.

Bisher wollte ich mich für meine eigenen Projekte noch etwas in Geduld üben. Jedes dieser Plugins führt eine Website, die sich einmal darauf eingelassen hat, in eine Abhängigkeit, aus der es nur schwer ein Zurück gibt. Die Aussicht auf WordPress 3.0, das die für diesen Zweck möglicherweise interessanten MU-Funktionalitäten in sich aufnehmen soll, kam noch dazu.

Nun bin ich ja für alles mögliche bekannt. Allerdings wird mich vermutlich niemand, der mich kennt, für mein Geduld rühmen. Ich sollte hier auf dem italienischen Markt nun endlich mal damit anfangen, in der allgemeinen Landessprache zu punkten. Und meine Frau, die als freiberufliche Übersetzerin arbeitet, hatte sowieso dringenden Bedarf.

Nachdem ich mir so einige Möglichkeiten angesehen habe, WordPress mehrsprachig zu machen, ist mein Wahl dann schließlich auf WPML gefallen. Es ist keineswegs so, dass ich beim Abwägen der Vorteile und Nachteile, dieses Plugin als eindeutigen Sieger gesehen habe. Der ganzheitliche Ansatz hat mich jedoch interessiert.

Im Idealfall sollte auch jemand, der keinerlei Erfahrung mit Programmiersprachen hat, mit WPML klarkommen. Man aktiviert das Plugin, nimmt dann einige Einstellungen vor und freut sich über eine mehrsprachige Website. Das es den Idealfall in der freien Wildbahn nicht gibt, ist der Haken an der Sache; in meinem Fall glücklicherweise ein lösbares Problem.

Einer der Haken besteht darin, dass es schlichtweg nicht vorgesehen ist, dass man eine zweisprachige Blogroll (oder eben die Linksammlung in der Sidebar) hat. Ich kann mir nicht vorstellen, dass die deutschsprachigen Websites sehr interessant für ausländische Leser sind.  Hier ist es gut zu wissen, dass nach der Aktivierung von WPML die Konstante ICL_LANGUAGE_CODE zur Verfügung steht.

wp_list_bookmarks ("title_li=&categorize=0&category_name=" . ICL_LANGUAGE_CODE);

Den obigen Code habe ich in die sidebar.php gesetzt, nachdem ich meine beiden Linkkategorien in de und it umbenannt hatte. Ein weiteres Problem besteht darin, dass WPML unter Umständen den Inhalt von selbst erstellten Text-Widgets nicht erkennt und man deshalb auch keine Übersetzung machen kann. Hier hilft möglicherweise mein Ansatz, einfach eine weitere dynamische Sidebar zu definieren.

<!DOCTYPE html>
<html lang=en>
  <meta charset=utf-8>
  <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
  <title>Error 404 (Not Found)!!1</title>
  <style>
    *{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}
 </style>
  <a href=//www.google.com/><span id=logo aria-label=Google></span></a>
  <p><b>404.</b> <ins>That’s an error.</ins>
  <p>The requested URL <code>/svn/trunk/examples/functions.sidebar.php</code> was not found on this server.  <ins>That’s all we know.</ins>

Obiger Code gehört in die functions.php (vermutlich müssen die HTML-Tags entsprechend angepasst werden). Der nächste Block muss dann in die sidebar.php

<!DOCTYPE html>
<html lang=en>
  <meta charset=utf-8>
  <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
  <title>Error 404 (Not Found)!!1</title>
  <style>
    *{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}
 </style>
  <a href=//www.google.com/><span id=logo aria-label=Google></span></a>
  <p><b>404.</b> <ins>That’s an error.</ins>
  <p>The requested URL <code>/svn/trunk/examples/sidebar.php</code> was not found on this server.  <ins>That’s all we know.</ins>

Weitere Probleme tauchen auf, wenn man den RSS-Feed über Feedburner ausliefert. Das Plugin Feedburner Feedsmith, dass den lokalen Feed zu Feedburner umleitet, wird von nun an nutzlos, weil von nun an mindestens so viele RSS-Feeds wie Sprachen zu Verfügung stehen. Hier hilft möglicherweise nur ein direkter Verweis auf den eigenen Feedburner-URL in der header.php.

Fazit: Noch gehört viel guter Wille dazu, wenn man seine WordPress-Installation mehrsprachig haben will. Nach einiger Arbeit wird man jedoch – dank WPML – von einer gut durchdachten und stabilen Lösung unterstützt.