{"id":2625,"date":"2011-02-07T00:00:41","date_gmt":"2011-02-06T22:00:41","guid":{"rendered":"http:\/\/www.frische-zitronen.de\/?p=2625"},"modified":"2018-02-24T12:30:23","modified_gmt":"2018-02-24T10:30:23","slug":"mehrspachige-webseiten-mit-contao","status":"publish","type":"post","link":"https:\/\/www.jukemedia.de\/blog\/2011\/02\/mehrspachige-webseiten-mit-contao\/","title":{"rendered":"Mehrsprachige Webseiten mit Contao"},"content":{"rendered":"<p><strong>Contao ist multidomainf\u00e4hig. Das kann man sich zunutze machen, wenn mehrsprachige Webseiten erstellt werden sollen. Dazu wird in der Seitenstruktur pro Sprache ein eigener Seitenbaum erzeugt. In den Einstellungen kann pro Seitenbaum eine eigene Domain eingerichtet werden. So ist es z.B. m\u00f6glich mit nur einer (1) Installation eine Webseite in Deutsch und gleichzeitig eine ins Englisch \u00fcbersetzte Seite unter zu ver\u00f6ffentlichen.<br \/>\n<\/strong><\/p>\n<p><a href=\"http:\/\/www.jukemedia.de\/blog\/wp-content\/uploads\/2011\/01\/contao-mehrsprachige-webseiten.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft wp-image-2628 \" title=\"contao-mehrsprachige-webseiten\" src=\"http:\/\/www.jukemedia.de\/blog\/wp-content\/uploads\/2011\/01\/contao-mehrsprachige-webseiten.png\" alt=\"Bild mit den Landesflaggen anderer L\u00e4nder um die Mehrsprachigekt zu symbolisieren inkl. Schw\u00e4bisch\" width=\"817\" height=\"628\" \/><\/a><\/p>\n<p>Das Einrichten einer mehrsprachigen Webseite mit Contao stellt h\u00f6here Anspr\u00fcche an den Webdesigner. Die \u00dcbersetzung einer Seite bezieht sich n\u00e4mlich meist nicht nur nur auf die geschriebenen Textinhalte. Neben diesen und der Navigation gibt es noch weitere Module, in denen deutsche S\u00e4tze vorhanden sind. Auch diese m\u00fcssen \u00fcbersetzt werden.<\/p>\n<p>Es kann im Backend un\u00fcbersichtlich werden, wenn die in Deutsch angelegten Layouts f\u00fcr die jeweilig andere Sprache geklont werden. In den Layouts befinden sich Module mit Standard-Anweisungen, die in die jeweilie Sprache \u00fcbersetzt werden m\u00fcssen.<\/p>\n<p>Hat man z.B. eine 4-sprachige Webseite in Deutsch mit 5-6 Seitenvorlagen angelegt, ergeben sich 4 x 6 = 24 Seitenlayouts. Werden sp\u00e4ter Module an eine andere Stelle verschoben, so summiert sich der Arbeitsaufwand gleich 4-fach, weil diese \u00c4nderung synchron auch f\u00fcr die Webseiten der anderen Sprachen wiederholt werden m\u00fcssen.<\/p>\n<p>Sinnvoller ist es darum, wenn man umgekehrt denkt. Nicht &#8222;<strong>welches Seitenlayout bindet welche Module ein&#8220;<\/strong> sondern &#8222;<strong>welches Modul soll auf welcher Seite erscheinen<\/strong>&#8222;.<br \/>\nUm Seitenlayouts und Module einzusparen, hier ein paar Vorschl\u00e4ge, mit denen sich die sp\u00e4tere inhaltliche Pflege weniger zeitaufw\u00e4ndig gestalten l\u00e4sst.<\/p>\n<h3>Keine doppelten Navigationsmodule mit der Erweiterung &#8222;changelanguage&#8220;<\/h3>\n<p>Als wichtigste Erweiterung, m\u00f6chte ich die von Andreas Schempp entwickelte, Erweiterung &#8222;changelanguage&#8220; vorstellen.<br \/>\n<a title=\"Die Contao Erweiterung changelanguage\" href=\"http:\/\/www.contao.org\/erweiterungsliste\/view\/changelanguage.10000009.de.htmlhttp:\/\/\">Die Contao Erweiterung changelanguage anschauen und downloaden<\/a><\/p>\n<p>Einmal installiert, legt man die Hauptdomain (z.B. im Seitenbaum den deutschen Startpunkt einer Webseite) fest und bestimmt, dass diese in Deutsch verfasste Seite die Fallbackseite ist. Das hei\u00dft: Wenn z.B. ein Browser mit der L\u00e4nderkennung &#8222;Italien&#8220; oder vereinfacht ausgedr\u00fcckt: wenn ein Italiener meine Seiten betritt und eine italienische Version nicht vorhanden ist, dann wird die deutsche Seite angezeigt.<br \/>\nWenn ich hingegen eine zweisprachige Webseite mit einem deutschen und einem englischen Seitenbaum habe, dann wird die englische Seite angezeigt, wenn in der englischen Seitenstruktur in den Seiteneinstellungen bei &#8222;Sprache&#8220; das L\u00e4nderk\u00fcrzel &#8222;en&#8220; eingetragen wurde.<\/p>\n<p>Das Sch\u00f6ne an dieser Erweiterung ist, dass zur Sprache der Hauptdomain (z.B. Deutsch) auf jeder Seite anklickbare Flaggen oder Links erscheinen f\u00fcr die weiteren verf\u00fcgbaren Sprachen (z.B. Englisch, Franz\u00f6sisch, Russisch) erscheinen und die Seite quasi &#8222;simultan&#8220; \u00fcbersetzt wird.<\/p>\n<p>Um die Erstellung eines andersprachigen Navigationsmen\u00fcs muss man sich nicht k\u00fcmmern. Es m\u00fcssen f\u00fcr die jeweils anderen Sprachen keine zus\u00e4tzlichen Module in den anderen Sprachen angelegt werden. Im Seitenbaum der anderen Sprache erscheint nach Installation von changelanguage oben rechts ein neues Auswahlmen\u00fc mit der \u00dcberschrift &#8222;Fallback-Seite&#8220;. Befindet man sich beispielsweise im englischen Seitenbaum auf einer Seite namens &#8222;About us&#8220; w\u00fcrde man als Fallbacksseite im deutschen Seitenbaum dieser Seite die Seite &#8222;\u00dcber uns&#8220; zuordnen.<\/p>\n<p>Und, was ich zun\u00e4chst auch \u00fcbersehen hatte: es ist an alles gedacht, denn es kann ja durchaus vorkommen, dass man einem englischen Publikum etwas anderes sagen m\u00f6chte als einem deutschen und im englischen Seitenbaum mehr Seiten angelegt hat. In diesem Fall w\u00fcrde es keine Fallbackseite geben. In Quelltext geschaut erkennt man, dass dann der Link eine Klasse &#8222;nofallback&#8220; hat. Via CSS und display: none, kann man dann erreichen, dass auf Seiten, zu denen es keine Fallbackseite gibt die Flagge f\u00fcr die \u00dcbersetzung nicht erscheint.<\/p>\n<p><strong>Was jedoch noch offen ist, ist der umgekehrte Fall<\/strong>: in der Hauptsprache ist eine Seite vorhanden, die im es anderssprachigen Seitenbaum nicht gibt. Hier w\u00e4re es vielleicht eine Anregung die Erweiterung mit der M\u00f6glichkeit der Einrichtung einer Weiterleitungsseite auszustatten auf der man dann z.B. eintragen k\u00f6nnte: &#8222;this site is not available in english&#8220; \u2026 oder so.<\/p>\n<h3>Module und damit Layouts einsparen mit Insert-Tags<\/h3>\n<p>Die kleinen und fast unscheinbare Codeschnippsel der Inserttags sollte man nicht untersch\u00e4tzen, denn sie haben es in sich. Mit Ihnen kann man allerlei anstellen, wer sie noch nicht kennen sollte, dem sei ein Blick in folgende Liste empfohlen: <a title=\"Liste der Contao Insert Tags\" href=\"http:\/\/docs.contao.org\/books\/manual\/3.4\/de\/04-inhalte-verwalten\/inserttags.html\">Liste der Contao Inserttags<\/a><\/p>\n<p>Und was kann man jetzt davon in mehrsprachigen Webseiten einsetzen?<br \/>\n<strong>Ein Fallbeispiel<\/strong>: Im deutschen Seitenbaum wurde ein Modul vom Typ &#8222;Eigener Code&#8220; erstellt und darin folgende Zeilen eingetragen:<\/p>\n<blockquote><p>&#8222;Bei Fragen und Problemen besuchen Sie doch einfach mal die freundliche Contao-Community. <a title=\"Link zur Contao-Community\" href=\"http:\/\/community.contao.org\/de\/\">Contao Hilfe-Forum <\/a><\/p><\/blockquote>\n<p>F\u00fcr die englische Ausgabe der Seite soll der Text wie folgt lauten:<\/p>\n<blockquote><p>&#8222;If you have any questions, don&#8217;t hesitate to visit the friendly <a href=\"http:\/\/community.contao.org\/en\/\">Contao-community<\/a>.<\/p><\/blockquote>\n<p>Nun k\u00f6nnte man eine L\u00f6sung sozusagen &#8222;zu Fu\u00df&#8220; konstruieren, ein geklontes Layout anlegen und statt des deutschsprachigen Moduls an entsprechender Stelle das englischsprachige einsetzen.<br \/>\nEleganter geht es aber mit dem Inserttag &#8222;<strong>iflng<\/strong>&#8222;. Angenommen das deutschsprachige Modul h\u00e4tte die ID 10 und das englischsprachige Modul die ID12, legt man einfach ein weiteres Modul vom Typ &#8222;eigener Code&#8220; an und f\u00fcgt folgende Zeilen ein<br \/>\n<!-- indexer::stop --><br \/>\n<code>{{iflng::de}} {{insert_module::10}} {{iflng}} {{iflng::en}} {{insert_module::12}} {{iflng}}<\/code><br \/>\n<!-- indexer::continue --><\/p>\n<p>Man kann das Ganze nat\u00fcrlich auch noch schlanker realisieren indem man nur ein Modul (Typ: Eigener Code) anlegt und Folgendes eintr\u00e4gt.<br \/>\n<!-- indexer::stop --><br \/>\n<code>{iflng::de}}Bei Fragen und Problemen besuchen Sie Contao-Community.\u00a0  <a href=\"http:\/\/community.contao.org\/de\/\">contao-community.de <\/a>{{iflng}}<br \/>\n{{iflng::en}}If you have any questions, don't hesitate to visit the friendly Contao-community. <a href=\"http:\/\/community.contao.org\/en\/\">contao-community.org<\/a>{{iflng}}<\/code><br \/>\n<!-- indexer::continue --><\/p>\n<h3>Layouts sparen mit der Contentbox<\/h3>\n<p>Eine Webseite lebt nicht nur vom Design allein und auch nicht nur von der Technik. Um einen Besucher f\u00fcr sich zu gewinnen ist es &#8211; wie im richtigen Leben oft auch &#8211; eine Frage wie man Menschen anspricht, wie hei\u00dft es doch so sch\u00f6n: der Ton macht die Musik. Sehr beliebt sind daher die auf vielen Webseiten zu sehenden bedeutungsschwangeren Zitate bekannter Menschen, die eine gewisse Stimmung erzeugen und die &#8211; meiner Meinung nach &#8211; nur leider\u00a0 zu oft und zu leichtsinnig verwendet werden, denn auch Zitate und Aphorismen unterliegen dem Urheberrecht, aber das ist eine andere Baustelle.<\/p>\n<p>Nehmen wir mal an, wir haben eine Webseite mit mehreren Zitaten von unser aller Freund Goethe.<\/p>\n<p><strong>Startseite-de <\/strong><\/p>\n<blockquote><p>Auch aus Steinen, die einem in den Weg gelegt werden, kann man Sch\u00f6nes bauen<\/p><\/blockquote>\n<p><strong>Startseite-en <\/strong><\/p>\n<blockquote><p>Even the stones that have been placed in one&#8217;s path can be made into something beautiful.<\/p><\/blockquote>\n<p><strong>Produkte-de<\/strong><\/p>\n<blockquote><p>Mit dem Wissen w\u00e4chst der Zweifel.<\/p><\/blockquote>\n<p><strong>Produkte-en<\/strong><\/p>\n<blockquote><p>With konwledge doubt increases.<\/p><\/blockquote>\n<p>Nun k\u00f6nnte man sicherlich auch diese Zitate mit inserttags sprachabh\u00e4ngig anzeigen lassen, wenn jedoch zum Beispiel auf jeder zweiten Seite einer Installation ein anderes Zitat erscheinen soll, w\u00fcrde ich eher dazu tendieren die Erweiterung <a title=\"Die Erweiterung contentbox im Contao Repository\" href=\"http:\/\/www.contao.org\/erweiterungsliste\/view\/boxes.10100029.de.html\">ContentBox<\/a> von Christian Wenzel und Markus Mikereit | <a title=\"Link zum Autor der Erweiterung Markus Milkereit\" href=\"http:\/\/www.computino.de\">computino.de<\/a> einzusetzen.<\/p>\n<p>Am besten man beginnt nach der Installation zuerst damit ein Modul f\u00fcr die sp\u00e4ter zu erstellenden Contentboxen anzulegen. Dazu wie \u00fcblich <strong>==&gt;Module<\/strong> anklicken und ein Modul vom <strong>Typ\u00a0 ==&gt;Contentbox<\/strong> erstellen (zu finden unter &#8222;Verschiedenes&#8220;) und festlegen in welchem Layoutbereich das Modul angezeigt werden soll.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2647\" title=\"contao-contentbox-verknuepfte-seiten\" src=\"http:\/\/www.jukemedia.de\/blog\/wp-content\/uploads\/2011\/01\/contao-contentbox-verknuepfte-seiten-e1295800680277.png\" alt=\"Bild vom Contao Backend bei installierter Erweiterung contentbox mit dem Auswahlmen\u00fc verkn\u00fcpfte Seiten\" width=\"600\" height=\"471\" srcset=\"https:\/\/www.jukemedia.de\/blog\/wp-content\/uploads\/2011\/01\/contao-contentbox-verknuepfte-seiten-e1295800680277.png 600w, https:\/\/www.jukemedia.de\/blog\/wp-content\/uploads\/2011\/01\/contao-contentbox-verknuepfte-seiten-e1295800680277-300x236.png 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/p>\n<p>Wie man nach der Installation der Erweiterung unschwer erkennen kann, ist im Backend die Seitenleiste um einen Navigationspunkt reicher geworden. Klickt man auf den neuen Link <strong>&#8222;contentbox<\/strong>&#8220; kann man im weiteren Verlauf f\u00fcr jedes Zitat eine solche Box erstellen.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2650\" title=\"contao-erweiterungen-contentbox-2\" src=\"http:\/\/www.jukemedia.de\/blog\/wp-content\/uploads\/2011\/01\/contao-erweiterungen-contentbox-2-e1295800761125.png\" alt=\"Bild vom Contao Backend mit angelegten Contentboxen f\u00fcr verschiedene Zitate\" width=\"600\" height=\"471\" srcset=\"https:\/\/www.jukemedia.de\/blog\/wp-content\/uploads\/2011\/01\/contao-erweiterungen-contentbox-2-e1295800761125.png 600w, https:\/\/www.jukemedia.de\/blog\/wp-content\/uploads\/2011\/01\/contao-erweiterungen-contentbox-2-e1295800761125-300x236.png 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/p>\n<p>Die Verfahrensweise ist denkbar einfach: im Textfeld kann man das Zitat einf\u00fcgen und anschlie\u00dfend in der Seitenbaum die Seiten ausw\u00e4hlen, auf der das Zitat erscheinen soll. Im Auswahlfeld &#8222;Anzeigen in Modul&#8220; ist das zuvor erstellte Modul &#8222;Zitate&#8220; sichtbar und wird durch Klick der contentbox zugeordnet. In der Seitenvorlage muss man nun nur noch an geeigneter Stelle das Modul &#8222;zitate&#8220; unter &#8222;eigebundene Module&#8220; platzieren und der Fisch ist geputzt. Etwas tricky kann es werden wenn man z.B. im Laufe der Bearbeitung einer Webseite zun\u00e4chst nur ein Zitat f\u00fcr alle Seiten eingef\u00fcgt hat und erst sp\u00e4ter weitere Zitate einarbeitet. Dann darf man nat\u00fcrlich nicht vergessen die Haken beim ersten Zitat an entsprechender Stelle wieder herauszunehmen.<\/p>\n<h3>Layouts und Module sparen mit der Erweiterung z_modulealias<\/h3>\n<p>Im Contao ER (extension repository) zu finden ist auch die Erweiterung <a title=\"Link zur Erweiterung z_modulealias im Conato Erweiterungskatalog\" href=\"http:\/\/www.contao.org\/erweiterungsliste\/view\/z_modulealias.10000009.de.html\">z_modulealias<\/a>, mit der man ebenfalls den umgekehrten Weg beschreiten kann. Es werden nicht dem Layout die Module zugeordnet, sondern den Modulen gesagt, auf welchen Seiten erscheinen sollen. Nach der Installation sind alle Module unter den Experten Einstellungen mit der zus\u00e4tzlichen Auswahlliste &#8222;verkn\u00fcpfte Seiten&#8220; ausgestattet.<\/p>\n<p>Klick darauf \u00f6ffnet den Seitenbaum aus welchem man dann ganz einfach die Seiten ausw\u00e4hlt, auf denen das Modul erscheinen soll.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2646\" title=\"Die Contao Erweiterung z_modulealias von Andreas Schempp\" src=\"http:\/\/www.jukemedia.de\/blog\/wp-content\/uploads\/2011\/01\/contao-erweiterungen-z_modulealias-e1295800818764.png\" alt=\"Bild vom Contao Backend mit der installierten Erweiterung z_modulealias\" width=\"600\" height=\"156\" srcset=\"https:\/\/www.jukemedia.de\/blog\/wp-content\/uploads\/2011\/01\/contao-erweiterungen-z_modulealias-e1295800818764.png 600w, https:\/\/www.jukemedia.de\/blog\/wp-content\/uploads\/2011\/01\/contao-erweiterungen-z_modulealias-e1295800818764-300x78.png 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Contao ist multidomainf\u00e4hig, sehr praktisch, denn alle andersprachigen Webseiten lassen sich in einer Installation pflegen. Je mehr \u00dcbersetzungen jedoch hinzukommen, kann es auf herk\u00f6mmlichen Weg zunehmend un\u00fcbersichtlich werden wenn man neben der Navigation auch noch zahlreiche sprachabh\u00e4ngige Module \u00fcbersetzen und einbinden muss. Welche Erweiteurng ich gefunden habe die helfen das Chaos zu vermeiden, dazu mehr in diesem Artikel<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[1039,50],"yst_prominent_words":[645,1036,659,1042,804,1043,858,1023,1024,1025,1026,1027,1028,1029,1031,1032,1033,1034,536,1035],"class_list":["post-2625","post","type-post","status-publish","format-standard","hentry","category-contao","tag-webentwicklung","tag-erweiterungen"],"_links":{"self":[{"href":"https:\/\/www.jukemedia.de\/blog\/wp-json\/wp\/v2\/posts\/2625","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.jukemedia.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jukemedia.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jukemedia.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jukemedia.de\/blog\/wp-json\/wp\/v2\/comments?post=2625"}],"version-history":[{"count":9,"href":"https:\/\/www.jukemedia.de\/blog\/wp-json\/wp\/v2\/posts\/2625\/revisions"}],"predecessor-version":[{"id":4510,"href":"https:\/\/www.jukemedia.de\/blog\/wp-json\/wp\/v2\/posts\/2625\/revisions\/4510"}],"wp:attachment":[{"href":"https:\/\/www.jukemedia.de\/blog\/wp-json\/wp\/v2\/media?parent=2625"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jukemedia.de\/blog\/wp-json\/wp\/v2\/categories?post=2625"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jukemedia.de\/blog\/wp-json\/wp\/v2\/tags?post=2625"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/www.jukemedia.de\/blog\/wp-json\/wp\/v2\/yst_prominent_words?post=2625"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}