Ich habe ein kleines Skript in PHP zusammengestellt, das nach den Spracheinstellungen des Browsers sucht und diese auf eine Sprachversion der Seite umleitet (WP multisite),
%Vor%Beim Testen mit Mobile Safari oder Mobile Chrome scheint die Weiterleitung nicht zu funktionieren. Gibt es eine spezielle Ausgabe für die akzeptierte Sprache für mobile Browser, die ich berücksichtigen muss?
Update: Nach etwas mehr Debugging habe ich folgendes herausgefunden:
UPDATE zu meiner vorherigen Antwort
Die HTTP_ACCEPT_LANGUAGE wird über Header gesetzt und gibt für jeden unterschiedliche Werte. In meinem Fall bin ich in Südamerika auf einem Computer-Setup in Englisch, so dass meine lang header Englisch und Spanisch haben Einstellungen mit einer Ausrichtung auf Englisch.
%Vor% In meinem Fall werden alle Geräte korrekt umgeleitet. Meine Vermutung ist, dass etwas in der Logik passiert, die redirect()
und die Session-Var
Umgeht die Umleitungslogik. Probieren Sie den obigen Code aus und löschen Sie alle Cookies und Sitzungen von allen Geräten, so dass Sie die $_SESSION['language']
var haben
während des Tests eingestellt wird nicht die Ergebnisse durcheinander bringen. Lass uns wissen, was an deinem Ende passiert.
Ich zitiere .. "Eine modernere Methode wäre die Verwendung von http_negotiate_language ():"
Hast du das hier überprüft? Verwenden der Servervariablen PHP HTTP_ACCEPT_LANGUAGE
Dies funktioniert auf meinen Desktop-Browsern und mobilen Geräten einwandfrei. Ich hatte auch Session-Probleme nur auf Geräten und meistens war ich darauf angewiesen, dass eine Session-Variable leer war, um die Anforderungen meiner Bedingung zu erfüllen, obwohl die Variable noch existierte, oder es gab einfach keine session_id () instanziiert / p>
? reset löscht die Sitzung.
Es wird auch die Weiterleitung ausgeführt, wenn sich die Sprache geändert hat.
%Vor% Sie sollten uns wirklich Beispiele geben, was der Wert von $_SERVER["HTTP_ACCEPT_LANGUAGE"]
für die drei Fälle ist.
Wie auch immer, beachten Sie bitte, dass dies laut RFC2616 von HTTP / 1.1 ist , die Wahl einer Sprache ist viel komplizierter als nur die zwei ersten Zeichen des Headers.
Jedem Sprachbereich kann ein zugehöriger Qualitätswert zugewiesen werden stellt eine Schätzung der Präferenz des Benutzers für die Sprachen dar spezifiziert durch diesen Bereich. Der Qualitätswert lautet standardmäßig "q = 1". Zum Beispiel,
%Vor%würde bedeuten: "Ich bevorzuge Dänisch, werde aber Englisch und Englisch akzeptieren andere Arten von Englisch. "
Nichts besagt, dass diese Kopfzeilen sortiert sind oder dass die bevorzugte Sprache des Benutzers die erste in der Liste ist. Und die Sprachkonfiguration könnte auch nicht im Browser oder Betriebssystem konfiguriert werden.
Idealerweise müssen Sie, um die beste Sprache auszuwählen, diese Kopfzeile folgendermaßen analysieren:
Sie sollten sich wirklich nicht darauf verlassen, die ersten zwei Zeichen zu erhalten. Sie müssen sich wirklich darauf verlassen, die ganze Zeichenfolge zu überprüfen und zu verstehen, was die beste Sprachauswahl sein sollte. Diese String-Werte haben eine spezifische Bedeutung, und in einem Ihrer Fälle der "Problem" -Strings würden Sie das am besten geeignete Verhalten zeigen, um en
anstelle von sv
anzuzeigen. Sie können natürlich Logik schreiben, um die akzeptierte Sprache zu zerlegen, die Bestandteile zu untersuchen und geeignete Maßnahmen zu ergreifen, aber Sie könnten auch etwas wie:
dies für Sie tun. Es gibt wahrscheinlich dutzende von anderen Skripten, die durch die schnelle Google-Suche verfügbar sind, um wirklich mit diesem Header in einer angemesseneren Weise zu arbeiten, als nur die zwei ersten Buchstaben zu betrachten.
Sie können auch eine ähnliche Frage hier lesen: Verwenden der Servervariablen PHP HTTP_ACCEPT_LANGUAGE
Tags und Links php redirect url-redirection http-accept-language