BLOG

Probleme bei Übersetzungen: Mehrsprachigkeit mit Drupal und dem Modul "Views"

Drupal ist ein System, das Übersetzungen der Inhalte auf unterschiedliche Weisen zulässt. Dafür gibt es Module und Submodule - so weit so schön. Mehrsprachigkeit bleibt dennoch ein komplexes Thema, da zunächst die projekt-individuellen Anforderungen an Übersetzungen (Stichwort: Behandlung von Begriffen bzw. Kategorien) erst einmal festgelegt werden müssen, bevor sich eine Roadmap zur Umsetzung formulieren lässt.

Wenn die Anforderungen klar sind, gelangt wohl jedes Projekt früher oder später an den Punkt, an dem bestimmte Views-Inhalte übersetzt werden müssen. Die Ausgabe der sprachsensitiven durch Views selektierten Inhalte stellt in unserem Fall kein Problem dar: im Views-Filter "Beitragsübersetzung: Sprache" haben wir "Aktuelle Sprache des Benutzers" und "Keine Sprache" aktiviert. So liefert Views alle sprachneutralen Inhalte sowie die Inhalte der Sprache, die der Nutzer gerade verwendet.

Problematisch sind die Übersetzung der Views-Titel und die Übersetzung von den Beschriftungen der Felder bzw. der hervorgehobenen Filter ("exposed filter"). Das ist anstrengend, da "Views" sich - vorsichtig ausgedrückt - "komisch" verhält und es zu überraschenden Effekten kommt. Böse Zungen haben auch schon empfohlen, Views wegzulassen, wenn Projekte mehrsprachig sein sollen.

Um hier etwas Licht in das Dunkel zu bringen, schreibe ich diesen Artikel.

Ausgangssituation

  • Der Kunde verwendet vier Sprachen.
  • Systemsprache ist englisch.
  • Default-Sprache ist deutsch.
  • Die Views wurden in deutsch konfiguriert.

Bestandsaufnahme der Probleme

Wir haben zunächst festgestellt, dass sich die Beschriftungsfelder über die Oberfläche nicht wie erwartet übersetzen lassen. Per Oberfläche ("/admin/build/translate") lassen sie sich zwar übersetzen, auf der Website tut sich aber erkennbar nichts. Offenbar interessiert sich Views nicht dafür, dass als Standardsprache "Deutsch" eingestellt ist.

Bei Drupal gibt es unterschiedliche Übersetzungsschichten: Es gibt die t()-Funktion sowie i18n_strings(), ehemals tt(). Beide funktionieren unterschiedlich - welche verwendet Views?
Reicht es aus, z.B. die Beschriftungsfelder z.B. der Exposed Filter in Englisch anzugeben, damit sie sich anschließend ins Deutsche übersetzen lassen?
Oder dürfen Views grundsätzlich nur in der Systemsprache bedient werden, damit keine Zeichenketten einer Nicht-Systemsprache fehlerhafterweise ins System gelangen und übersetzt werden können?

Augenscheinlich scheint die erste Methode - Views in der deutschsprachigen Oberfläche bearbeiten, dabei aber englische Inhalte verwenden - zu funktionieren.

Protokoll einer Versuchsreihe für den Views-Titel

Bearbeitung einer Views-Abfrage auf deutsch und Erfassung einer englischsprachigen Zeichenkette in den Views-Titel. Um eine Eindeutigkeit herzustellen, verwende ich als Titel "absoluteuniquestring".

Suche nach "absoluteuniquestring"

Eine anschließende Suche in der Oberflächenübersetzung nach "absoluteuniquestring" liefert überraschenderweise zwei Vorkommen, das heißt, die Zeichenkette durchläuft beide Übersetzungsschichten!

Erstes Vorkommen: i18n_string()-Funktion

Der erste Eintrag kommt aus der i18n_string()-Funktion. Der Quellbegriff "absoluteuniquestring" wird als deutsch identifiziert und kann in alle übrigen Sprachen übersetzt werden.

In unserem Fall ist dieses Verhalten unerwünscht: "absoluteuniquestring"soll als englisch verstanden werden und auf deutsch in "absoluteindeutigezeichenkette" übersetzt werden.

Erstes Vorkommen: t()-Funktion

Der zweite Eintrag kommt aus der t()-Funktion. Der Quellbegriff "absoluteuniquestring" wird als englisch identifiziert und kann z.B. auf deutsch in "absoluteindeutigezeichenkette" übersetzt werden:

Funktioniert, aber... - funktioniert das wirklich?

In der Praxis funktioniert die Versuchsreihe: Auf deutsch wird "absoluteindeutigezeichenkette" als Views-Titel ausgegeben, auf englisch "absoluteuniquestring".

Ist dies nun ein belastbare Vorgehensweise, die lediglich mit dem Schönheitsfehler behaftet ist, dass durch die i18n_string()-Funktion Datenmüll ins System gelangt, der glücklicherweise aber nirgends verwendet wird?

Bei einer nachträglichen Bearbeitung des View mit deutscher Oberfläche stellt Views im Titel die deutsche Übersetzung "absoluteindeutigezeichenkette" dar.
Hilfe! - Ich kann also

  1. keinen Unterschied feststellen, ob ich gerade einen Begriff in Systemsprache oder dessen deutsche Übersetzung bearbeite und
  2. nicht erkennen, ob der übersetzte deutsche Begriff beim Speichern als neuer Begriff in Systemsprache angelegt wird oder Views erkennt, dass der Begriff eine Übersetzung eines vorhandenen Begriffs in Systemsprache darstellt.

Ohne Kenntnis und Verständnis des Views-Quellcodes kann ich diese Frage nur per Try-and-Error beantworten.

Wenn Views NICHT erkennt, dass der Begriff eine Übersetzung eines vorhandenen Begriffs in Systemsprache darstellt, wird er den deutschen Begriff als neuen Begriff "absoluteindeutigezeichenkette" in Systemsprache anlegen. Demzufolge müsste dieser Begriff auch wieder durch die t()-Funktion laufen und eine weitere Datenmüll-Leiche hinterlassen.

Dies ist - zum Glück - jedoch nicht der Fall!

Es stellt sich aus meiner Sicht also so dar, dass es zwar diesen Schönheitsfehler gibt, die Übersetzung der Views damit aber funktioniert.

 

Liebe Drupal-Community,

seht Ihr das ebenso?
Für Antworten, Tipps und Ergänzungen wäre ich Euch sehr dankbar!

Kommentare

Mehrsprachigkeit von Menüs

Zum Thema Mehrsprachigkeit von Menüs wäre noch hinzu zu fügen, dass man bei dem oben beschriebenen Vorgehen - je Sprache ein eigenes Menü zu verwenden - nicht das I18n Submodul Menu translation benötigt, sondern lediglich Block translation.

Menüs werden vom System automatisch als Blöcke zur Verfügung gestellt und können als solche den Regionen zugewiesen werden.  Block translation stellt die Sprache der Seite als zusätzliches Sichtbarkeitskriterium für Blöcke zur Verfügung. Damit lässt sich bequem steuern, in welcher Sprache der Block

Meiner Erinnerung nach - diese ist aber ein gutes Jahr als -  war Menu translation derartig buggy, dass ich mich seinerzeit gegen einen Einsatz entschieden habe.

Funktioniert leider nicht...

Bei nochmaliger Durchsicht haben wir festgestellt, dass sich Views-Titel, Beschriftungstexte für normale Felder und Beschriftungstextefür hervorgehobene Filter vollkommen unterschiedlich verhalten:

  • Views-Titel lassen sich ordnungsgemäß übersetzen.
  • Beschriftungstexte für normale Felder lassen sich nicht übersetzen. Drupal verhaspelt sich bei den Sprachen.
  • Beschriftungstexte für hervorgehobene Felder lassen sich gar nicht übersetzen.
  • Ebensowenig lassen sich auch Inhalte von Auswahlklapplisten übersetzen: auch wenn die einzelnen Begriffe ("Terms") alle übersetzt sind, stellt Views immer nur die Begriffe in der Defaultsprache da.

Übersetzungen in Views bleibt leider ein anstrengendes Thema, solange niemand tief in die Materie einsteigt und sich die Mühe macht zu patchen...

Gibts Hoffnung bei Drupal 7.0?

Ja ja diese Übersetzungprobleme, ob bei Views oder bei den Menüs. Dies zieht sich wie ein roter Faden durch so viele Forenbeiträge. Gibt es Hoffnung bei Drupal 7.0, dass dieses Problem mal grundsätzlich angegangen wird?
Wir planen eine Website mit über 30 Sprachen und da wären diese Probleme wirklich ein KO-Kriterium.

Nein, da wird sich meines Wissens nicht viel ändern.

Hallo Peter,

meines Wissens wird sich daran auch in Drupal7 nicht viel ändern.

Fakt ist, dass sich alles lösen lässt. Notfalls mit Hilfe individueller Module, die sich Zeichenketten aus dem Template ziehen und übersetzbar machen. Ein KO-Kriterium ist es meines Erachtens nicht.

Aber, ob und wie man das seinen Kunden vermitteln kann, ist schon fraglich...

Hinsichtlich der Drupal Übersetzung bin ich mittlerweile davon überzeugt, dass sie von externen Entwicklern (Joomla / Typo3 / Wordpress) implementiert wurde um uns zu schaden ;-)

Da bleibt wirklich nur Hoffnung auf Drupal 8.

Es lohnt sich auch

Es lohnt sich auch langfristig http://drupal.org/node/35... zu verfolgen.

In openAtrium wird eine alte Version des patch eingesetzt, vlt. wuerde ich mir anschauen was dort gemacht wird, ich denke sie haben das selbe Problem.

danke für den Beitrag, er

danke für den Beitrag, er zeigt ein kleines Problem von vielen, wenn man mit Drupal und Mehrsprachigkeit arbeitet.
Was wir allerdings als noch größeres Problem sehen, ist das Übersetzen von Menüs. Man muss ja für jedes Menü eine eigene Version für jede Sprach führen, das ist wartungstechnisch natürlich die Hölle, sowohl für Entwickler (bei 5 Menüs und 4 Sprachen z.B.) als auch für den Kunden. Für Ihn wird es ja nahezu unmöglich neue Menüpunkte anzulegen ohne etwas kaputt zu machen.
Würde mich auch mal interessieren, wie andere dieses Problem sehen und lösen.

Viele Grüße aus Darmstadt und frohes Schaffen.
Manuel Pistner

Ja, Menüs...

Menüs richten wir in jeder Sprache separat ein. So verhalten sie sich neutral und funktionieren gut. Das hat allerdings zur Folge, dass jeder Link in jeder Sprache einzeln eingerichtet werden muss und die Menü-Funktion von Panels oder Views nicht verwenden kann.

Allgemein empfehlen wir Menüs sparsam einzurichten. Wenn der Content gut kategorisiert und dadurch schnell zugreifbar ist, lässt sich auf eine tiefere Menü-Verästelungen verzichten. Dann sind die separaten Menüs aus unserer Sicht praktikabel.

Grüße,
Ralf

Eins vorweg, habt ihr euch

Eins vorweg, habt ihr euch schon Internationalization Views angeschaut? Das hat mich vor einiger Zeit bzgl. Tabellenüberschriften gerettet.

Eine Sache, die ich nicht ganz verstehe, ihr schreibt:

Systemsprache ist englisch.
Default-Sprache ist deutsch.

Inwieweit unterscheidet ihr das?

Meiner Erfahrung nach sollte man administrativ immer mit englisch arbeiten und weitere Sprachen dann davon ableiten. Problematisch ist es, wenn man Mehrsprachigkeit (und Default Sprache) "mittendrin" umstellt, weil die Inhalte unterschiedliche Zustände von Sprachen und sprachneutral haben.

Nun helfen euch meine schlauen Sprüche nicht so sehr. Ich sehe eine mögliche Bruchstelle in dem obigen Zitat. Vielleicht leitet Views auch eine "Magie" von der Sprache des Users ab, der den View bearbeitet (so wie es bei Nodes ist).

Auch wenn jetzt nichts verwertbares dabei war - seid versichert, dass ich moralisch bei euch bin.

@rokr :-)

 

Mehrsprachige Views

Ich experimentiere gerade damit, pro Sprache ein Display zu haben. Die Displays unterscheiden sich technisch nur in einem sprachabhängigen Selektionsparameter. Das zwingt mich zwar dazu, ein paar andere Dinge ebenfalls pro Sprache zu machen. Dafür hab ich dann aber keinen Streß mit Überschriften und kann die einfach in der Display-Definition mitgeben.

Bisher hab ich keinen Ärger damit. Ist aber so noch nicht produktiv und ich bin mitten drin.

Schöne Grüße,
Gerd

Kommentar hinzufügen

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.
Mit dem Absenden dieses Formulars, akzeptieren Sie die Datenschutzrichtlinie von Mollom.