3. Basis-Implementierung

3.1. Mehrsprachige Eingabe

Im nächsten Schritt müssen wir dafür sorgen, dass unsere Redakteure den Content für jede Sprache einpflegen können. Wir beginnen zunächst mit der englischen Version, und erweitern unser Template um die folgenden Anweisungen:

<h1><input name="IMPERIA:title_en"
           value="title_en" /></h1>                        (1)

<p>
<textarea name="IMPERIA:teaser_en" cols="60" rows="5">     (1)
teaser_en
</textarea>
</p>

	  
1

Bei der Benennung der Meta-Variablen befolgen wir die Namenskonvention, dass wir Meta-Felder, die lediglich für eine Sprache Bedeutung haben, durch den angehängten 2-Buchstaben-Code kennzeichnen.

Den Part für die englische Sprachredaktion müssen wir nun für die drei weiteren Sprachen kopieren, wobei wir natürlich das Kürzel en durch die entsprechenden Kürzel fr, it und de sinngemäß ersetzen müssen.

3.1.1. Verallgemeinerung der Spracheingaben

Die Eingabemasken für die jeweiligen Spracheingaben per Cut & Paste zu duplizieren, ist natürlich keine optimale Lösung. Das Verfahren ist fehleranfällig, weil es bei der Anpassung der einzelnen Teile zu Vertippern kommen kann. Weiterhin entspricht das Kopieren nicht unserer Forderung nach leichter Erweiterbarkeit: Im Moment ist unser Template noch sehr übersichtlich. Sobald es aber von der Designabteilung mit HTML vollgestopft wurde, wird das Hinzufügen einer neuen Sprache doch zu einer ziemlichen Herausforderung.

Unser Ziel sollte es also sein, den Teil, der sich wiederholt, „auszuklammern“, und das Mittel der Wahl heißt Code-Includes.

3.1.2. Parametrisierte Code-Includes

Wir erzeugen also aus dem englischen Teil der Spracheingabe im Template templatemultilang.htms ein Code-Include multilang.htms, und fügen im eigentlichen Template stattdessen die entsprechende Include-Angabe ein.

<!--CODEINCLUDE:multilang.htms-->

Natürlich müssen wir unserem Code-Include noch in irgendeiner Form mitteilen, für welche Sprache es jeweils gerade eingesetzt wird. Am einfachsten lässt sich dies durch einen Parameter im Aufruf realisieren. Wir ändern also nochmals unser Template:

<!--CODEINCLUDE:multilang.htms:PARAMETERS=en-->
<!--CODEINCLUDE:multilang.htms:PARAMETERS=fr-->
<!--CODEINCLUDE:multilang.htms:PARAMETERS=it-->
<!--CODEINCLUDE:multilang.htms:PARAMETERS=de-->
	  

Da wir vier Sprachen gleichzeitig pflegen, müssen wir die Include-Datei auch viermal einbinden, jeweils für die entsprechende Sprache parametrisiert. Im Code-Include selber muss der Parameter wiederum abgefragt werden, was uns zur nächsten Version der Include-Dateien führt:

<h1><input name="IMPERIA:title_<!--CI_PARAM1-->"
           value="title_<!--CI_PARAM1-->" /></h1>

<p>
<textarea name="IMPERIA:teaser_<!--CI_PARAM1-->" cols="60" rows="5">
teaser_<!--CI_PARAM1-->
</textarea>
</p>

	  

Wir müssen also lediglich unser bisher hartkodiertes Sprachkürzel en durch den Parameter, mit dem das Code-Include aufgerufen wurde, ersetzen. Unsere heile Welt der Wiederverwendbarkeit wird lediglich etwas gestört, wenn wir innerhalb dieses Code-Includes wieder sprachabhängige Teile einführen. Wann sich hier eine rekursive - wieder parametrisierte - Einbindung lohnt, ist Ermessenssache, bzw. hängt von den Gegebenheiten ab:

<!--CODEINCLUDE:multilang_recursive.htms:PARAMETERS=<!--CI_PARAM1-->-->
	  

Alternativ kann natürlich auch eine Fallunterscheidung vorgenommen werden:

#IF ("<!--CI_PARAM1-->" EQ "it")
<h3>Non è mica difficile, nevvero?</h3>
#ELSIF ("<!--CI_PARAM1-->" EQ "fr")
<h3>Ce n'est pas difficile après tout, n'est-ce pas?</h3>
#ELSIF ("<!--CI_PARAM1-->" EQ "en")
<h3>It isn't hard to do, is it?</h3>
#ELSIF ("<!--CI_PARAM1-->" EQ "de")
<h3>Das ist doch gar nicht schwer, oder?</h3>
#ELSE
<h3>Parameter im Aufruf des Code-Includes fehlt!!!</h3>
#ENDIF
	  

Wir sind jetzt in der Lage, Inhalte in allen vier geforderten Sprachen einzupflegen. Das weitere Vorgehen fuer diesen einfachen Fall ist im Imperia-Programmierhandbuch beschrieben. Im nächsten Schritt, würden zunächst sprachspezifische Templates erstellt, die sich vom Haupttemplate eigentlich nur insoweit unterscheiden, als dass sie statt aller vier Code-Includes nur das Code-Include für die jeweilige Sprache einbinden. Auch an verschiedenen weiteren Stellen wären noch kleinere Anpassungen vonnöten, so würden wir als Dokumententitel natürlich den Titel für die jeweilige Sprache einfügen.

Weiterhin muss natürlich für die Erzeugung der Copy-Pages gesorgt werden. Das Meta-File wäre demnach entsprechend zu erweitern:

HIDDEN "no_publish:1"
HIDDEN "copy_en:<!--KK-directory-->/index.html.en:TEMPLATE=\
templatemultilang_en.htms>"
HIDDEN "copy_fr:<!--KK-directory-->/index.html.fr:TEMPLATE=\
templatemultilang_fr.htms>"
HIDDEN "copy_it:<!--KK-directory-->/index.html.it:TEMPLATE=\
templatemultilang_it.htms>"
HIDDEN "copy_de:<!--KK-directory-->/index.html.de:TEMPLATE=\
templatemultilang_de.htms>"

	  

Die Anweisungen müssen jeweils in einer Zeile stehen, also an den Backslashes jeweils zusammengesetzt werden. Die Backslashdarstellung ist lediglich für den Druck erforderlich.

Das Verfahren sollte eigentlich geläufig sein. Die Meta-Variable no_publish sorgt dafür, dass Imperia nicht versucht, eine Seite auf Basis des Master-Templates zu erstellen und zu publizieren, da dieses Template ja lediglich zur Eingabe des Contents verwendet wird.

Da es sich hierbei um konventionelle Imperia-Funktionalität handelt, werden wir hierauf auch nicht weiter eingehen, und uns stattdessen damit beschäftigen, wie wir unsere Struktur von vorneherein wesentlich flexibler auslegen können.