Sprachumschaltung funktioniert nicht zuverlässig

Du hast ein Problem gefunden und weißt nicht genau wo es hinpasst...
Antworten
ericidle
Beiträge: 15
Registriert: Fr 6. Aug 2010, 10:31

Sprachumschaltung funktioniert nicht zuverlässig

Beitrag von ericidle »

Hallo zusammen,

in der aktuellen Version von WEBS klappt die Sprachumschaltung nicht dauerhaft.
In meinem Fall funktionierte es soweit, bis z.B. bei der Anmeldung versucht wurde, ein neues Konto anzulegen.
Da wurde wieder auf deutsch (statt englisch) umgeschaltet.
Im Debugging hat sich bei mir gezeigt, dass die Sprache zwar in der Session gespeichert wurde, aber bei allen Links, die keinen Sprachparameter (oder /en/ bei DirectURL) enthielten, wurde die Sprache sofort wieder auf de zurückgesetzt.
Das Problem ist anscheinend irgendwie noch browserabhängig, beim IE gabs kein Problem, beim FF12 schon.

Der folgende Bugfix legt die Sprachwahl zusätzlich im Cookie ab und setzt die Variablen jedesmal neu. Dazu ist der folgende Ausschnitt in die application_top.php einzufügen, ca. ab Zeile 239, nach dem Abschnitt "Bluegate-URLs".
Damit funktionierts bei mir anstandslos.
Hier der Code:

Code: Alles auswählen

 // Bugfix FF12 $_SESSION['language'] falsch gesetzt 
if (isset ($_COOKIE['cookie_language'])) {
        if ($_COOKIE['cookie_language']!=$_SESSION['language_code']) {
                $_GET['language']=$_COOKIE['cookie_language'];
        }
}

if (isset ($_GET['language'])) {
        xtc_setcookie('cookie_language', $_GET['language'], time() + 60 * 60 * 24 * 30, '/', $current_domain);
        unset($_SESSION['language']);
        unset($_SESSION['language_charset']);
}

// Bugfix Ende
Ob das die optimale Lösung ist, weiss ich nicht.
Vielleicht kann ein Entwickler mal kurz drüberschauen?
Zuletzt geändert von ericidle am Mi 4. Apr 2012, 09:13, insgesamt 1-mal geändert.
Xantiva
Beiträge: 948
Registriert: Mo 10. Mai 2010, 16:26
Shop Version: 1.0.10 [dev]
Kontaktdaten:

Re: Sprachumschaltung funktioniert nicht zuverlässig

Beitrag von Xantiva »

Du meinst wirklich den FF 12? Aktuell (und stable) ist noch der FF 11 ...
Mit dem FF 11 kann ich das im Demo Shop nicht reproduzieren. Kannst Du dan mal dort bitte prüfen? Danke.

Ciao,
Mike
Mein Shop: http://www.basteln-selbermachen.de
ericidle
Beiträge: 15
Registriert: Fr 6. Aug 2010, 10:31

Re: Sprachumschaltung funktioniert nicht zuverlässig

Beitrag von ericidle »

Ja, stimmt natürlich.
Hartnäckiger Tippfehler im Quellcode. FF11 natürlich, hast recht.

Im Demoshop kann ichs nicht nachvollziehen.
Andererseits seh ich grad, dass da DirectURL nicht aktiviert ist.
Kanns vielleicht an dem Zusammenspiel liegen?

Ich hatte mir jeweils Session-ID und die Spracheinstellungen (language-Variablen) per Echo ausgeben lassen.
Nach der Sprach-Umschaltung stand alles brav auf en, und nach dem nächsten Klick wieder de.
Session-ID bleibt dabei aber identisch.
ericidle
Beiträge: 15
Registriert: Fr 6. Aug 2010, 10:31

Re: Sprachumschaltung funktioniert nicht zuverlässig

Beitrag von ericidle »

Der macht mich irre.

Ich lass mir grad in der Website die Cookies anzeigen: Aktueller Wert aus der Spracheinstellung und zu setzender Wert.
FF3.6:
Klick auf de erzeugt in meiner Debug-Ausgabe:
"Cookie: de Setze language auf de"
Klick auf en
"Cookie: de Setze language auf en"
Beim nächsten Klick:
"Cookie: en Setze language auf en"
-> passt also.

FF11:
"Cookie: de Setze language auf de"
Klick auf en
"Cookie: de Setze language auf en"
Beim nächsten Klick:
"Cookie: te Setze language auf en"
"te" wird angezeigt. Kein Tippfehler. Wieso te?
Mit Firebug wird aber als Inhalt "en" angezeigt.
Wieso wird da te ausgegeben? Ist der deppert?
ericidle
Beiträge: 15
Registriert: Fr 6. Aug 2010, 10:31

Re: Sprachumschaltung funktioniert nicht zuverlässig

Beitrag von ericidle »

So, jetzt aber.
DirectURL ist schuld.
Das Problem entsteht dadurch, dass DirectURL versucht, aus dem Request die Sprache abzuleiten und dabei davon ausgeht, dass die URL hinten language=de (oder en) hat.
Zur Spracheinstellung wird aus den letzten beiden Buchstaben die Sprache abgeleitet und der Cookie dann modifiziert.
Im Webs steht halt bei mehrsprachig nicht immer hinten language=.. sondern manchmal was anderes. Und dann sind die lezten beiden Zeichen nicht die Sprache. Daher kam bei mir das "te" (vielleicht war da dann ....bluegate?).

Um die bluegate.phps nicht zu veraendern klappt folgender Workaround in der application_top.php:
ab Zeile 212 (grüner Code kommt dazu)

Code: Alles auswählen

// define defaults for template
$file_template_defaults = 'templates/' . CURRENT_TEMPLATE . '/source/template_defaults.php';
if ( file_exists($file_template_defaults) ) {
        require_once($file_template_defaults);
}

//Bugfix start
[color=#408000]if (!isset($_GET['language'])) {
        $langparam="";
} else {
        $langparam=$_GET['language'];
}[/color]
//Bugfix Ende
if (SEARCH_ENGINE_FRIENDLY == 'directurl') {
    // *********************************************************** //
    // ****************** bluegate Direct URL ******************** //
    // *********************************************************** //
Und danach

Code: Alles auswählen

   // *********************************************************** //
    // ****************** END OF bluegate Direct URL ************* //
    // *********************************************************** //
}


[color=#008000]// Bugfix start  
$availlanguages = array (0=>'de', 1=>'uk');
if ($langparam=="") {
        if (isset ($_COOKIE['cookie_language'])) {
                //echo $_COOKIE['cookie_language'];
                $cookielanguage=$availlanguages[0];
                try {
                        $cookielanguage=$availlanguages[$_COOKIE['cookie_language']];
                } catch (Exception $e) {}
                //$cookielanguage=$availlanguages[0];
                if ($_COOKIE['cookie_language']!=$_SESSION['language_code']) {
                        $_GET['language']=$_COOKIE['cookie_language'];
                }
                if (isset($_SERVER['REQUEST_URI'])) {
                        $requestlanguage=$cookielanguage;
                        foreach ($availlanguages as $languagenr=>$curlanguage) {
                                if (strpos($_SERVER['REQUEST_URI'], '/' . $curlanguage . '/') !==false) {
                                        $requestlanguage=$curlanguage;
                                }
                        }
                        $_GET['language']=$requestlanguage;
                }
        }
} else {
        $_GET['language']=$langparam;
}

if (isset ($_GET['language'])) {
        $languagekurz=$_GET['language'];
        $languagekurznr=0;
        foreach ($availlanguages as $languagenr=>$curlanguage) {
                if ($curlanguage==$languagekurz) {
                        $languagekurznr=$languagenr;
                }
        }
        //time() + 60 * 60 * 24 * 30, '/'
        xtc_setcookie('cookie_language', $languagekurznr, 0 ,'/', $current_domain);
        unset($_SESSION['language']);
        unset($_SESSION['language_charset']);
}

// Bugfix Ende
[/color]

Bei weiteren Sprachen ist die Zeile

Code: Alles auswählen

$availlanguages = array (0=>'de', 1=>'uk');
dann zu erweitern.

Es empfiehlt sich, direkt nach der Umstellung die Cookies zu löschen, wenn dort noch die alten Lanuage-Codes (de, en, uk ...) drin stehen, da sonst php eine Fehlermeldung wirft.

Ich bin mir sicher, das ist nicht die schönste Lösung, aber ich wollte die DirectURL-Skripten nicht ändern.

Jetzt funktionierts auch in Shop des Kunden
Antworten