Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

problem mit sprachweiche

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
mano_negra
PostRank 9
PostRank 9
Beiträge: 2812
Registriert: 23.07.2009, 15:29
Wohnort: la luna

Beitrag von mano_negra » 11.07.2011, 21:16

ich hab ein problem mit einer sprachweiche und komm da nicht weiter und steh jetzt ziemlich dumm da.
hatte die jahrelang im einsatz und nie ist mir was aufgefallen.
jetzt merkte ich plötzlich im firefox dass nicht mehr auf die andere sprache umgeschalten wurde. aha, denk ich was is das für scheiss, probier den IE und es funktioniert. nochmal FF, cache leeren und funktioniert. aber jetzt funktioniert der IE plötzlich nicht mehr. chrome ausprobiert, funktioniert ein paar mal, dann plötzlich nicht mehr. egal was für browser - manchmal funktionierts, dann plötzlich nicht mehr. dann hilft nur mehr cache leeren oder browser neu starten.

das ist mir ein rätsel und ich weiss nicht wo der fehler liegen könnt oder wo ich zum suchen anfangen soll.

im prinzip funktionierts so (oder sollte so funktionieren):
mit einem link ala ?lang=de wird ein cookie für die sprache gesetzt, ausserdem wird die bevorzugte browsersprache ausgelesen und dann eben auf die passende seite weitergeleitet.

?

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


mano_negra
PostRank 9
PostRank 9
Beiträge: 2812
Registriert: 23.07.2009, 15:29
Wohnort: la luna

Beitrag von mano_negra » 11.07.2011, 22:47

das is echt zum verrückt werden, manchmal kann man ohne probleme 1000mal wechseln und manchmal ist nach 3mal schluss.

hier meine index.php:

Code: Alles auswählen

<?php
$la = $_GET&#91;'la'&#93;;
if &#40;$la!=null&#41;&#123;setcookie&#40;"sprache", $la,time&#40;&#41;+60*60*24*30 ,"/"&#41;;&#125;
if &#40;$la=="de"&#41;&#123;header&#40;"HTTP/1.1 301 Moved Permanently"&#41;;header&#40;"Location&#58; http&#58;//www.meinedomain.com/"&#41;;exit;&#125;
if &#40;$la==null&#41;&#123;
if&#40;$_COOKIE&#91;sprache&#93; == "de"&#41; &#123; $la="de"; &#125;
if&#40;$_COOKIE&#91;sprache&#93; == "en"&#41; &#123; $la="en"; &#125;
&#125;

include_once &#40;'sprache.php'&#41;;

$allowed_langs = array &#40;'de', 'en'&#41;;

$lang = lang_getfrombrowser &#40;$allowed_langs, 'de', $la, false&#41;;

if &#40;$lang=="de"&#41;&#123;include &#40;'de.php'&#41;;&#125;
if &#40;$lang=="en"&#41;&#123;header&#40;"HTTP/1.1 301 Moved Permanently"&#41;;header&#40;"Location&#58; http&#58;//www.meinedomain.com/en/"&#41;;exit;&#125;
?>
de.php ist dabei der deutsche inhalt und die engl. version liegt auf /en/

sprache.php ist ein script das ich so aus dem internet kopiert hab:

Code: Alles auswählen

<?php
// Browsersprache ermitteln
function lang_getfrombrowser &#40;$allowed_languages, $default_language, $lang_variable = null, $strict_mode = true&#41; &#123;
        // $_SERVER&#91;'HTTP_ACCEPT_LANGUAGE'&#93; verwenden, wenn keine Sprachvariable mitgegeben wurde
        if &#40;$lang_variable === null&#41; &#123;
                $lang_variable = $_SERVER&#91;'HTTP_ACCEPT_LANGUAGE'&#93;;
        &#125;

        // wurde irgendwelche Information mitgeschickt?
        if &#40;empty&#40;$lang_variable&#41;&#41; &#123;
                // Nein? => Standardsprache zurückgeben
                return $default_language;
        &#125;

        // Den Header auftrennen
        $accepted_languages = preg_split&#40;'/,\s*/', $lang_variable&#41;;

        // Die Standardwerte einstellen
        $current_lang = $default_language;
        $current_q = 0;

        // Nun alle mitgegebenen Sprachen abarbeiten
        foreach &#40;$accepted_languages as $accepted_language&#41; &#123;
                // Alle Infos über diese Sprache rausholen
                $res = preg_match &#40;'/^&#40;&#91;a-z&#93;&#123;1,8&#125;&#40;?&#58;-&#91;a-z&#93;&#123;1,8&#125;&#41;*&#41;'.
                                   '&#40;?&#58;;\s*q=&#40;0&#40;?&#58;\.&#91;0-9&#93;&#123;1,3&#125;&#41;?|1&#40;?&#58;\.0&#123;1,3&#125;&#41;?&#41;&#41;?$/i', $accepted_language, $matches&#41;;

                // war die Syntax gültig?
                if &#40;!$res&#41; &#123;
                        // Nein? Dann ignorieren
                        continue;
                &#125;
                
                // Sprachcode holen und dann sofort in die Einzelteile trennen
                $lang_code = explode &#40;'-', $matches&#91;1&#93;&#41;;

                // Wurde eine Qualität mitgegeben?
                if &#40;isset&#40;$matches&#91;2&#93;&#41;&#41; &#123;
                        // die Qualität benutzen
                        $lang_quality = &#40;float&#41;$matches&#91;2&#93;;
                &#125; else &#123;
                        // Kompabilitätsmodus&#58; Qualität 1 annehmen
                        $lang_quality = 1.0;
                &#125;

                // Bis der Sprachcode leer ist...
                while &#40;count &#40;$lang_code&#41;&#41; &#123;
                        // mal sehen, ob der Sprachcode angeboten wird
                        if &#40;in_array &#40;strtolower &#40;join &#40;'-', $lang_code&#41;&#41;, $allowed_languages&#41;&#41; &#123;
                                // Qualität anschauen
                                if &#40;$lang_quality > $current_q&#41; &#123;
                                        // diese Sprache verwenden
                                        $current_lang = strtolower &#40;join &#40;'-', $lang_code&#41;&#41;;
                                        $current_q = $lang_quality;
                                        // Hier die innere while-Schleife verlassen
                                        break;
                                &#125;
                        &#125;
                        // Wenn wir im strengen Modus sind, die Sprache nicht versuchen zu minimalisieren
                        if &#40;$strict_mode&#41; &#123;
                                // innere While-Schleife aufbrechen
                                break;
                        &#125;
                        // den rechtesten Teil des Sprachcodes abschneiden
                        array_pop &#40;$lang_code&#41;;
                &#125;
        &#125;

        // die gefundene Sprache zurückgeben
        return $current_lang;
&#125;
?>

3rr0r
PostRank 5
PostRank 5
Beiträge: 219
Registriert: 12.07.2007, 14:32
Wohnort: Pattaya

Beitrag von 3rr0r » 12.07.2011, 02:24

Hallo ...

also das kann man sicher einfacher machen ...

LG .... Martin

Code: Alles auswählen

if &#40;defined&#40;'SPRACHE'&#41;&#41; &#123;$sprachweiche='FEHLER - KONSTANTE BEREITS DEFINIERT';&#125;

if &#40;!defined&#40;'SPRACHE'&#41;&#41; &#123;
if &#40;isset&#40;$_GET&#91;'language'&#93;&#41;&#41; &#123;define&#40;'SPRACHE',$_GET&#91;'language'&#93;&#41;; setcookie&#40;"language", $la,time&#40;&#41;+60*60*24*30 ,"/"&#41;; 
$sprachweiche='parameter';&#125;
&#125; // Sprache als Parameter

if &#40;!defined&#40;'SPRACHE'&#41;&#41; &#123;
if &#40;isset&#40;$_COOKIE&#91;'language'&#93;&#41;&#41; &#123;define&#40;'SPRACHE',$_COOKIE&#91;'language'&#93;&#41;; $sprachweiche='cookie';&#125;
&#125; // Sprache aus Cookie

if &#40;!defined&#40;'SPRACHE'&#41;&#41; &#123;
$sprachweiche='browser';
$temp=strtolower&#40;'__'.$_SERVER&#91;'HTTP_ACCEPT_LANGUAGE'&#93;.'__'&#41;;
        if &#40;strpos&#40;$temp,'de'&#41; > 0&#41; &#123;define&#40;'SPRACHE','DE'&#41;;&#125;
  elseif &#40;strpos&#40;$temp,'sp'&#41; > 0&#41; &#123;define&#40;'SPRACHE','SP'&#41;;&#125;
  elseif &#40;strpos&#40;$temp,'th'&#41; > 0&#41; &#123;define&#40;'SPRACHE','TH'&#41;;&#125;
  else &#123;define&#40;'SPRACHE','EN'&#41;;&#125;
&#125; // Sprache aus Browser

echo '<br>SPRACHE&#58;_'.SPRACHE;
echo '<br>WESHALB&#58;_'.$sprachweiche;
echo '<br>301SENDEN&#58;_';
if &#40;$sprachweiche=='parameter'&#41; &#123;echo 'Y';&#125; else  &#123;echo 'N';&#125;







mano_negra
PostRank 9
PostRank 9
Beiträge: 2812
Registriert: 23.07.2009, 15:29
Wohnort: la luna

Beitrag von mano_negra » 12.07.2011, 13:21

danke, das schau ich mir auch noch an.

mittlerweile hab ich den fehler gefunden. es dürfte nur die letzte zeile sein, wo die startseite auf die engl. seite per 301 weitergeleitet wird. genau dieser 301er ist das problem, weil der browser sich das merkt und dann nicht mehr auf die deutsche seite leitet.
und der fehler ist auch nur aufgetreten, wenn ich zwischen dem umschalten auf die startseite geklickt habe.
ein 302 ist hier das einzig richtige und dann funktionierts auch.

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag