Multilanguage-Site mit einem Template

Hier bekommst Du deutschsprachigen Support. Keine Fehlermeldungen oder Erweiterungswünsche bitte!
photojo
Posts: 685
Joined: Wed 15. Nov 2006, 20:02
Location: Regensburg, Germany
Contact:

Multilanguage-Site mit einem Template

Post by photojo » Mon 16. Nov 2015, 15:26

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

Old Boy
Posts: 1120
Joined: Fri 23. Nov 2012, 13:52

Re: Multilanguage-Site mit einem Template

Post by Old Boy » Mon 16. Nov 2015, 17:44

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

photojo
Posts: 685
Joined: Wed 15. Nov 2006, 20:02
Location: Regensburg, Germany
Contact:

Re: Multilanguage-Site mit einem Template

Post by photojo » Tue 17. Nov 2015, 07:10

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.

User avatar
Oliver Georgi
Site Admin
Posts: 9576
Joined: Fri 3. Oct 2003, 22:22
Location: Moscow, Russia
Contact:

Re: Multilanguage-Site mit einem Template

Post by Oliver Georgi » Tue 17. Nov 2015, 17:16

Das ist ein unschöner Ansatz. Unperformant. Überflüssig. Nicht sauber.

Für Templates empfiehlt sich:
Oliver Georgi | phpwcms Developer | GitHub | LinkedIn | Систрон

Old Boy
Posts: 1120
Joined: Fri 23. Nov 2012, 13:52

Re: Multilanguage-Site mit einem Template

Post by Old Boy » Tue 17. Nov 2015, 17:24

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?

User avatar
Oliver Georgi
Site Admin
Posts: 9576
Joined: Fri 3. Oct 2003, 22:22
Location: Moscow, Russia
Contact:

Re: Multilanguage-Site mit einem Template

Post by Oliver Georgi » Tue 17. Nov 2015, 18:21

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.
Oliver Georgi | phpwcms Developer | GitHub | LinkedIn | Систрон

photojo
Posts: 685
Joined: Wed 15. Nov 2006, 20:02
Location: Regensburg, Germany
Contact:

Re: Multilanguage-Site mit einem Template

Post by photojo » Tue 17. Nov 2015, 20:48

Hey, super! Das kannte ich so nicht! Das ist im Prinzip genau das, was ich suchte!
Vielen Dank!

photojo
Posts: 685
Joined: Wed 15. Nov 2006, 20:02
Location: Regensburg, Germany
Contact:

Re: Multilanguage-Site mit einem Template

Post by photojo » Sun 20. Dec 2015, 13:42

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?

Old Boy
Posts: 1120
Joined: Fri 23. Nov 2012, 13:52

Re: Multilanguage-Site mit einem Template

Post by Old Boy » Sun 20. Dec 2015, 15:41

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'];
}

photojo
Posts: 685
Joined: Wed 15. Nov 2006, 20:02
Location: Regensburg, Germany
Contact:

Re: Multilanguage-Site mit einem Template

Post by photojo » Sun 20. Dec 2015, 15:51

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

Old Boy
Posts: 1120
Joined: Fri 23. Nov 2012, 13:52

Re: Multilanguage-Site mit einem Template

Post by Old Boy » Sun 20. Dec 2015, 16:09

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!

User avatar
Oliver Georgi
Site Admin
Posts: 9576
Joined: Fri 3. Oct 2003, 22:22
Location: Moscow, Russia
Contact:

Re: Multilanguage-Site mit einem Template

Post by Oliver Georgi » Sun 20. Dec 2015, 17:09

genau deswegen gibt es diese LEVEL Prüfungen, damit man das an der Stelle so abfeiern kann und zwar bevor der Rest reparst wird.
Oliver Georgi | phpwcms Developer | GitHub | LinkedIn | Систрон

Old Boy
Posts: 1120
Joined: Fri 23. Nov 2012, 13:52

Re: Multilanguage-Site mit einem Template

Post by Old Boy » Sun 20. Dec 2015, 22:24

Man, da bin ich ja jetzt richtig stolz auf mich :lol:

photojo
Posts: 685
Joined: Wed 15. Nov 2006, 20:02
Location: Regensburg, Germany
Contact:

Re: Multilanguage-Site mit einem Template

Post by photojo » Wed 23. Dec 2015, 13:02

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

User avatar
Oliver Georgi
Site Admin
Posts: 9576
Joined: Fri 3. Oct 2003, 22:22
Location: Moscow, Russia
Contact:

Re: Multilanguage-Site mit einem Template

Post by Oliver Georgi » Wed 23. Dec 2015, 13:41

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;
}
Oliver Georgi | phpwcms Developer | GitHub | LinkedIn | Систрон

Post Reply