comm-press: Your Drupal agency in Hamburg, Germany: Consulting, training, programming, service, webdesign and hosting

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

von Ralf Hendel
am

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!