Mehrsprachigkeit, das leidige Thema und noch immer kein Weg
-
- Beiträge: 5478
- Registriert: Di 2. Mär 2004, 21:11
- Wohnort: Halchter, wo sonst? ;-)
- Kontaktdaten:
@Halchteranerin: Also bei mir funktionieren Deine Seiten, ich kann keinen Fehler mehr feststellen.
Aus den Links
Gruß
HerrB
Aus den Links
können ansonsten client und lang entfallen (client ergibt sich aus dem Verzeichnis und was besseres als load_client jibbet wohl nich'). Ist der Parameter changelang vorhanden, überschreibt er lang.
Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!
Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
mein code snippet ersetzt in der 4.4.4 & in der 4.4.5 (front_content.php)
folgendes (sowohl bei allen mandanten als auch bei external/frontend und im snapshot bei external/backendedit)
im letzten snapshot ist das ebenso ident vorhanden...
soweit ich das jetzt gesehen habe dürfte es funktionieren...
anscheinend ist die funktionsweise noch nicht 100%ig klar...
sollte die seite beim ersten aufruf ohne lang oder changelang aufgerufen werden wird der gesetzte wert $load_lang verwendet um $lang in der session zu speichern...
beim ersten aufruf der seite mit $lang wird genau diese sprache geladen und der wert wird in der session gespeichert.
beim aufruf mit $changelang wird dieser wert als $lang gesetzt und gespeichert.
zusätzlich $changelang ist höherwertig als $lang...
ein sprachwechsel auf eine andere sprache ist nach dem ersten aufruf nur mit changelang möglich...
nur durch angabe von $lang ändert sich der in der session gesetzte wert für $lang nicht mehr..
selbe gilt für $client und $changeclient
folgendes (sowohl bei allen mandanten als auch bei external/frontend und im snapshot bei external/backendedit)
Code: Alles auswählen
// Sprache wechseln
if (isset($changelang)) $lang = $changelang;
// Client wechseln
if (isset($changeclient)){
$client = $changeclient;
unset($lang);
}
// Client initialisieren
if (!isset($client)) {
$sess->register("client");
//load_client defined in frontend/config.php
$client = $load_client;
}
// Initialize language
if (!isset($lang)) {
$sess->register("lang");
//if is an entry load_lang in frontend/config.php use it, else use the first language of this client
if(isset($load_lang)){
//load_client is set in frontend/config.php
$lang = $load_lang;
}else{
$sql = "SELECT
A.idlang
FROM
".$cfg["tab"]["clients"]." AS A,
".$cfg["tab"]["lang"]." AS B
WHERE
idclient='$client' AND
A.idlang=B.idlang AND
B.active='1'
LIMIT
0,1";
$db->query($sql);
$db->next_record();
$lang = $db->f("idlang");
}
}
soweit ich das jetzt gesehen habe dürfte es funktionieren...
anscheinend ist die funktionsweise noch nicht 100%ig klar...
sollte die seite beim ersten aufruf ohne lang oder changelang aufgerufen werden wird der gesetzte wert $load_lang verwendet um $lang in der session zu speichern...
beim ersten aufruf der seite mit $lang wird genau diese sprache geladen und der wert wird in der session gespeichert.
beim aufruf mit $changelang wird dieser wert als $lang gesetzt und gespeichert.
zusätzlich $changelang ist höherwertig als $lang...
ein sprachwechsel auf eine andere sprache ist nach dem ersten aufruf nur mit changelang möglich...
nur durch angabe von $lang ändert sich der in der session gesetzte wert für $lang nicht mehr..
selbe gilt für $client und $changeclient
*** make your own tools (wishlist :: thx)
-
- Beiträge: 5478
- Registriert: Di 2. Mär 2004, 21:11
- Wohnort: Halchter, wo sonst? ;-)
- Kontaktdaten:
Hallo,
HerrB, anfangs dachte ich, du wolltest mich nur aergern (als du schriebst, du kannst keinen Fehler feststellen, meine ich.
Dann habe ich aber nochmal getestet. Ergebnis: unter http://www.christa-und-oliver.de/violeta, also Originalseite, funktioniert's (danke an alle Beteiligten
), unter http://www.vila-violeta.de.vu, wo die Originalseite in einem Frameset eingebunden wird, funktioniert's leider immer noch nicht.
Dafuer gibt's aber wohl keine Loesung, oder?
Gruss
Christa
HerrB, anfangs dachte ich, du wolltest mich nur aergern (als du schriebst, du kannst keinen Fehler feststellen, meine ich.


Dafuer gibt's aber wohl keine Loesung, oder?
Gruss
Christa
Ja, so einen Effekt hatte ich während der Tests (mittendrin) auch, am Schluss nicht mehr.
Ich gucke es mir nochmal an, aber ich vermute nein - jetzt mal ins Blaue geraten, nehme ich an, dass er die Sprache nicht speichert, da die Domain, für die er den Cookie anlegt, später nicht mehr mit der Domain der Seite übereinstimmt (genau genommen speichert er nicht nicht die Sprache, sondern findet seine Session nicht wieder).
Ich guck's mir nochmal an.
Gruß
HerrB
Ich gucke es mir nochmal an, aber ich vermute nein - jetzt mal ins Blaue geraten, nehme ich an, dass er die Sprache nicht speichert, da die Domain, für die er den Cookie anlegt, später nicht mehr mit der Domain der Seite übereinstimmt (genau genommen speichert er nicht nicht die Sprache, sondern findet seine Session nicht wieder).
Ich guck's mir nochmal an.
Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!
Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
Jetzt wird es lustig.
a) Bei walterco scheint es immer zu gehen
b) Bei http://www.christa-und-oliver.de/violeta scheint es immer zu gehen
c) http://www.vila-violeta.de.vu (ist ein Frame, in den die eigentlichen Seiten geladen werden) funktioniert mit Firefox, jedoch tritt mit dem IE6 das bereits bekannte Problem auf
Wird bei c) der IE verwendet, funktioniert auch nicht das Umschalten über die Flaggen. Ich nehme an, dass das ein Sicherheitsfeature des IE ist und er tatsächlich seine Session nicht wiederfindet.
Da fällt mir gerade nix ein...
Es gab da mal diese base-Angabe in HTML, vielleicht hilft das was.
Gruß
HerrB
a) Bei walterco scheint es immer zu gehen
b) Bei http://www.christa-und-oliver.de/violeta scheint es immer zu gehen
c) http://www.vila-violeta.de.vu (ist ein Frame, in den die eigentlichen Seiten geladen werden) funktioniert mit Firefox, jedoch tritt mit dem IE6 das bereits bekannte Problem auf
Wird bei c) der IE verwendet, funktioniert auch nicht das Umschalten über die Flaggen. Ich nehme an, dass das ein Sicherheitsfeature des IE ist und er tatsächlich seine Session nicht wiederfindet.
Da fällt mir gerade nix ein...
Es gab da mal diese base-Angabe in HTML, vielleicht hilft das was.
Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!
Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
-
- Beiträge: 5478
- Registriert: Di 2. Mär 2004, 21:11
- Wohnort: Halchter, wo sonst? ;-)
- Kontaktdaten:
Stimmt, jetzt wird's mir bewusst, dass ich in letzter Zeit nur mit IE getestet habe. Grund: ich benutze Firefox zum Surfen, und um zu vermeiden, dass irgendwas aus dem Cache oder sonstwoher genommen wird, oder ein vorheriges Cookie benutzt wird, habe ich immer zum Testen den IE gestartet.HerrB hat geschrieben:c) http://www.vila-violeta.de.vu (ist ein Frame, in den die eigentlichen Seiten geladen werden) funktioniert mit Firefox, jedoch tritt mit dem IE6 das bereits bekannte Problem auf
Hmm, ich habe das gerade getestet, bei mir funktioniert das ueber die Flaggen. Einziges Problem ist das von Anfang, wenn ich von der Startseite aus eine Sprache anklicke und anschliessend einen Menuepunkt (in der angeklickten Sprache) auswaehle.HerrB hat geschrieben:Wird bei c) der IE verwendet, funktioniert auch nicht das Umschalten über die Flaggen.
Ob ich auf der statischen Seite einen 5sprachigen Hinweis (eigentlich reichen 4 Sprachen, denn die erste funktioniert immer


Gruss
Christa
Wobei ich vorschlagen würde, die Zeile
unter
zu setzen.
Hintergrund: Sind Sprache und Client für den Nicht-Standardfall über changelang und changeclient angegeben, wird die Angabe zu changelang ohne diese Änderung schlicht ignoriert.
Enthält nun die Mandanten-config.php im entsprechenden Verzeichnis nur den Standardwert für die Sprache, entsteht Murks: $client wird auf $changeclient gesetzt, aber $lang auf den Wert aus der config.php (der ja für den Standardclient und damit nie für den i.A. vom Standard abweichenden und daher angegegeben Client gilt) gesetzt.
Mit der Änderung werden beide Angaben beachtet, bei Angabe von nur $changelang ändert sich nichts, bei Angaben von nur $changeclient tritt das gewohnte Verhalten auf (d.h. es wird versucht, die Sprache aus der config.php zu verwenden). Nur, wenn $changeclient definiert und $load_lang nicht definiert sind, wird die DB zu Rate gezogen.
Gruß
HerrB
Code: Alles auswählen
// Sprache wechseln
if (isset($changelang)) $lang = $changelang;
Code: Alles auswählen
// Client wechseln
if (isset($changeclient)){
$client = $changeclient;
unset($lang);
}
Hintergrund: Sind Sprache und Client für den Nicht-Standardfall über changelang und changeclient angegeben, wird die Angabe zu changelang ohne diese Änderung schlicht ignoriert.
Enthält nun die Mandanten-config.php im entsprechenden Verzeichnis nur den Standardwert für die Sprache, entsteht Murks: $client wird auf $changeclient gesetzt, aber $lang auf den Wert aus der config.php (der ja für den Standardclient und damit nie für den i.A. vom Standard abweichenden und daher angegegeben Client gilt) gesetzt.
Mit der Änderung werden beide Angaben beachtet, bei Angabe von nur $changelang ändert sich nichts, bei Angaben von nur $changeclient tritt das gewohnte Verhalten auf (d.h. es wird versucht, die Sprache aus der config.php zu verwenden). Nur, wenn $changeclient definiert und $load_lang nicht definiert sind, wird die DB zu Rate gezogen.
Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!
Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
@HerrB
...kein schlechter punkt
ich nehm mal den code von aktuellen snapshot 2005-04-29
und ersetze ihn durch das hier...
im prinzip wird zusätzlich zum mandanten wechsel ein unset($load_lang);
ausgeführt...
sollte nun changelang nicht gesetzt sein wird die erste verfügbare sprache des neuen mandanten aus der db selektiert... (da $load_lang nicht mehr gesetzt ist)
@timo
$sess->register("lang");
$sess->register("client");
könnte man noch entfernen...
...kein schlechter punkt
ich nehm mal den code von aktuellen snapshot 2005-04-29
Code: Alles auswählen
// Sprache wechseln
if (isset($changelang)) $lang = $changelang;
// Client wechseln
if (isset($changeclient)){
$client = $changeclient;
unset($lang);
}
// Client initialisieren
if (!isset($client)) {
$sess->register("client");
//load_client defined in frontend/config.php
$client = $load_client;
}
// Initialize language
if (!isset($lang)) {
$sess->register("lang");
//if is an entry load_lang in frontend/config.php use it, else use the first language of this client
if(isset($load_lang)){
//load_client is set in frontend/config.php
$lang = $load_lang;
}else{
$sql = "SELECT
A.idlang
FROM
".$cfg["tab"]["clients"]." AS A,
".$cfg["tab"]["lang"]." AS B
WHERE
idclient='$client' AND
A.idlang=B.idlang AND
B.active='1'
LIMIT
0,1";
$db->query($sql);
$db->next_record();
$lang = $db->f("idlang");
}
}
if (!$sess->is_registered("lang") ) $sess->register("lang");
if (!$sess->is_registered("client") ) $sess->register("client");
Code: Alles auswählen
// Change client
if (isset($changeclient)){
$client = $changeclient;
unset($lang);
unset($load_lang);
}
// Change language
if (isset($changelang)) $lang = $changelang;
// Initialize client
if (!isset($client)) {
//load_client defined in frontend/config.php
$client = $load_client;
}
// Initialize language
if (!isset($lang)) {
//if there is an entry load_lang in frontend/config.php use it, else use the first language of this client
if(isset($load_lang)){
//load_client is set in frontend/config.php
$lang = $load_lang;
}else{
$sql = "SELECT
B.idlang
FROM
".$cfg["tab"]["clients_lang"]." AS A,
".$cfg["tab"]["lang"]." AS B
WHERE
A.idclient='$client' AND
A.idlang = B.idlang AND
B.active='1'
LIMIT
0,1";
$db->query($sql);
$db->next_record();
$lang = $db->f("idlang");
}
}
if (!$sess->is_registered("lang") ) $sess->register("lang");
if (!$sess->is_registered("client") ) $sess->register("client");
ausgeführt...
sollte nun changelang nicht gesetzt sein wird die erste verfügbare sprache des neuen mandanten aus der db selektiert... (da $load_lang nicht mehr gesetzt ist)
@timo
$sess->register("lang");
$sess->register("client");
könnte man noch entfernen...
*** make your own tools (wishlist :: thx)