Da es bis heute keine gute Lösung gibt, wie man Zoo-Elemente einfach in die gewünschte Sprache übersetzen kann, habe ich eine einfache Lösung gefunden. Die Komponente Zoo hat eine komplexere Datenbankstruktur, weswegen es schwer ist, mit JoomFish alles korrekt zu übersetzen. Es gibt keine brauchbaren Content Elemente, die man in JoomFish verwenden könnte.

Ich bin auf die einfache Idee gekommen, die gewählte Sprache auszulesen und je nach gewählter Sprache eine bestimmte Ausgabe zu tätigen. Das ist im Grunde nicht nur in der Komponente Zoo möglich, sondern überall sonst auch in Joomla! (Templates, Module, Plugins). Das Tutorial geht auf Zoo ein, weil ich die Mehrsprachigkeit hier auf der Projektseite gebraucht habe.

Die gewählte Sprache kann man in Joomla! mit folgendem Befehl auslesen:

// Globales Sprachobjekt referenzieren
$lang = JFactory::getLanguage();  

// Das gibt den vollen Namen aus 
echo $lang->getName(); // Beispiel: Deutsch (DE-CH-AT)  

// Das gibt die Kurzform (Tag) aus 
echo $lang->getTag(); // Beispiel: de-DE

Wie man sieht, muss man PHP Code ausführen. Das ist ohne eine passende Erweiterung nicht möglich. Schreibt man den Code einfach so in die Eingabefelder, wird er aus Sicherheitsgründen gefiltert. Um PHP Code auszuführen, habe ich mich für die bekannte Erweiterung Sourcerer von NoNumber! (Link unten) entschieden. Mit Sourcerer kann man PHP-, HTML-, JavaScript- und CSS-Code in den Inhalt laden und ausführen lassen. Der große Vorteil von Sourcerer ist, dass das Plugin nicht auf den Inhaltsbereich beschränkt ist, sondern auch in Modulen, Komponenten, META Tags usw. funktioniert. Genau diese Funktionalität benötigen wir, um die Zoo-Elemente zu übersetzen.

Der Aufruf von Sourcerer funktionert mit { source }CODE{ /source } (ohne Leerzeichen - im folgenden Code-Bespielen werde ich den Code immer mit Leerzeichen hinschreiben, diese kommen im richtigen Einsatz natürlich weg!)

So sieht ein Aufruf aus, mit dem man abfragt, ob die deutsche Sprache gewählt wurde. Ich beschränke mich auf 2 Bedingungen, da ich nur 2 Sprachen auf der Projektseite benötige. Man kann die if-Bedingung entsprechend erweitern, wenn man 3 oder mehr Sprachen anbietet. Wir benutzen die Kurzform, was die Abfrage verkürzt und einfacher macht.

$lang = JFactory::getLanguage();
if ($lang->getTag() == "de-DE")
{
    echo "Deutsch aktiviert!";
}
else
{
    echo "Deutsch nicht aktiviert!";
}

Hier sieht man, dass wir zuerst auf das globale Sprachobjekt referenzieren und dann einfach mittels der Methode getTag() in der if-Anweisung abfragen, ob de-DE (also deutsch) aktiv ist. Wenn nicht, dann wird der else-Zweig ausgeführt.

Dieses kann man in allen Zoo-Elementen nutzen, um diese zu übersetzen. Lediglich beim Titel funktioniert es nicht, da der Titel gesondert gefiltert wird und dabei die korrekte Sourcerer Syntax verloren geht.

Auf dieser Seite habe ich zum Beispiel unten in den Meta-Angaben folgendes in den Elementen eingegeben (hier steht der komplette Code in einer Zeile, weil es sich nicht um Textareas, sondern um Textzeilen handelt):

// Übersetzung für den Autor
{ source }getTag() == "de-DE") { echo 'Geschrieben von'; } else { echo 'Written by'; } ?>{ /source }

// Übersetzung für die Veröffentlichungskategorie
{ source }getTag() == "de-DE") { echo 'Veröffentlicht in'; } else { echo 'Posted in'; } ?>{ /source }

Um den Effekt zu sehen, einfach oben auf die englische Flagge klicken. Dann werden die Meta-Angaben entsprechend übersetzt.

Fazit

Es ist sehr einfach, Texte zu übersetzen, obwohl JoomFish nicht greift oder schwer einzubinden ist. Das beschriebene Vorgehen ist nicht abhängig von einer Komponente, es klappt überall in Joomla!. So kann man schnell Passagen übersetzen, auf die man sonst keinen Zugriff hat. Wie bereits erwähnt, klappt es leider nicht beim Titel.

Viel Erfolg!