Andere Sprache - anderes Template???

Fragen zur Installation von CONTENIDO 4.9? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
thilo
Beiträge: 73
Registriert: Mo 22. Mär 2004, 13:41
Kontaktdaten:

Andere Sprache - anderes Template???

Beitrag von thilo » Di 24. Mär 2015, 14:14

Hallo zusammen,

ich stehe mal wieder vor einem (kleinen??) Problem:

Ich habe eine Webseite in deutsch und in englisch erstellt - habe alle Artikel in englisch synchronisiert.
Wenn ich jetzt in der englischen Version ein anderes Template verwenden möchte wie in der deutschen, dann wird dieses Template auch in der deutschen Version geändert.

Ich habe aber im Layout einige fixe Textblöcke stehen - Übersetzung geht also nur über ein anderes Template.

Wie kann ich das lösen? Ich hätte gerne in der deutschen Version das Template "Standard" und in der englischen das Template "Standard englisch" - ich steh aufm Schlauch.....

Danke für eure Hilfe ;-)
LG
Thilo

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Andere Sprache - anderes Template???

Beitrag von Faar » Di 24. Mär 2015, 16:44

thilo hat geschrieben:Wenn ich jetzt in der englischen Version ein anderes Template verwenden möchte wie in der deutschen, dann wird dieses Template auch in der deutschen Version geändert.
Das ist soweit noch richtig. 8)
Ich habe aber im Layout einige fixe Textblöcke stehen - Übersetzung geht also nur über ein anderes Template.
Dann wurde Contenido mit der Mehrsprachigkeit nicht richtig verstanden.
Das wird damit dann ja ausgehebelt.
Wie kann ich das lösen?
Ein kleines Modul machen, das je nach eingestellter Sprache einen anderen Text aus gibt oder einbindet.
Ich hätte gerne in der deutschen Version das Template "Standard" und in der englischen das Template "Standard englisch" - ich steh aufm Schlauch.....
Das ist ganz falsch.
Ein Modul sollte nur einmal vorkommen pro Sprache und ein Modul-Template auch.
Alles was sprachlich-inhaltlich relevant ist, wird vom Modul in das Template geschrieben, über z.B. i18n('text').
In der Modulübersetzung wird dann dieser Text in die andere Sprache übersetzt, z.b. indem man im Backend in die andere Sprache wechselt.
Das Template selbst enthält nur HTML und im Zweifel noch CSS, aber keine Inhalte.

Wenn man Eigenkonstruktionen von Templates hat, muss man das in einem kleinen Modul in der Art behandeln:

Code: Alles auswählen

if($lang = 2){
   echo $text2;
}else{
   echo $text1;
}
Das ist jetzt vielleicht nicht der korrekte Code für 4.9.x aber so in etwa kann es funktionieren.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

thilo
Beiträge: 73
Registriert: Mo 22. Mär 2004, 13:41
Kontaktdaten:

Re: Andere Sprache - anderes Template???

Beitrag von thilo » Mi 25. Mär 2015, 09:46

Hallo Faar,

danke für deine ausführliche Erklärung.
Aber ich fürchte da bin ich zu wenig Programmierer und zu sehr "Gestalter" um dir vollumfänglich folgen zu können.

Ich habe eine Webseite, die im Fussbereich einen kurzen Text enthält. Der ist auf sämtlichen Seiten identisch. Da ich diesen nicht auf jeder einzelnen Seite manuell einbinden wollte, habe ich ihn fix ins Layout geschrieben.

Nur muss er natürlich dann in der englischen Version übersetzt werden.

Die Lösung mit der Variablen klingt logisch. Allerdings reichen hier meine Fähigkeiten nicht aus, das funktionierend umzusetzen. Derzeit verwende ich für diesen Text ja kein Modul, in dem ich eine Variable für die Sprache festlegen könnte. Wenn ich ein Modul "content_text" verwenden würde, dann müsste ich den Text ja doch wieder auf sämtlichen Seiten von Hand einsetzen ?!?

Ich bräuchte also ein Modul, in dem der deutsche Text fix drinsteht - und dafür dann eine Modulübersetzung oder?!?
Wie müsste denn so ein Modul aussehen?

Zuschauer
Beiträge: 141
Registriert: Do 5. Dez 2013, 08:57
Kontaktdaten:

Re: Andere Sprache - anderes Template???

Beitrag von Zuschauer » Mi 25. Mär 2015, 11:26

Hallo thilo,

in Contenido 4.8 geht das wie folgt:

Code: Alles auswählen

<?php echo mi18n("Dies ist der übersetzbare Text der auf allen Seiten erscheint"); ?>
Ich denke mal, das sollte in Contenido 4.9 noch genauso funktionieren.

Gruß
Zuschauer

thilo
Beiträge: 73
Registriert: Mo 22. Mär 2004, 13:41
Kontaktdaten:

Re: Andere Sprache - anderes Template???

Beitrag von thilo » Mi 25. Mär 2015, 11:54

Hallo Zuschauer,

das klappt perfekt mit einem kurzen Text. Also wenn ich reinschreibe "Dies ist ein Text der übersetzt werden soll" dann haut das fehlerfrei hin.

Sobald ich einen längeren Text über copy & paste einfüge, steht der Text zwar auch drin, im Frontend wird aber vor dem Text die Zeile "Module Translation not found:" ausgegeben und danach dann der Text.

Mache ich da was falsch oder macht Contenido nen Fehler?

Zuschauer
Beiträge: 141
Registriert: Do 5. Dez 2013, 08:57
Kontaktdaten:

Re: Andere Sprache - anderes Template???

Beitrag von Zuschauer » Mi 25. Mär 2015, 11:56

Ach ja, in Contenido 4.9 musst du unbedingt für jede Sprache eine Übersetzung eingeben.
Du kannst also im Modul auch einfach nur einen kurzen Platzhalter einfügen und den richtigen Text dann in der Übersetzung.

Gruß
Zuschauer

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Andere Sprache - anderes Template???

Beitrag von Faar » Do 26. Mär 2015, 13:31

Hallo Thilo,

Zuschauer hat eigentlich schon alles soweit vollständig erklärt.
Bis auf eine Anmerkung noch, zu der Ansicht auf jeder Seite:
Wenn man diesen kleinen Code in ein neues Modul packt, hat man den Vorteil, dass man dieses Modul in einem Template (Vorlage) eintragen kann.
Da man viele Templates entwerfen kann, kann man auch Templates ohne dieses Modul zusammenstellen und hat somit eine erhöhte Flexibilität bezüglich der Verwendung.
Alles was man dann noch braucht, das ist ein Container an der Stelle im Layout, wo bisher der Text stand.
Dort wird im Template dann das Modul eingetragen.

VG,
Faar
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

thilo
Beiträge: 73
Registriert: Mo 22. Mär 2004, 13:41
Kontaktdaten:

Re: Andere Sprache - anderes Template???

Beitrag von thilo » Do 26. Mär 2015, 15:03

Danke Faar und Zuschauer,

ich wäre auf diese Lösung nie gekommen - sie ist aber doch wesentlich komfortabler und auch logischer als meine "Variante".
Und nach einigem Basteln hab ichs nun auch hinbekommen.

An alle die diese Lösung nachbasteln: es gibt offenbar Probleme, wenn man größere Textblöcke per Copy & Paste in das Übersetzungsfeld kopiert und einfach auf den grünen Haken klickt. Bei mir hats geholfen, das komplette Modul erstmal mit einem kurzen Test-Text (manuell getippt) anzulegen, zu übersetzen und zu testen. Erst dann habe ich den Originaltext reinkopiert. Trotz Plain-Text-Editor wollte Copy & Paste auch nach dem 20. Neuanlegen des Moduls nicht klappen....

Jedenfalls vielen Dank für eure Hilfe !!! Hat super geklappt und ich habs sogar begriffen ;-)

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Andere Sprache - anderes Template???

Beitrag von Faar » Do 26. Mär 2015, 16:55

Wenn es zu groß wird, ist der mi18n() Ansatz nicht mehr der beste Weg, da würde ich dann doch mein oben genannter Ansatz mit der Sprachauswahl if($lang=1) nehmen, und fertige Textbausteine einfügen. Du kannst die ja aus dem Upload-Verzeichnis verlinken, z.B. mittels include().
Dann wäre der Inhalt über die Dateiverwaltung veränderbar.
Aber Achtung. hier wären Sicherheits-Filter sinnvoll, damit niemand über das Upload-Verzeichnis einen Schadcode einschleusen kann.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Oldperl
Beiträge: 4251
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Andere Sprache - anderes Template???

Beitrag von Oldperl » Do 26. Mär 2015, 20:17

Bei großen Texten bietet sich die Verwendung von sprachabhängigen Templates wohl eher an. Zum einen sind diese direkt beim Modul vorgehalten und man umgeht die Probleme bei Upload-Dateien. Je nach Sprache nutzt das Modul ein anderes Template, bei nicht Vorhandensein ein default-Template.
Ein weiterer Vorteil, man kann sogar HTML-Tags nutzen in Templates, was sich in der mi18n()-Funktion je nach Tag schwierig gestaltet.

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

MVision
Beiträge: 19
Registriert: Di 15. Okt 2013, 15:38
Kontaktdaten:

Re: Andere Sprache - anderes Template???

Beitrag von MVision » Do 2. Apr 2015, 10:14

Ich habe ein etwas ähnliches Problem - nur geht es bei mir nicht um einen Text, den ich übersetzen will. Es soll jeweils pro Sprache eine andere Datei geladen werden, die später per PHP weiter "verarbeitet" wird.

Ich habe also ein Modul erstellt und versuche jetzt, mit diesem Codeschnipsel

Code: Alles auswählen

if($lang = 2){
   echo $text2;
}else{
   echo $text1;
}
die verschiedenen Sprachen anzusprechen. Das sieht bei mir folgendermaßen aus:

Code: Alles auswählen

	if ($lang = 1) {
$quote = file("./upload/_inhalte/quotes.txt");
	} elseif ($lang = 2) {
$quote = file("./upload/_inhalte/quotes2.txt");
	} else {
$quote = file("./upload/_inhalte/quotes3.txt");
	}
Trotzdem wird immer nur die erste Datei geladen.

Dann ist mir aufgefallen: Müsste es nicht sogar ($lang == 1) heißen? Mit = weise ich doch zu und mit == "vergleiche" ich, oder? Aber wenn ich das eingebe, zeigt er mir nur die dritte Datei an.

Ich kenne mich leider mit PHP noch nicht so wirklich gut aus, kann mir da jemand weiterhelfen?

Vielen Dank schon mal.
LG
Miriam

McHubi
Beiträge: 1209
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Andere Sprache - anderes Template???

Beitrag von McHubi » Do 2. Apr 2015, 11:14

if($lang = 2){
Mach da mal überall ein doppeltes == draus. Sonst vergleichst Du nicht den Inhalt der Variablen sondern weist ihr den Wert zu - wie Du geschrieben hast. Denn damit ist die Bedingung automatisch erfüllt und else kommt niemals zum Tragen...
:arrow: http://php.net/manual/de/control-structures.elseif.php
Wenn das nicht hilft, setz mal den zu vergleichenden Wert in "". Evtl. hapert es hier dran: http://php.net/manual/de/language.types ... ggling.php (String vs. Zahl) - auch wenn es eigentlich so funktionieren sollte...
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

MVision
Beiträge: 19
Registriert: Di 15. Okt 2013, 15:38
Kontaktdaten:

Re: Andere Sprache - anderes Template???

Beitrag von MVision » Do 2. Apr 2015, 11:51

Vielen Dank für die Tips.

Das doppelte == habe ich eingesetzt und auch mal die "" ausprobiert. In beiden Fällen wird mir in allen Sprachen das quotes3 ausgegeben.

Kann man denn irgendwie herausfinden, ob die Variable $lang überhaupt das richtige ausgibt? Ich hatte es einfach mit

Code: Alles auswählen

echo $lang;
probiert. Da wird dann aber nichts angezeigt.

Muss ich das $lang vorher denn irgendwie definieren? Ich dachte halt, die Variable steht einfach zur Verfügung, aber vielleicht ist das gar nicht der Fall...

MVision
Beiträge: 19
Registriert: Di 15. Okt 2013, 15:38
Kontaktdaten:

Re: Andere Sprache - anderes Template???

Beitrag von MVision » Do 2. Apr 2015, 14:00

Okay, ich habe noch ein wenig rumprobiert und es funktioniert nun alles.

Es lag daran, dass ich eine function eingebaut hatte (den gesamten PHP-Code für das Modul habe ich von jemandem bekommen) und innerhalb dieser function ließ sich die Variable $lang nicht aufrufen.

Wenn ich alles ohne die function baue, läuft es super. Wenn ich jetzt noch mehr lerne über PHP, werde ich hoffentlich noch verstehen, warum im Modul in diesem Fall keine function benutzt werden sollte... :wink:

Trotzdem danke für die Hilfe! :)

McHubi
Beiträge: 1209
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Andere Sprache - anderes Template???

Beitrag von McHubi » Do 2. Apr 2015, 14:53

Gerne...
innerhalb dieser function ließ sich die Variable $lang nicht aufrufen
Dann ist auch klar, dass immer nur das letzte else zum Tragen kommt wenn vorher korrekt == gesetzt wurde. Du kannst den Wert von $lang - der grundsätzlich immer zur Verfügung steht - auch beim Aufruf an die Function übergeben. Aber wenn's jetzt funktioniert, passt's ja... :)
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

Antworten