GSB 7.0 Standardlösung

Technische Umsetzung

Prinzipiell gibt es zwei Möglichkeiten zur Auswertung der Sprache. Diese werden im Folgenden diskutiert.

Paralleler mehrsprachiger Web-Auftritt

Die aktuell gültige Sprache wird zu Beginn der main.jsp als URL-Prefix (virtueller Folder) in das Base-Href Tag eingetragen. Da alle Links innerhalb der Seite relativ sind, gelten sie damit für alle folgenden Aufrufe. Wenn die Sprache vom Anwender über den entsprechenden Link umgeschaltet wird, wird an die URL der String "__lang=" mit dem gewünschten Länderkürzel angehängt. Der Apache wandelt diesen String dann wieder in den URL-Prefix um und überschreibt damit den ursprünglichen Wert.

In allen Links wird die deutsche Sprachvariante relativ zur Basis "http://domain/lang_xx/" angefordert. Damit hier keine Probleme entstehen können, wurde die CoreMedia-Klasse ResourceUriFormat überschrieben. Die neue Klasse BundOnlineResourceUriFormat konvertiert transparent das Prefix-Format in das Parameter-Format und umgekehrt. In der main.jsp wird mit Hilfe der Klasse PathUtil anhand des URL-Parameters "lang" festgestellt, welche Version des Contents gemeint ist. Dazu werden durch die Methode Document.getLatestIncomingLinks() alle Dokumente gesucht, die auf das aktuelle (deutsche) Dokument verweisen. Diese werden daraufhin untersucht, ob sie vom gleichen Typ wie das Hauptdokument sind, sie das richtige Sprachattribut language haben, und ob das Attribut mainLanguageEnt auf die aktuelle deutsche Version verweist. Wenn ein solches Dokument gefunden wird, wird dieses eingebunden. Ansonsten wird das (deutsche) Originaldokument includiert.

Ordnerstruktur für mehrsprachigen Content bei symmetrisch aufgebauten Sites:

Zu einem inhaltstragenden Dokument gehören mehrere Teile:

  • 1 Dokument vom Typ "LanguageEnt" (Hauptsprache)
  • n Dokumente vom Typ "LanguageEnt" (Sprachausprägungen)
  • Dokument vom Typ "MetaEnt"

Von einer kompletten Trennung der einzelnen Sprachausprägungen auf Hauptordner-Ebene wurde abgesehen, da eine Synchronisation der zugehörigen Teile bei dieser Verteilung sehr komplex, fehleranfällig und kaum wartbar ist. Daher wurde das Konzept umgesetzt, alle Teile eines Dokuments in einen eigenen Ordner zu hinterlegen.

Beispiel:

<prefix>/<dokument-typ>/<dokument-titel>/<dokument-titel>_de

<prefix>/<dokument-typ>/<dokument-titel>/<dokument-titel>_en

<prefix>/<dokument-typ>/<dokument-titel>/<dokument-titel>_fr

<prefix>/<dokument-typ>/<dokument-titel>/.<dokument-titel>

Die Datei .<dokument-titel> ist dabei das Dokument der Meta-Daten, die für den Redakteur in der Ordnerstruktur nicht ersichtlich sein soll. Daher werden im Editor alle Dokumente, deren Name mit einem Punkt beginnen, ausgeblendet.

Der Redakteur darf bei der Verlinkung unterschiedlicher Dokumente nur auf die Hauptsprache referenzieren. Dies wird durch entsprechende Validatoren gewährleistet.

Unabhängiger mehrsprachiger Web-Auftritt

In dieser Variante wird nicht zwischen Hauptsprache und Nebensprachen unterschieden. Alle Links verweisen direkt auf Dokumente in der aktuellen Sprache. URL-Parameter oder Sprach-Prefixe werden hier nicht verwendet. Das Attribut "lang" wird nur verwendet, um bei der Anzeige der Sprachlinks festzustellen, welche Sprache gerade aktuell ist. Die Property mainLanguageEnt hat keine Funktion.

Fremdsprachige Dokumente liegen immer in einem vordefinierten Folder z.B. mit dem Namen des Sprachkürzels (en).

Die Sprachumschaltung erfolgt im Navigations-Bereich über einen Link auf das für die aktuelle Seite gültige Einsprung-Dokument (NavTarget) der gewünschten Sprache. Dieses Dokument wird mit Hilfe des ConfigReaders ermittelt über die sprachabhängige ConfigLinklist "_config/LangTarget_xx" (z.B. LangTarget_en). Durch die rekursive Funktionsweise des ConfigReaders kann so für jeden Folder ein eigenes Basis-Dokument definiert werden. Sollte die Deklaration für einen Folder fehlen, wird automatisch die Definition für den Parent-Folder verwendet. Wenn überhaupt keine Deklaration gefunden wird, wird die Basis-Url der Site verwendet.