Mehrsprachig mittels templates

Fragen zur Implementierung und/oder Anpassung von ConPresso 4 werden in diesem Forum diskutiert.
krishu
ConPresso-User
Beiträge: 82
Registriert: 15.12.2005 09:51
Kontaktdaten:

Mehrsprachig mittels templates

Beitrag von krishu »

Hallo,

mein Brötchengeber hat ein schönes CMS, welches den mehrsprachigen Webauftritt so löst, dass die verschiedenen Sprachen eines Artikels im selben Datenbankeintrag stehen. das ist extrem komfortabel. Ich würde gern Ähnliches mit Conpresso realisieren.

Meine Idee ist also nun in etwa diese:

ich gebe meinem Artikeltemplate alle Elemente doppelt, einmal deutsch, einmal englisch. Primäre Sprache ist DE. Es gibt nun einen Button DE/EN, der die angezeigten Artikeltemplate-Elemente wechselt. Voraussetzung ist DE existiert immer. Wenn EN-Elemente leer sind, wird stattdessen EN angezeigt (was mit ifset etc. funktionieren sollte).

Meine konkrete Frage: wie kann ich im template oder beim Auslesen sortieren, dass entweder nur die DE- oder die EN-Elemente angezeigt werden?

danke schonmal und gruß
Christian
Ich habe keine Ahnung. Leider.
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7369
Registriert: 01.01.1970 01:00
Hat sich bedankt: 112 Mal
Danksagung erhalten: 936 Mal
Kontaktdaten:

Beitrag von MarkusR »

Mal ins unreine gedacht:

Warum nicht einfach um die jeweiligen Elemente ein
<div class="DE">...</div>
und
<div class="EN">...</div>
um die entsprechenden Elemente legen?

Dann könnte man die Klasse .EN mittels display:none ausblenden.
Mit einem kleinen Javascript kann man dies dann auf z.B. display:inline umschalten und stattdessen für die Klasse .DE display auf none stellen...

Statt Klassen kann man natürlich auch IDs benutzen...
oder auch alternative CSS-Files benutzen...

dann muß nicht mal die Seite neu geladen werden und auch Google ist von der Sprachenvielfalt begeistert
:wink:
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
krishu
ConPresso-User
Beiträge: 82
Registriert: 15.12.2005 09:51
Kontaktdaten:

Beitrag von krishu »

Hallo Markus,

danke, das könnte ich verstehen ;)

Damit wäre es allerdings u. U. schwierig den DE-Text anzeigen zu lassen, wenn der EN-text nicht da ist. Ich denke mal drüber nach.

Noch lieber wäre mir, wenn ich zb. eine index_de.php und eine index_en.php habe, die jeweils nur die eine oder eben die andere Hälfte der Templates ausbibt.

Gruß
Christian
Ich habe keine Ahnung. Leider.
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7369
Registriert: 01.01.1970 01:00
Hat sich bedankt: 112 Mal
Danksagung erhalten: 936 Mal
Kontaktdaten:

Beitrag von MarkusR »

krishu hat geschrieben:Damit wäre es allerdings u. U. schwierig den DE-Text anzeigen zu lassen, wenn der EN-text nicht da ist. Ich denke mal drüber nach.
Wieso denn? Benutze doch einfach deine angedachte ifset/ifnotset-Lösung...

also etwa so:

Code: Alles auswählen

<div class="DE"><!-- Text: Artikeltext deutsch; --></div>
<div class="EN"><!-- ifNotSet: Artikeltext englisch; --><!-- Text: Artikeltext deutsch; --><!-- /ifNotSet; --><!-- ifSet: Artikeltext englisch; --><!-- Text: Artikeltext englisch; --><!-- /ifSet; --></div>
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
krishu
ConPresso-User
Beiträge: 82
Registriert: 15.12.2005 09:51
Kontaktdaten:

Beitrag von krishu »

Hallo,

aaah, ja, Du hast natürlich Recht.

Ich würde das dann so erweitern:

Code: Alles auswählen

<div class="DE"><!-- Text: Artikeltext deutsch; --></div> 
<div class="EN"><!-- ifNotSet: Artikeltext englisch; -->Sorry, this article is not available in English. It is shown in german language instead (oder so)[p]<!-- Text: Artikeltext deutsch; --><!-- /ifNotSet; --><!-- ifSet: Artikeltext englisch; --><!-- Text: Artikeltext englisch; --><!-- /ifSet; --></div>
siehst Du eine Möglichkeit, das ganze auch für die Navigation(mod_menu) zu realisieren? Da habe ich noch eine Denkblockade. Geht das genauso? (klar, muss ich da ein paar php-Dateien editieren)

Gruß
Christian
Ich habe keine Ahnung. Leider.
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7369
Registriert: 01.01.1970 01:00
Hat sich bedankt: 112 Mal
Danksagung erhalten: 936 Mal
Kontaktdaten:

Beitrag von MarkusR »

Es ist nicht schön anzusehen, funktioniert aber:

Du kannst einfach HTML-Codes in der Navigation verwenden. Du gibst also einfach als Beschreibung des Nav-Elementes sowas ein:

Code: Alles auswählen

<div class="DE">Klick mich</div><div class="EN">Click me</div>
Alternativ könnte man auch die ConPresso-Sprachdateien mit der Übersetzung der Menüpunkte erweitern und in inc_build_nav.inc.php die Zeile

Code: Alles auswählen

$nav_text[$nav_nr] = $navArray[$i]['caption'];
ändern in

Code: Alles auswählen

$nav_text[$nav_nr] = __($navArray[$i]['caption']);
dann müsste man aber die Rubriksprache in diesem Augenblick umstellen können. Um es mittels CSS-Klassen zu machen könnte man es so ergänzen:

Code: Alles auswählen

$nav_text[$nav_nr] = '<div class="DE">'.$navArray[$i]['caption']'</div><div class="EN">'.__($navArray[$i]['caption']).'</div>';
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Bl4ckSh33p
ConPresso-User
Beiträge: 64
Registriert: 04.08.2006 19:12
Wohnort: Bayern
Hat sich bedankt: 6 Mal
Kontaktdaten:

Beitrag von Bl4ckSh33p »

Wir die Rubriksprache sonst nur für das Datum benutzt?

Wäre toll wenn man das irgendwie einbauen könnte damit man das entweder durchschalten kann (wie oben) oder automatisch je nach Browser/Sprache DE oder EN Texte anzeigt (falls vorhanden).

Im wbb wird das mit jscript ausgelesen, glaube ich. Deutsche Besucher haben dann deutsche Texte, alle anderen Sprchen englische.
krishu
ConPresso-User
Beiträge: 82
Registriert: 15.12.2005 09:51
Kontaktdaten:

Beitrag von krishu »

Hi,

danke,

also das

Code: Alles auswählen

<div class="DE">Klick mich</div><div class="EN">Click me</div>
funktioniert schonmal nicht, weil die Tags in dieser Form

Code: Alles auswählen

<DIV class="DE">
abgespeichert werden. Demzufolge werden sie nicht interpretiert.

Die andere Variante muss ich erstmal verstehen ;)

Gruß
Christian


Edit: OK, in der Navi bleiben die Tags erhalten, nun muss ich die Rechnerwelt noch dazu überreden, sie auch zu interpretieren. Momentan zeigt es mir munter beide an. Sicher eine Frage der CSS-Definitionen.
Zuletzt geändert von krishu am 04.08.2006 21:41, insgesamt 1-mal geändert.
Ich habe keine Ahnung. Leider.
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7369
Registriert: 01.01.1970 01:00
Hat sich bedankt: 112 Mal
Danksagung erhalten: 936 Mal
Kontaktdaten:

Beitrag von MarkusR »

Komisch... bei mir geht das...
siehe http://www.conpresso4.de/_rubric/index. ... PressoPlus
(die Color-Tags im Navigationselement...)

ich habe ja geschrieben: Es ist nicht schön anzusehen, funktioniert aber.

Im Backend sieht es sch... aus, aber ich dachte ja auch, es ginge um's Frontend...
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
krishu
ConPresso-User
Beiträge: 82
Registriert: 15.12.2005 09:51
Kontaktdaten:

Beitrag von krishu »

Danke, siehe auch edit im obigen Posting; werde mir Deine Seite mal unter die Lupe nehmen ;)

Christian
Ich habe keine Ahnung. Leider.
krishu
ConPresso-User
Beiträge: 82
Registriert: 15.12.2005 09:51
Kontaktdaten:

Beitrag von krishu »

Neues Problem.

Es scheint einfach, CSS-Eigenschaften bestimmter Objekte per id-erkennung zu ändern

Bsp:

Code: Alles auswählen

<script language="JavaScript" type="text/javascript">
<!--
frontendlanguage=0;
function changelanguage(){
if (frontendlanguage==0){
document.getElementById("Naveintrag1_en").style.display="inline";
document.getElementById("Naveintrag1_de").style.display="none";
frontendlanguage=1;
}
else {
document.getElementById("Naveintrag1_en").style.display="none";
document.getElementById("Naveintrag1_de").style.display="inline";
frontendlanguage=0;
}
}
//-->
</script>
Es scheint aber keine allgemeine Möglichkeit zu geben, Eigenschaften einer CSS-Klasse per JS zu ändern (?)

Gruß
Christian
Ich habe keine Ahnung. Leider.
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7369
Registriert: 01.01.1970 01:00
Hat sich bedankt: 112 Mal
Danksagung erhalten: 936 Mal
Kontaktdaten:

Beitrag von MarkusR »

-> http://www.styleassistant.de/tips/tip20.htm

wurde schon im ConPresso 3.4.x-Editor benutzt... :wink:

na gut... FireFox kann sowas wieder nicht... aber man kann z.B. das gesamte Stylesheet austauschen (siehe Thema "StyleSwitcher")...

Vielleicht ist ja auch das hier praktikabel
-> http://www.styleassistant.de/tips/tip41.htm
also der Austausch der Klassen z.B. DE gegen nixDE ...
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
krishu
ConPresso-User
Beiträge: 82
Registriert: 15.12.2005 09:51
Kontaktdaten:

Beitrag von krishu »

Hi,

es funktioniert. Einbindung der Sprachumschaltung wie folgt:

Code: Alles auswählen

<a href="javascript:SwitchToEnglish();"><DIV class="DE">English</DIV></a><a href="javascript:DeutscheSprache();"><DIV class="EN_hidden">Deutsch</DIV></a>
die Namen der Funktionen so, dass der Nutzer im Frontend nicht verstört wird, wenn diese unten im Explorer angezigt werden

die Funktionen sehen dann so aus:

Code: Alles auswählen

  function SwitchToEnglish()
      {
        if (document.all)
        {
          for (i=0;i<document.all.length;i++)
          {
            if (document.all[i].className=='DE')
            {
            document.all[i].className='DE_hidden';
            }
            if (document.all[i].className=='EN_hidden')
            {
            document.all[i].className='EN';
            }
          }
        }

        if (document.getElementById && !document.all)
        {
          var elemente=document.getElementsByTagName("*");
          for (i=0;i<elemente.length;i++)
          {
            if (elemente[i].className=='DE')
            {
            elemente[i].className='DE_hidden';
            }
            if (elemente[i].className=='EN_hidden')
            {
            elemente[i].className='EN';
            }
          }
        }
      }
      //-->
      </SCRIPT>
und

Code: Alles auswählen


  <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
      <!--

      function DeutscheSprache()
      {
        if (document.all)
        {
          for (i=0;i<document.all.length;i++)
          {
            if (document.all[i].className=='DE_hidden')
            {
            document.all[i].className='DE';
            }
            if (document.all[i].className=='EN')
            {
            document.all[i].className='EN_hidden';
            }
          }
        }

        if (document.getElementById && !document.all)
        {
          var elemente=document.getElementsByTagName("*");
          for (i=0;i<elemente.length;i++)
          {
            if (elemente[i].className=='DE_hidden')
            {
            elemente[i].className='DE';
            }
            if (elemente[i].className=='EN')
            {
            elemente[i].className='EN_hidden';
            }
          }
        }
      }

      //-->
      </SCRIPT>


Entsprechend muss in der CSS-Datei folgendes stehen:

Code: Alles auswählen

.DE {
display: inline;
}

.DE_hidden {
display: none;
}

.EN {
display: inline;
}

.EN_hidden {
display: none;
}

Man muss dann beim Aufbauen der Seite einmal eine der beiden Funktionen aufrufen, sonst zeigts natürlich DE und EN an ...

das geht z. B. so:

Code: Alles auswählen

<body background="../_data/bodybg.gif" onload="DeutscheSprache();">

Gruß
Christian[/code]

Edit: Korrektur Code
Zuletzt geändert von krishu am 05.08.2006 10:10, insgesamt 1-mal geändert.
Ich habe keine Ahnung. Leider.
krishu
ConPresso-User
Beiträge: 82
Registriert: 15.12.2005 09:51
Kontaktdaten:

Beitrag von krishu »

Ha, fiese Falle:

natürlich ist so jede neu geladene Seite erstmal DE ... der Nutzer soll ja aber nicht ständig umschalten müssen. Muss ich mich jetzt notwendigerweise mit Cookies etc. auseinandersetzen oder kann man das auch anders lösen??

Gruß
Christian
Ich habe keine Ahnung. Leider.
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7369
Registriert: 01.01.1970 01:00
Hat sich bedankt: 112 Mal
Danksagung erhalten: 936 Mal
Kontaktdaten:

Beitrag von MarkusR »

Cookies sind nicht verkehrt... man kann aber auch erst mal die verwendete Browsersprache checken...

Code: Alles auswählen

<?php
if (getenv('HTTP_ACCEPT_LANGUAGE') != "de")  {
	...
}
?> 
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Antworten