Multilinguale Webseite
ein etwas komplexeres Thema ...
Europa hat viele Sprachen, und so werden Multilinguale Webseiten für den Ein- oder Anderen immer wichtiger. Nachdem ich jetzt auch auf dieses Problem gestoßen bin, und nicht wirklich mit dem, was im Netz zu Multilingualen Webseiten mit PHPWCMS gefunden habe, was anfangen konnte, nun hier die Lösung, die ich aus dem was ich im Netz gefunden habe, gepaart mit dem was mir von Pepe erklärt wurde. Danke hier auch wieder mal an ‚Pepe’ für die Unterstützung beim gundsätzlichen Verständnis der Logik.
Auch wenn es mir nicht wirklich einleuchten wollte, so ist es tatsächlich so, das es sinnvoll ist, für z.B. drei Sprachen auch drei vollständige Menüstrukturen zu machen (ja, das ist schwer zu verstehen, macht aber SInn, und, ja man macht eigentlich die ganze Seite 3 mal)
Die in Phpwcms vorgesehenen Ersetzer z.B. [ DE] für deutsch [ /DE] und [ EN] for english [ /EN] für englisch, machen 'wirklich' nur dann Sinn, wenn es sich um ganz, ganz wenigt Text handelt.
Die Menüstruktur:
- Home [ID 0] (Standardmäßig vorhanden, wird später nicht mehr benötigt)
|
| --- Startseite - Deutsch [ID 1] Deutsche Home / Alias der Ebene „de“ , das ist noch wichtig!
| |
| | --- Menüpunkt 1
| |
| | --- Menüpunkt 2
| |
| | --- usw.
|
| --- Startseite - Englisch [ID 2] Englische Home / Alias der Ebene „en“ , das ist noch wichtig!
| |
| | --- Menüpunkt 1
| |
| | --- Menüpunkt 2
| |
| | --- usw.
|
| --- Startseite - Italienisch [ID 3] Italienische Home / Alias der Ebene „it“ , das ist noch wichtig!
| |
| | --- Menüpunkt 1
| |
| | --- Menüpunkt 2
| |
| | --- usw.
|
| --- Startseite – weitere Sprache [ID 4] usw..
| |
| | --- Menüpunkt 1
Warum so scheinbar kompliziert? Schon mal deshalb, weil man so einen Überblick über die jeweilige Sprache, die Übersetzung usw. behält. Warum noch, das wird klarer, wenn man sich die lang.init.php mal an sieht. Die verlegt nämlich den eigentlichen Link auf die jeweilige Sprache wie z.B. meinehomepage.de/de.html [ID1], meinehomepage.de/en.html [ID2], meinehomepage.de/it.html [ID4], usw. Und so wird auch zwischen den Sprachen geschalten.
Was braucht man um mit Phpwcms eine Multilinguale Seite aufzubauen?
Folgende Dateien sind auch von Nöten:
- template/inc_script/frontend_render/lang_replace.php (ist im Phpwcms unter disabled enthalten)
- template/inc_script/frontend_init/lang.init.php (nicht enthalten)
- template/inc_script/frontend_render/lang.render.php (nicht enthalten)
Warum auch immer die zwei Dateien nicht im Standard Phpwcms enthalten sein mögen erschließt sich mir nicht, egal. Die Beiden findet man auf Github im phpwcms-extended. Im Verzeichnisbaum sieht man wo die beiden anderen hin gehören.
Was machen diese denn so?
die lang.render.php
Die lang.render.php produziert ein Menü um zwischen den Sprachen umzuschalten, allerdings nur ein Menü aus z.B. de en it fr. Will man da etwas anderes stehen haben, muss man das in der lang.render.php ab Zeile 54 ändern. Dann wird das auch ne prima Sache! Wenn man jetzt noch ein enstprechendes CSS macht, kann man so aus dem Menü ein Fähnchen-Menü machen, wie oben rechts zu sehen.
Ohne die lang.render.php nützt einem die Erklärung über Replacer auf Github nix, denn da kann man eintragen was und wo man will, es wird nix ersetzt, nur ein Text draus gemacht. Hat man die Datei am richtigen Platz, dann wir das auch was mit dem Language_Switch { SWITCH_LANG }.
Der Replacer { lang } produziert ein "de" für deutsch, ein "en" für englisch, usw. Hab ICH keine Idee zur Verwendung bis jetzt.
die lang_replacer.php
Die lang_replacer.php sorgt dafür, das, wenn man ein Wort oder einen Text in die doppelten [at] setzt @ @Text in deutsch@ @, dieser im Verzeichnis template/templete_lang in die Datei de.php eingetragen wird. Ändert man dort nun z.b. den Text in eine Andere Sprache, landet diese dann entsprechend, je nach Browsereinstellung da wo vorher in den doppelten [at] was anderes stand!
Ob die PHP für sonst noch was gut ist, hab ich noch nicht raus gefunden …
Ach ja, ich glaub die braucht man auch für das [ DE] Bla Bla Deutsch [ /DE] [ EN] Bla Bla english [ /EN] (kann man z.B. in Artikel schreiben/platzieren) und ist nur für wenig Text sinnvoll.
die lang.init.php
Die lang.init.php ist für den auf Github erklärten Seitenbaum zuständig, und macht wie Oben schon mal beschrieben, die verteilung auf die ID bzw den passenden LINK für die Sprache (vorausgesetzt man macht das mit dem Strukturbaum so wie bei Github oder oben beschrieben.
Was mich jedoch sehr irritiert hatte, war, das ich die Erklärung mit dem Baum so verstanden hatte, das ich auf jeden Fall eine komplett neue Seite aufbauen muß. Gute Nachrichen, um eine Multilinguale Webseite mit PHPWCMS zu realisieren …
Muss man nicht alles neu machen!
Umkopieren Struktur so umkopieren das das dem Baum oben gleicht und in der lang.init.php ab Zeile 22 die jeweilige [ID] für die entsprechende Sprache eintragen und schon geht das! (Steht leider auch nirgends …. Oder ich konnte es nicht finden)
die conf.inc.php
Ach ja, in den Beschreibungen wird noch $phpwcms['allowed_lang‘] erwähnt. Hier muss man auch noch was ändern $phpwcms['allowed_lang'] = array('de','en','it'); Hab hier mal deutsch/englisch und italienisch eingetragen, weil das is ja was ICH brauche $phpwcms['allowed_lang'] = array('de','en','it');
Ändert man da nichts, gehts auch nicht richtig. Wenn man weiß, wo die Datei aus der Erklärung auf Github beschriebene $phpwcms['allowed_lang‘] sich befindet. Die angegebenen Datei findet man übrigens in der conf.inc.php im Verzeichnis include/config. Die default language auf ‚de‘ für deutsch einstellen.
Das Menü:
Verwendet man NAV_LIST_UL, muss das dann im Template so aus sehen, zumindest bei mir, denn ohne das "P" wird mir der jeweilige Link zur Startseite der jeweiligen Sprache nicht angezeigt { LEVEL1_ID } wirft das "1" aus, was dafür sorgt, das immer nur das entsprechende Menü zur jeweiligen Sprache angezeigt wird.
In meinem Fall, da ich Deutsch als Standardsprache in meiner Menüstrucktur habe - 1 für deutsch / 2 für englisch / 3 für italienisch
{NAV_LIST_UL:PB,{LEVEL1_ID},10,active li-Klasse-active1 |nav navbar-nav navbar-right ul-klasse ||||, | a-Klasse-active ,,0,,}
Das Menü mit dem Replacer NAV_MAIN:
eine noch viel, viel einfachere Lösung bietet der Replacer { NAV_MAIN } aus der lang.render. Der liefert nämlich nach passender Einstellung automatisch das richtige Menü zur jeweiligen Sprache! Cool.
ACHTUNG, DAS MENÜ UNTERHALB DIESES TEXTES IST VOLL FUNKTIONSTÜCHTIG! DRAN DENKEN!
Das Menü zum Replacer NAV_MAIN
die Lösung im Footer:
Da Mein Menü im FOOTER auch in der Struktur des gesamten Menü´s enthalten ist,
hatte ich das Problem - doppelte Struktur für 2 Sprachen, somit für die jeweils von der Sprache abhängige unterschiedliche ID. Bei mir z.B deutsche unter- ID 12 und für englisch ID 86. Unterhalb die derzeit funktionierende Lösung. Leide kann diese fehlerbehaftet sein und ich kann mir vorstellen das das einfacher zu lösen ist, weiß es aber nicht
Ob es eine elegantere gibt, kann ich vielleicht sagen, wenn ich eine Rückmeldung aus dem Forum bekommen sollte.
[DE]{NAV_LIST_UL: F,12,1, ,|a-active}[/DE]
[EN]{NAV_LIST_UL: F,86,1, ,|a-active}[/EN]
alternative Lösung laut Oliver Georgi:
ein hartes Menü? Ich hab das mal so aufgefasst, das es nicht flexibel ist. Das heipt dann, es über z.B. Linklist zu erstellen und die Änderung des jeweiligen Links über die template_lang zu machen. Bis jetzt die sicherste und am wenigsten aufwendige Lösung. Noch dazu kann es keine irregeleiteten Links geben wenn noch nicht alle Übersetzungen fertig sind.
in Artikel Linkliste:
@ @ Impressum@ @ | @ @ de/impressum @ @ | @ @ Impressum @ @ @ @ Datenschutzerklärung @ @ | @ @ de/impressum @ @ | @ @ Datenschutzerklärung@ @ @ @ Sitemap @ @ | @ @ de/sitemap @ @ | @ @ Sitemap @ @ @ @ Suche @ @ | @ @d e/suche @ @ | @ @ Suche @ @
weiter alternative Lösung:
Da ja in Normalfall die Links, die man im Footer oder z.B. in einer Topbar (Menü am Anfang der Webseite) hat, sich eigentlich nie ändern, ist es ja nicht nötig diese unbedingt im CMS direkt zu platzieren. So kann man dies ja auch direkt im Template tun. Hier findet nun dann auch der Replacer { LANG } aus der lang.render endlich verwendung! Dieser Peplacer produziert Beilspielsweise ein "de" für deutsch, "en" für englisch, jeweils entsprechend der gewählten Sprache.
Der Code unterhalb würde dann eben entsprechend der Sprache den passenden Link liefern.
<a href="{LANG}/impressum.html" title="Impressum">Impressum</a>
Links zu dem Thema:
- Multilingual / Multidomain auf phpwcms-HowTo:wiki
- Tutorial zum Multilingualen Shop (phpwcms-forum) (hab ich noch nicht probiert)
- Multilinguale Seite mit einem Template phpwcms-forum) (vielleicht hilft es ja jemanden)
- Erklärung zu Replacern und der Menüstruktur auf Gibhub