Mehrsprachigkeit, das leidige Thema und noch immer kein Weg

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Mo 28. Feb 2005, 12:50

ach ja das selbe verhalten tritt auf wenn man sich changeclient beim ersten aufruf bedient...

hmm...

der ablauf ist in der front_content.php sowieso etwas seltsam...
client und lang werden erst dann registriert wenn die werte client und lang nicht gesetzt sind...

ganz korrekt wäre es die werte zu registrieren wenn sie in der session nicht registriert sind !
und registriert werden müssen beide werte !

da ist ja noch ein netter bug vorhanden im sql statement... -> wenn load_lang nicht gesetzt ist, liefert das sql statement kein ergebnis -> auch nicht schlecht...

ich würd den teil in der front_content.php wie folgt definieren... (ist jetzt nicht von mir getestet)

Code: Alles auswählen

// Change language
if (isset($changelang)) $lang = $changelang;

// Change client
if (isset($changeclient)){
    $client = $changeclient;
    unset($lang);
}

// 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");
offener punkt bleibt aber noch immer das mit der weiterleitung...
*** make your own tools (wishlist :: thx)

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Mo 28. Feb 2005, 16:15

Dachte ich es mir doch...
if (isset($changelang)) {
$lang = $changelang;
$sess->register("lang");
}
Und ich war soooo nah dran... Ich habe $sess->register("lang") vor $lang = $changelang gesetzt, da der folgende Code auch irgendwie Murx war (und ich dahinter eine Absicht vermutet habe)...

Wie immer: Danke emergence.

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: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Mo 28. Feb 2005, 17:48

...und funktioniert das nun wie es soll ?
HerrB hat geschrieben:Und ich war soooo nah dran... Ich habe $sess->register("lang") vor $lang = $changelang gesetzt, da der folgende Code auch irgendwie Murx war (und ich dahinter eine Absicht vermutet habe)...
ähm, nicht ganz...
das register hat nur den sinn und zweck einen variablen namen zum sichern vorzumerken... man könnte das

Code: Alles auswählen

if (!$sess->is_registered("lang") ) $sess->register("lang"); 
if (!$sess->is_registered("client") ) $sess->register("client");
auch an den beginn des code snippets setzen... es ist an sich egal...
wichtig ist eigentlich nur das es einmal zur sicherung vorgemerkt wird...

erst bei einem page_close werden diese variablen gesichert...
(ach ja $sess->freeze(); würde das selbe machen...
ein $sess->thaw(); würde die gesicherten variablen erneut initialisieren...)
*** make your own tools (wishlist :: thx)

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Mo 28. Feb 2005, 18:09

...und funktioniert das nun wie es soll ?
Das müssen Halchteranerin und JSommer testen.
auch an den beginn des code snippets setzen... es ist an sich egal... wichtig ist eigentlich nur das es einmal zur sicherung vorgemerkt wird...
Dann dürfte es nicht gehen, denn so sah mein Lösungsvorschlag aus, der keine Änderung brachte:

Code: Alles auswählen

if (isset($changelang)) {
$sess->register("lang");
$lang = $changelang;
}
Aber vielleicht lag der Fehler im Rest...

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: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Mo 28. Feb 2005, 18:14

Dann dürfte es nicht gehen, denn so sah mein Lösungsvorschlag aus, der keine Änderung brachte
ähm glaub ich nicht... aber warten wir mal ab was die beiden tester mit den geänderten code zeilen nun sagen...
*** make your own tools (wishlist :: thx)

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

Beitrag von Halchteranerin » Mo 28. Feb 2005, 20:19

sorry, bin erst vorhin nach Hause gekommen (na ja, gegessen habe ich auch schon inzwischen :) ) ... Ich teste das mal eben und melde mich wieder

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

Beitrag von Halchteranerin » Mo 28. Feb 2005, 20:21

emergence, sehe ich das richtig, dass der Teil ab

Code: Alles auswählen

if (isset($username))
{
  $auth->login_if(true);
}
bestehen bleibt und die beiden Zeilen

Code: Alles auswählen

if (!$sess->is_registered("lang") ) $sess->register("lang");
if (!$sess->is_registered("client") ) $sess->register("client");
neu dazu gekommen sind?

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

Beitrag von Halchteranerin » Mo 28. Feb 2005, 20:45

Eines wollte ich noch sagen:
emergence hat geschrieben: ähm für mich ist der fehler logisch...

erste annahme ist korrekt, wenn zu aller erst changelang gesetzt wird
wird lang nicht in der session registriert...
Ich rufe aber von der statischen Seite "neuerdings" (=seit einigen Tagen) mit lang und changelang gleichzeitig die einzelnen (Start)Seiten auf, muesste da nicht auch gleich lang gesetzt sein? Oder liegt es daran, dass die statische Seite nicht zu Contenido gehoert? Aber changelang funktioniert ja auch beim ersten Aufruf ...

stephanwilm
Beiträge: 44
Registriert: Mo 8. Nov 2004, 17:44
Kontaktdaten:

Beitrag von stephanwilm » Mo 28. Feb 2005, 20:50

Hallo Zusammen,

hatte das gleiche Prob!

Ich habe in den config.php's der jeweiligen Mandanten die zugehörige Sprache eingetragen. Danach im Link in zu den jeweiligen Verzeichnissen (z.B. cms/en) zusätzlich den Parameter "changelang=x" mit übergeben und anschliessend die Tabelle con_code geleert und die Cookie's gelöscht.

Es funzt in allen Browsern ohne Fehlerchen *freu*

Viele Grüsse

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

Beitrag von Halchteranerin » Mo 28. Feb 2005, 20:57

Hallo Stefan,

das Problem bei mir ist, dass ich alles innerhalb eines Mandanten habe, ich habe nicht fuer jede Sprache einen anderen Mandanten angelegt.
In welcher Form hast du denn die Sprache eingetragen? Bei mir steht ja auch so etwas wie

Code: Alles auswählen

/* Required */
$load_lang = "7";
$load_client = "8";
drin ...

Gruss
Christa

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

Beitrag von JSommer » Mo 28. Feb 2005, 21:02

Also Leute, die Mandantenversion ist ja die "Faule Eier Version" :-) Wir wollen aber hier zur wirklichen Mehrsprachigkeit des Systems führen: Daher mein Test bislang:

Es funkt. Habe die front_content.php auf walterco.de/so/cms wie folgt gemodded:

Code: Alles auswählen

// Change language 
if (isset($changelang)) $lang = $changelang; 

// Change client 
if (isset($changeclient)){ 
    $client = $changeclient; 
    unset($lang); 
} 

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

if (isset($username))
{
  $auth->login_if(true);
}

header("Content-Type: text/html; charset={$encoding[$lang]}");


if (isset($logout))
{
  $auth->logout(true);
  $auth->unauth(true);
  $auth->auth["uname"] = "nobody";
}
Ich kann den Fehler nun nichtmehr reproduzieren - und ihr? :)

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

Beitrag von Halchteranerin » Mo 28. Feb 2005, 21:19

JSommer hat geschrieben:Also Leute, die Mandantenversion ist ja die "Faule Eier Version" :-) Wir wollen aber hier zur wirklichen Mehrsprachigkeit des Systems führen:
Du sagst es. :lol:

Woher hast du denn das?
JSommer hat geschrieben:header("Content-Type: text/html; charset={$encoding[$lang]}");
Ich hab's bei mir nicht gehabt, in emergences Beitraegen sehe ich das auch irgendwie nicht. Egal, ich habe es bei mir trotzdem eingebaut ...

Aber entweder habe ich noch einen Fehler drin, oder es funktioniert bei mir tatsaechlich immer noch nicht. :cry: :roll:

Die front_content.php wuerde ich ungerne hier reinpacken, es sind immerhin 623 Zeilen ... emergence, darf ich sie dir als pm oder per Mail schicken? Du weisst ja, worauf es ankommt, und dann koenntest du gucken, ob ich alle Stellen geaendert habe.

stephanwilm
Beiträge: 44
Registriert: Mo 8. Nov 2004, 17:44
Kontaktdaten:

Beitrag von stephanwilm » Mo 28. Feb 2005, 21:26

Wenn's nicht geht, bringt das ganze gecodete nichts:-)

Ich hab die Mandanten auch nicht wirklich angelegt, sondern nur die Verzeichnisse kopiert. Somit liesst er auch nur die Sprache in der config.php aus und das funzt!! Ich hab mich für die Variante entschieden, weil da kein Browser was beeinflussen kann...

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

Beitrag von JSommer » Mo 28. Feb 2005, 22:50

header("Content-Type: text/html; charset={$encoding[$lang]}");
Ist da, weil ich die CVS nutze, die seit letzter Woche mit encodings arbeitet :) oder es zumindest versucht... Taucht der Fehler auf walterco.de bei Dir noch auf?!

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

Beitrag von Halchteranerin » Mo 28. Feb 2005, 22:59

JSommer hat geschrieben:Taucht der Fehler auf walterco.de bei Dir noch auf?!
Watt weiss ich? Ich habe natuerlich meine Seiten getestet. :P Ich gucke mal bei dir auch ...

Gesperrt