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
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