Die Sprachumleitung funktioniert auf dem Desktop, aber nicht im mobilen Browser

8

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:

  • Mobile Safari zeigt die korrekte Sprache an, wenn HTTP_ACCEPT_LANGUAGE zurückgegeben wird, aber nicht umgeleitet wird.
  • Mobiles Chrome (nur iOS, funktioniert unter Android) zeigt nicht die richtige Sprache an (standardmäßig "en").
  • iOS analysiert die HTTP-Headerdaten in einer anderen Reihenfolge, vergleiche iOS Chrome (en-US, en; q = 0.8, sv; q = 0.6) und OSX Chrome (sv, en-US; q = 0.8, en; q = 0,6).
Staffan Estberg 29.06.2015, 03:47
quelle

6 Antworten

1

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

aufruft %Vor%

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.

    
Juank 07.07.2015, 16:42
quelle
4

Probieren Sie dies aus und lassen Sie uns die Ausgabe bitte wissen

%Vor%     
Juank 29.06.2015 04:54
quelle
2

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

    
niklos 07.07.2015 19:58
quelle
1

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%     
pokeybit 29.06.2015 11:44
quelle
1

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:

  • Teilen Sie die Zeichenfolge in Kommas
  • Teilen Sie jede Teilzeichenfolge, die auf dem Semikolonzeichen
  • gefunden wurde
  • Wenn kein numerischer Wert angegeben wird, verwenden Sie den Standardwert 1.0
  • Sortiere das Ergebnis mit diesem numerischen Wert
  • Vergleichen Sie diese Liste mit der Liste der auf Ihrer Website verfügbaren Sprachen und finden Sie die beste.
Sebastien C. 07.07.2015 14:50
quelle
0

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:

verwenden

Ссылка

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

    
Mike Brant 06.07.2015 21:22
quelle