Sebastian Becker: Konquerer und sprachabhängige Weiterleitung

Hallo,

eine sprachabhängige Weiterleitung habe ich zunächst per JavaScript mit Abfrage von navigator.userLanguage bzw. navigator.language und window.location.replace gelöst und bin jetzt auf eine PHP-Abfrage von HTTP_ACCEPT_LANGUAGE umgestiegen.

Das funktioniert auch prima mit den gängigen Browsern, nicht aber mit
Konquerer.

Hat jemand eine Erklärung für dieses Phänomen - oder besser noch eine Lösung?

Danke, Grüße,

Sebastian

  1. Dann frag doch vorher die Kennung von Konquerer ab mit z.B.

    if (navigator.appName == "Konquerer")
    {
    blablabla
    }

    Ich weiß nicht wie sich der Konquerer ausgibt, ob die Bedingung oben also richtig ist, evtl. mußt Du sie anpassen. Da Konquerer nur auf Unix/Linux läuft (so weit ich weiss), hast Du da auch eine ausreichende Trennung nach Systemen.

    Gruß
    David

    1. Hallo, David,

      Dann frag doch vorher die Kennung von Konquerer ab mit z.B.
      if (navigator.appName == "Konquerer"){blablabla}

      ich möchte die Abfrage ja zukünftig serverseitig mit PHP machen.

      Das bisher verwendete JavaScript müßte aber eigentlich auch mit Konquerer funktionieren. Falls die Sprache nicht erkannt wird, müßte er auf die englische default-Seite weiterleiten - tut er aber nicht.

      Die Seite ist http://www.snomag.de/

      Danke, Grüße,

      Sebastian

      JavaScript
      -------------------------------------------------------------------

      var redirectURL = "http://www.snomag.de/index1";

      if (navigator.appName == 'Netscape')
      {var lang = navigator.language;}
      else
      {var lang = navigator.userLanguage.substr(0,2);}

      if (lang.indexOf("de")==0)
      {window.location.replace(redirectURL + '_de.htm')}
      else
      {window.location.replace(redirectURL + '_en.htm')}

      -------------------------------------------------------------------

      1. Hallo Sebastian,

        in der JavaScript-Abteilung von SELFHTML ist eine umfangreiche Liste von Browsereigenschaften, die man Abfragen kann, lass die doch mal mit Konquerer durchlaufen, dann weißt Du erst einmal was der überhaupt sendet. Falls der gar keinen Ländercode sendet, müßtest Du nämlich versuchen, an die Betriebssystemspezifische Länderkennung heranzukommen.

        Gruß
        David

        1. Hallo Sebastian,

          ich werd' es später mit dem Per-Script von Michael versuchen.

          http://www.schroepl.net/cgi-bin/http_trace.pl

          Danke, Grüße,

          Sebastian

  2. use Mosche;

    eine sprachabhängige Weiterleitung habe ich zunächst per JavaScript mit Abfrage von navigator.userLanguage bzw. navigator.language und window.location.replace gelöst und bin jetzt auf eine PHP-Abfrage von HTTP_ACCEPT_LANGUAGE umgestiegen.

    Das funktioniert auch prima mit den gängigen Browsern, nicht aber mit Konquerer.

    Zeig uns doch mal bitte deinen Lösungsansatz, und stell so ein Ding mal mit allen möglichen Debug-Meldungen ins Netz, so dass wird das mal ausprobieren können. Interessant ist vielleicht die Frage, ob Konqueror eine abweichende Language sendet - deswegen wären hier die Debug-Meldungen praktisch.

    use Tschoe qw(Matti);

    1. Hallo, Matti,

      Zeig uns doch mal bitte deinen Lösungsansatz, und stell so ein Ding mal mit allen möglichen Debug-Meldungen ins Netz, so dass wird das mal ausprobieren können. Interessant ist vielleicht die Frage, ob Konqueror eine abweichende Language sendet - deswegen wären hier die Debug-Meldungen praktisch.

      Woher sollen denn die Debug-Meldungen kommen?

      Das ist die Seite: http://www.snomag.de/

      PHP
      -------------------------------------------------------------------

      $domain_name = "http://www.snomag.de";

      $lang = strtok($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'],",");
      while($lang)
      {
      if(strstr($lang,"de")) // search for german language string
      {
      header("Location: ".$domain_name."/index1_de.htm");exit;
      }
      $lang = strtok(",");
      }

      header("Location: ".$domain_name."/index1_en.htm"); exit;

      -------------------------------------------------------------------

      JavaScript
      -------------------------------------------------------------------

      var redirectURL = "http://www.snomag.de/index1";

      if (navigator.appName == 'Netscape')
      {var lang = navigator.language;}
      else
      {var lang = navigator.userLanguage.substr(0,2);}

      if (lang.indexOf("de")==0)
      {window.location.replace(redirectURL + '_de.htm')}
      else
      {window.location.replace(redirectURL + '_en.htm')}

      -------------------------------------------------------------------

      Danke, Grüße,

      Sebastian

  3. eine sprachabhängige Weiterleitung habe ich zunächst per JavaScript mit Abfrage von navigator.userLanguage bzw. navigator.language und window.location.replace gelöst und bin jetzt auf eine PHP-Abfrage von HTTP_ACCEPT_LANGUAGE umgestiegen.

    Das funktioniert auch prima mit den gängigen Browsern, nicht aber mit
    Konquerer.

    Das Format für Accept-Language: ist im HTTP-Standard festgelegt (siehe http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4), wenn Deine Funktion also mit anderen Browsern funktioniert, dann sendet Konqueror vielleicht keine solchen Daten.
    Genaues lässt sich aber ohne Beispiel und Code nicht sagen.

    Du kannst Dir die Arbeit mit der eigenen Abfrage übrigens auch ersparen und sie gleich dem Webserver überlassen (der kann's eventuell sogar besser), indem Du in der betreffenden .htaccess "Options +MultiViews" setzt und Deine Dateien blabla.php.de und blabla.php.en nennst (Beispiel, wichtig sind die Sprachkürzel hinten). Die Dateien werden weiterhin per blabla.php angesprochen, weil der Server eine solche Datei aber nicht findet, sucht er sich die passenden zusammen und wählt eine anhand der Browserangaben aus.
    Willst Du das noch ein Stück weiter treiben, schreibst Du Verweise nur noch ohne jegliches Kürzel ("blabla"). Dann brauchst Du Dich in Zukunft nicht mehr um die Verweise kümmern, falls Du mal eine Datei blabla.html gegen blabla.php austauschst.

    Gruß,
      soenk.e

    1. Hallo, soenk.e,

      Das Format für Accept-Language: ist im HTTP-Standard festgelegt (siehe http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4), wenn Deine Funktion also mit anderen Browsern funktioniert, dann sendet Konqueror vielleicht keine solchen Daten.
      Genaues lässt sich aber ohne Beispiel und Code nicht sagen.

      Code habe ich im anderen Ast gepostet ...

      Du kannst Dir die Arbeit mit der eigenen Abfrage übrigens auch ersparen und sie gleich dem Webserver überlassen ...

      Hört sich interessant, aber auch irgendwie abenteuerlich an. Gibt es dazu irgendwo eine Dokumentation?

      Danke, Grüße,

      Sebastian

      1. Du kannst Dir die Arbeit mit der eigenen Abfrage übrigens auch ersparen und sie gleich dem Webserver überlassen ...

        Hört sich interessant, aber auch irgendwie abenteuerlich an. Gibt es dazu irgendwo eine Dokumentation?

        Neben dem (in den nächsten paar Stunden noch etwas fehlerhaften;) SelfArtikel, den Michael schon angesprochen hat, natürlich auch die Originalversion in der Apache-Anleitung: http://httpd.apache.org/docs/content-negotiation (man beachte das fehlende .html am Ende - es funktioniert also:).

        Gruß,
          soenk.e

    2. Hi Sönke,

      Du kannst Dir die Arbeit mit der eigenen Abfrage übrigens auch ersparen
      und sie gleich dem Webserver überlassen

      da spendieren wir doch gleich mal einen Link dazu:
         http://aktuell.de.selfhtml.org/artikel/server/alt-http/

      Willst Du das noch ein Stück weiter treiben, schreibst Du Verweise nur
      noch ohne jegliches Kürzel ("blabla"). Dann brauchst Du Dich in Zukunft
      nicht mehr um die Verweise kümmern, falls Du mal eine Datei blabla.html
      gegen blabla.php austauschst.

      Und zusätzlich hat es den Vorteil, daß _dann_ die Reihenfolge der Endungen
      egal ist, weil die Verhandlung gleich über beide läuft.

      Viele Grüße
            Michael

  4. Hi Sebastian,

    auf eine PHP-Abfrage von HTTP_ACCEPT_LANGUAGE umgestiegen.
    Das funktioniert auch prima mit den gängigen Browsern, nicht aber mit
    Konquerer.

    hm ... hast Du einen Konqueror zur Hand?

    Wenn ja, dann kannst Du mit
       http://www.schroepl.net/cgi-bin/http_trace.pl
    nachsehen, was genau der an HTTP-Headern sendet.

    Viele Grüße
          Michael

    1. Hi Michael,

      hm ... hast Du einen Konqueror zur Hand?

      z.Zt. leider nicht ...

      Wenn ja, dann kannst Du mit
      http://www.schroepl.net/cgi-bin/http_trace.pl
      nachsehen, was genau der an HTTP-Headern sendet.

      Ich versuchs mal später mit einem anderen PC - was zeigt er denn bei Dir an?

      Danke, Grüße,

      Sebastian

      1. use Mosche;

        Wenn ja, dann kannst Du mit
        http://www.schroepl.net/cgi-bin/http_trace.pl
        nachsehen, was genau der an HTTP-Headern sendet.

        Ich versuchs mal später mit einem anderen PC - was zeigt er denn bei Dir an?

        ACCEPT_LANGUAGE: de
        ist wahrscheinlich das interessante für dich (Konqueror 3.0.1).

        use Tschoe qw(Matti);