da die Frage immer wieder auftaucht und ich das Ganze bereits mehrmals gelöst habe (mit Bordmitteln) möchte ich hier nun meine (sicherlich nicht 100% perfekte, aber durchaus annehmbare) Lösung vorstellen.
Die Seite besitzt momentan nur 2 Sprachen, aber ist - zumindest technisch - nicht auf eine Maximalanzahl beschränkt.
Genutzt werden außer dem Menumanager keine weiteren Plugins, welche aber wenn gewünscht auch nicht schwierig einzusetzen sein sollten. Im Zweifallsfalle das Plugin immer in mehreren Ausführungen (für jede Sprache) duplizieren.
Nun aber zur eigentlichen Anleitung (aus dem Gedächtnis - ich habe die Lösung bereits vor etwa einem halben Jahr erstellt).
Kurz zur angewandten Technik:
Da ich ein zwei-stufiges Menüsystem (also oben im Header die Hauptkategorien und links die Unterpunkte zu den entsprechenden Seiten) bestand die Disziplin darin dies ebenfalls in diesem System abzubilden.
Ich habe mich dazu entschieden SectionHeaders für Sprachen zu missbrauchen und die entsprechende Lösung sind dann so aus (die Hierarchie):
(siehe angehängten Screenshot)
Die Section Headers leiten die einzelnen Sprachen ein (also de für deutsch, en für englisch). Der Vorteil dieser Lösung ist zudem, dass man bei pretty-urls dann auch die entsprechende Sprache in der URL hat (z.B. http://www.ritenetworking.de/de/dienstleistungen/ für die deutsche Seite Dienstleistungen).
Wichtig ist auch, dass der Seitenname (nicht Titel) natürlich bei jeder Seite anders sein muss, das kann man dann entweder über angehängte Länderkürzel lösen: start_de, start_en, etc., was aber ansichts der pretty url (oben angedeutet) dann wieder doof aussieht, da das Länderkürzel zwei mal in der URL wäre. Dementsprechend solltet Ihr glückliche Seitennamen wählen: start/home für die Startseite de/en oder z.B. dienstleistungen/services, usw.
Die Seiten selbst können natürlich auf beliebigen Templates basieren. Optimalerweise natürlich für jede Sprache ein separates Template, falls man hard-codierten Text im Template hat (z.B. ein Link zum Impressum, bzw. analog im Englischen zum Impress).
Ein deutsches Template sähe dann so aus:
Code: Select all
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/transitional.dtd">
<__html>
<head>
<title>{title} - {sitename}</title>
<meta http-equiv="content-language" content="de" />
{metadata}
{stylesheet}
</head>
</__body>
<div id="overall">
<div id="header">
<div id="top_menu">
{cms_module module='menumanager' template='TopMenu' start_level="2" number_of_levels="1"}
</div>
</div>
<div id="page" class="clearfix">
<div id="left_col">
<div id="logo_block">
<p><img src="img/logo.gif" width="140" height="108" alt="Logo" /></p>
</div>
<div id="language_block">
<p>
{cms_selflink page="startseite" image="img/lang_de.gif" text="Deutsch" imageonly=1}
{cms_selflink page="home" image="img/lang_en.gif" text="English" imageonly=1}
</p>
</div>
<div id="left_menu">
{cms_module module='menumanager' template='LeftMenu' start_level="3"}
</div>
</div>
<div id="content_col">
<div id="front_box">
{random_blob prefix='deTopBox'}
</div>
<div id="content">
<div class="content_block">
{content}
</div>
</div>
</div>
</div>
{html_blob name='deFooter'}
</div>
<__body>
</__html>
Der Language Block ist in diesem Fall ebenfalls simpel aufgebaut - er verweist eben auf die deutsche (startseite) oder eben auf die englische (home) Startseite. Bei einem Klick passiert genau der oben erwähnte Effekt.
Ein Hinweis: Ein Verhalten, dass er immer genau das anderssprachige Pendant zur gerade aktiven Seite aufruft (also bei einem Besuch von Dienstleistungen und anschließendem Klick der Aufruf der Seite Services) ist weder machbar noch wirklich sinnvoll, da es ja nie garantiert ist (und auch nur in den seltensten Fällen praktikabel) genau die gleichen Inhalte in _allen_ Sprachen zur Verfügung zu stellen.
Und zuletzt das linke Menü (LeftMenu) es verhält sich im Prinzip genau wie das TopMenu nur dass eben statt dem 2. Level alles unterhalb des dritten Levels angezeigt wird. Ebenfalls im gerade aktiven Sprachzweig.
Und nun abschließend noch die entsprechenden Menu-Manager-Templates. Dies sind im Prinzip die ganz normalen Templates nur abgespeckt um die Anzeige der Section Headers (sonst würden wir diese am Ende noch sehen...). Also in diesem Fall:
TopMenu:
Code: Select all
{if $count > 0}
<ul>
{foreach from=$nodelist item=node}
{if $node->depth > $node->prevdepth}
{repeat string="<ul>" times=$node->depth-$node->prevdepth}
{elseif $node->depth < $node->prevdepth}
{repeat string="</li></ul>" times=$node->prevdepth-$node->depth}
</li>
{elseif $node->index > 0}
</li>
{/if}
{if $node->current == true}
<li><a href="{$node->url}"><span>{$node->menutext}</span></a>
{elseif $node->type == 'sectionheader'}
<li><a href="{$node->url}"><span>{$node->menutext}</span></a>
{else}
<li><a href="{$node->url}"><span>{$node->menutext}</span></a>
{/if}
{/foreach}
{repeat string="</li></ul>" times=$node->depth-1}</li>
</ul>
{/if}
Code: Select all
{if $count > 0}
<ul>
{foreach from=$nodelist item=node}
{if $node->depth > $node->prevdepth}
{repeat string="<ul>" times=$node->depth-$node->prevdepth}
{elseif $node->depth < $node->prevdepth}
{repeat string="</li></ul>" times=$node->prevdepth-$node->depth}
</li>
{elseif $node->index > 0}
</li>
{/if}
{if $node->current == true}
<li><a href="{$node->url}"> {$node->menutext} </a>
{elseif $node->type == 'sectionheader'}
<li> {$node->menutext}
{else}
<li><a href="{$node->url}"> {$node->menutext} </a>
{/if}
{/foreach}
{repeat string="</li></ul>" times=$node->depth-1}</li>
</ul>
{/if}
So das war's vorerst - eventuell werde ich das Ganze noch erweitern um eine kleine Anleitung wieder man die Suche ebenfalls multilingual gestaltet - sofern ich mal Zeit finde.
Anmerkung: Das News-Modul funktioniert ebenfalls multilingual (indem ich die Kategorien dazu missbrauche) - das kommt ggf. auch noch nach!
Das entsprechende Endprodukt könnt Ihr unter http://www.ritenetworking.de bestaunen - dort ist jedoch die englische Sprache noch ausgeblendet aufgrund von Zeitmangels *gg* Aber Ihr könnt versichert sein, dass es funktioniert
UPDATE: multilinguale News über Kategorien
Wie gewünscht und ebenfalls relativ einfach umgesetzt:
Einfach für jede Sprache eine entsprechende Kategorie in den News erstellen und dann entsprechend auf den News-Seiten die Newsblöcke mit Filter auf die Kategorie anlegen:
Code: Select all
{cms_module module="news" number="10" category="German" makerssbutton="true"} Neuigkeiten
{cms_module module="news" number="10" category="German"}
Fragen werden hier gerne beantwortet!
Und jetzt geht's zum Raclette-Essen - bin eingeladen )
[gelöscht durch Administrator]