Page 1 of 6

Multilanguage-Site mit einem Template

Posted: Mon 16. Nov 2015, 15:26
by photojo
Hi,

ich möchte eine zweisprachige Seite entwickeln. Wie man das macht wurde hier und im wiki ja bereits öfters diskutiert und beschrieben.
Ich hätte es nun gerne mit einem Template gemacht.

Gibt es so etwas wie

[de]
{NAV_LIST_UL:F,01,1,act_path,active}
[/de]

[en]
{NAV_LIST_UL:F,11,1,act_path,active}
[/en]

also "Schalter" für die einzelnen Sprachen?

Gruß
Jo

Re: Multilanguage-Site mit einem Template

Posted: Mon 16. Nov 2015, 17:44
by Old Boy
Den Vorteil seh ich noch nicht, aber ich würde mal versuchen:

Code: Select all

{NAV_LIST_UL:F,@@HP_ID@@,1,act_path,active}
und dann in den Sprachdateien den "passenden" Integriert eintragen...

Keine Ahnung, ob's geht... ist ab in Nullkommanix getestet ... und dann wissen wir's :D

Re: Multilanguage-Site mit einem Template

Posted: Tue 17. Nov 2015, 07:10
by photojo
Der Vorteil wäre halt, dass ich nur ein Template habe.
Im konkreten Fall soll ein Slider z.B. abhängig von der Sprache andere Bilder zeigen. Dann könnte ich halt unterscheiden und mit SHOW_CONTENT entspr. CPs einblenden.
Wenn es nicht geht, dann pflege ich halt zwei Templates. Gibt schlimmeres.

Re: Multilanguage-Site mit einem Template

Posted: Tue 17. Nov 2015, 17:16
by Oliver Georgi
Das ist ein unschöner Ansatz. Unperformant. Überflüssig. Nicht sauber.

Für Templates empfiehlt sich:

Re: Multilanguage-Site mit einem Template

Posted: Tue 17. Nov 2015, 17:24
by Old Boy
Anstelle von:

Code: Select all

{NAV_LIST_UL:F,@@HP_ID@@,1,act_path,active}
Wäre dann besser:

Code: Select all

[DE]{NAV_LIST_UL:F,1,1,act_path,active}[/DE]
[EN]{NAV_LIST_UL:F,11,1,act_path,active}[/EN]
Oder vielleicht so:

Code: Select all

{NAV_LIST_UL:F,[DE]1[/DE][EN]11[/EN],1,act_path,active}
Oder noch ganz anders?

Re: Multilanguage-Site mit einem Template

Posted: Tue 17. Nov 2015, 18:21
by Oliver Georgi
Der Sprachrenderer greift viel zu spät, muss auf Systemebene realisiert werden. Frontend Render ist dafür geeignet. Alles andere nicht sinnvoll.

Wenn doch templatebasiert, sind [IF_CAT:…][\IF_CAT], [IF_NOTCAT:…][/IF_NOTCAT], [LEVEL1_ID]{LEVEL1_ID}[/LEVEL1_ID] sinnvoller, da diese sehr früh prüfen und ersetzen.

Re: Multilanguage-Site mit einem Template

Posted: Tue 17. Nov 2015, 20:48
by photojo
Hey, super! Das kannte ich so nicht! Das ist im Prinzip genau das, was ich suchte!
Vielen Dank!

Re: Multilanguage-Site mit einem Template

Posted: Sun 20. Dec 2015, 13:42
by photojo
So, es ist endlich soweit, die Site soll zweisprachig werden. Ich habe mir languageSwitch bei github besorgt. Muss man in den beiden Dateien etwas anpassen?

Re: Multilanguage-Site mit einem Template

Posted: Sun 20. Dec 2015, 15:41
by Old Boy
In der lang.ini.php musst du auf jeden Fall die Category IDs den eigenen Gegebenheiten anpassen:

Code: Select all

$phpwcms['id_lang'] = array(
 // cat-ID    LANG
        60 => 'de',
        61 => 'en',
     // 88 => 'fr',
     // 99 => 'es'
);
ggf. auch die Formatierung für das Datum (kommt drauf an was du vor hast):

Code: Select all

// switch default date setting
if($phpwcms['default_lang'] != 'de') {
	$template_default['date']['language']		= strtoupper($phpwcms['default_lang']);
	$template_default['date']['short']		= 'y/m/d';
	$template_default['date']['article']		= 'Y/m/d';
	$template_default['news']['date_language']  = $template_default['date']['language'];
	$template_default['news']['date_format']	= $template_default['date']['article'];
}

Re: Multilanguage-Site mit einem Template

Posted: Sun 20. Dec 2015, 15:51
by photojo
Danke für die Antwort.

Irgendwie komme ich gar nicht klar?

Die Site läufte seit fast einem Jahr ohne Probleme.
Das Menü erhielt ich bisher so:

Code: Select all

{NAV_LIST_UL:B,0,2,active|nav navbar-nav,active,id}
Nun habe ich alle Kategorien unter HOME in eine neu angelegte Kategorie "de" (ID=167) verschoben. Dies dann kopiert und in "cn" (ID=167) umbenannt. Die lang.ini.php habe ich entsprechend angepasst.
Mit {SWITCH_LANG} erhalte ich nun z.B. de cn.

Nur was mache ich nun statt

Code: Select all

{NAV_LIST_UL:B,0,2,active|nav navbar-nav,active,id}
?

Jo

Re: Multilanguage-Site mit einem Template

Posted: Sun 20. Dec 2015, 16:09
by Old Boy
photo wrote:...

Nur was mache ich nun statt

Code: Select all

{NAV_LIST_UL:B,0,2,active|nav navbar-nav,active,id}
?
Jo
Versuchs doch zunächst mal so (vielleicht merkt OG momentan ja nix :wink: ):
{NAV_LIST_UL:B,[LEVEL1_ID]{LEVEL1_ID}[/LEVEL1_ID],2,active|nav navbar-nav,active,id}
Vorausgesetzt, deine beiden Sprachzweige für de und cn liegen unmittelbar unterhalb von HOME!

Re: Multilanguage-Site mit einem Template

Posted: Sun 20. Dec 2015, 17:09
by Oliver Georgi
genau deswegen gibt es diese LEVEL Prüfungen, damit man das an der Stelle so abfeiern kann und zwar bevor der Rest reparst wird.

Re: Multilanguage-Site mit einem Template

Posted: Sun 20. Dec 2015, 22:24
by Old Boy
Man, da bin ich ja jetzt richtig stolz auf mich :lol:

Re: Multilanguage-Site mit einem Template

Posted: Wed 23. Dec 2015, 13:02
by photojo
Mühsam quäle ich mich weiter. Für das Projekt brauche folgendes:
Die beiden Seiten, de und cn, und deren Unterseiten sollen unterschiedliche Farben haben. Um die via CSS anzusteuern, habe bisher folgendes gehabt:

Code: Select all

if(isset($LEVEL_ID[1])) { // lets say it is the main structure root
   $content['body_id'] = $LEVEL_ID[1];
}
Nun habe ich dies:

Code: Select all

if(isset($LEVEL_ID[2])) { // lets say it is the main structure root
   $content['body_id'] = $LEVEL_ID[1].'_'.$LEVEL_ID[2];
  }
Allerdings wäre mir hier statt der ID von $LEVEL_ID[1] der Alias der Katgorie (also de oder cn) lieber, da irgendwie verständlicher?

Kann mir jemand sagen, wie das geht?

LG
Jo

Re: Multilanguage-Site mit einem Template

Posted: Wed 23. Dec 2015, 13:41
by Oliver Georgi
Jede Kategorie kann eine Klasse haben, das ist sinnvoller statt des Alias.

Code: Select all

if(isset($LEVEL_ID[1]) && !empty($content['struct'][$LEVEL_ID[1]]['acat_alias'])) {
    $template_default['body']['class'] = $content['struct'][$LEVEL_ID[1]]['acat_alias'];
    // erhalten des Standardwertes
    //$template_default['body']['class'] = trim($template_default['body']['class'].' '.$content['struct'][$LEVEL_ID[1]]['acat_alias']);
}
Wenn auch noch das 2. Level

Code: Select all

if(isset($LEVEL_ID[1]) && !empty($content['struct'][$LEVEL_ID[1]]['acat_alias'])) {
    $template_default['body']['class'] = trim($template_default['body']['class'].' '.$content['struct'][$LEVEL_ID[1]]['acat_alias']);
    if(isset($LEVEL_ID[2]) && !empty($content['struct'][$LEVEL_ID[2]]['acat_alias'])) {
        $template_default['body']['class'] = trim($template_default['body']['class'].' '.$content['struct'][$LEVEL_ID[2]]['acat_alias']);
    }
}
Gehen wir davon aus, dass das Alias für Level 1 "lang-de" ist und für Level 2 "whatever", dann kannst Du das wir folgt adressieren

Code: Select all

.lang-de {
    background: yellow;
}
.lang-de.whatever {
    background: red;
}