Mehrsprachigkeit, das leidige Thema und noch immer kein Weg

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin »

bei walterco geht's. Vielleicht ist emergences Loesung auch nur fuer 4.5, ich habe ja 4.4.4 ...
JSommer
Beiträge: 324
Registriert: Fr 5. Sep 2003, 12:32
Wohnort: 192.168.0.11
Kontaktdaten:

Beitrag von JSommer »

Jo, gucke mal bitte :)
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

@Halchteranerin: Also bei mir funktionieren Deine Seiten, ich kann keinen Fehler mehr feststellen.

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
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

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)

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");

    }
}
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
*** make your own tools (wishlist :: thx)
JSommer
Beiträge: 324
Registriert: Fr 5. Sep 2003, 12:32
Wohnort: 192.168.0.11
Kontaktdaten:

Beitrag von JSommer »

Saubere Sache! Danke! Bitte gleich mit in die neue CVS integrieren :)
Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin »

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
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

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
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
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

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
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
Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin »

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
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:Wird bei c) der IE verwendet, funktioniert auch nicht das Umschalten über die Flaggen.
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.

Ob ich auf der statischen Seite einen 5sprachigen Hinweis (eigentlich reichen 4 Sprachen, denn die erste funktioniert immer ;-) ) aufnehmen soll, dass IE-Benutzer zur Not nochmal die jeweilige Landesflagge anklicken muessen, falls ihnen die Sprache fremd vorkommt? :lol:

Gruss
Christa
JSommer
Beiträge: 324
Registriert: Fr 5. Sep 2003, 12:32
Wohnort: 192.168.0.11
Kontaktdaten:

Beitrag von JSommer »

ist dieser bugfix jetzt eigentlich in der aktuellen cvs integriert? :-O
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

Ich habe die letzte Version von emergence mal eingebaut, wäre nett, wenn das jemand am Freitag prüfen konnte ;)
JSommer
Beiträge: 324
Registriert: Fr 5. Sep 2003, 12:32
Wohnort: 192.168.0.11
Kontaktdaten:

Beitrag von JSommer »

werd ich mir anschauen - kommende woche! :)
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Wobei ich vorschlagen würde, die Zeile

Code: Alles auswählen

// Sprache wechseln 
if (isset($changelang)) $lang = $changelang;
unter

Code: Alles auswählen

// Client wechseln 
if (isset($changeclient)){ 
    $client = $changeclient; 
    unset($lang); 
}
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
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
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

@HerrB
...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");
und ersetze ihn durch das hier...

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");
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...
*** make your own tools (wishlist :: thx)
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

emergence hat geschrieben:@timo
$sess->register("lang");
$sess->register("client");

könnte man noch entfernen...
wo?
Gesperrt