lutz: Clientsprache ermitteln

Hallo,

Für meine nächste Siete plane ich einen englischen und deutshen teil der webseite. Um die sprache des users auszuwählen soll er sie zum einem per link selbst auswählen können. auf der anderen seite möchte ich ihm aber die für ihn passende sprahce sofort anbieten.
d.h. wenn jemand aus deutschland kommt bekommt er den deutschen part serviert, ansonsten den englischen teil. das ergebnis der abrfrage wird dann an php übermittelt was dann die jeweils passend sprache aus meiner datenbank liefert.

kann man das irgendwie über js (oder php - wahrscheinlich wird das nicht gehen, da ja serverseitig) realisieren?

danke. lutz

  1. Hallo!

    kann man das irgendwie über js ...

    http://selfhtml.teamone.de/javascript/objekte/navigator.htm#language

    ...(oder php - wahrscheinlich wird das nicht gehen, da ja serverseitig) realisieren?

    Doch, den der Client(Browser) liefert ja Infos.
    -> $HTTP_ACCEPT_LANGUAGE
    http://www.php.net/manual/de/print/language.variables.predefined.php

    MfG, André Laugks

    1. danke dir, ganau das was ich gesucht habe.

      manchmal sind die dinge doch so sch;n einfach
      if(navigator.language.indexOf("en")>-1)
      h'tta man selbst drauf kommen k;nnen.

      gr[-e lutz

      1. Aloha!

        manchmal sind die dinge doch so sch;n einfach
        if(navigator.language.indexOf("en")>-1)
        h'tta man selbst drauf kommen k;nnen.

        Du machst dir mehr Freunde, wenn du serverseitig abfragst. Vorteile sind:

        1. Du kannst sofort auf der ersten Seite schon die gewünschte Sprache ausgeben. Mit Javascript mußt du erstmal eine Seite laden, die Sprache feststellen und dann erneut eine Seite laden.

        2. Der Benutzer kann sich die Sprache, die er bevorzugt, aussuchen, wahlweise auch mehrere Sprachen, die er kennt/kann. Mit navigator.language erhälst du die Sprache der Browsers - die kann man sich nicht aussuchen, und das ist auch immer nur eine.

        Ich zum Beispiel bevorzuge englische Browser (weil ich damit mal so angefangen habe - keine Umgewöhnung in den Preferences - und weil es dort meist die aktuelleren Versionen gibt, bzw. die Updates eher kommen). Ich bevorzuge als Webseitensprache aber eindeutig deutsch (wenngleich ich mit Englisch auch was anzufangen weiß), deshalb stelle ich meine Browser alle so ein.

        Mit anderen Worten: Werte serverseitig den HTTP-Header "Accept-Language" aus (in PHP unter $_SERVER['HTTP_ACCEPT_LANGUAGE'] bzw. $HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'] immer erreichbar), und du wirst glücklich.

        - Sven Rautenberg

        1. hallo sven,

          werde deinen weg über den HTTP-Header wählen.
          dadurch wäre auch der umweg über js unnötig.

          mache zwar schon ne weile php abe mit HTTP-Header noch nichts zutun gehabt, was erzeugt des den header? dachte immer er wird vom browser erzeugt - was ja bei dir bedeuten würde, dass du englisch vorgestzt bekommst. wenn der header vom system (win/mac etc.) generiert wird (browser übermittelt quasi die systemsprache) müsste es ja funktioneren

          lutz unter palmem

          1. Aloha!

            werde deinen weg über den HTTP-Header wählen.
            dadurch wäre auch der umweg über js unnötig.

            Fein! :)

            mache zwar schon ne weile php abe mit HTTP-Header noch nichts zutun gehabt, was erzeugt des den header? dachte immer er wird vom browser erzeugt - was ja bei dir bedeuten würde, dass du englisch vorgestzt bekommst. wenn der header vom system (win/mac etc.) generiert wird (browser übermittelt quasi die systemsprache) müsste es ja funktioneren

            Der Browser schickt die ganzen Header (und ein Proxy kann auf dem Weg zum Server diese nochmal beliebig verändern).

            Benutzt du IE? Dann geht mal in die Systemsteuerung -> Internetoptionen -> Tab "Allgemein" -> Button "Sprachen...".

            Dort kannst du einstellen (hinzufügen/entfernen/umordnen), welche Sprachen du lesen möchtest. Bei mir steht da derzeit nur "Deutsch [de]" (weil ich den IE nur zum Testen nehme, nicht zum Surfen), mein Surfbrowser hat da "Deutsch [de]" und danach "Englisch [en]" stehen - also lieber deutsche als englische Versionen.

            Netscape und Opera (und die ganzen anderen Browser) haben diese Einstellmöglichkeit in ihren Einstellungen versteckt. Voreingestellt ist die Sprache, die der Browser selbst verwendet (englische Browser wollen englische Seiten), aber im Prinzip ist die Angabe frei userkonfigurierbar. Und deshalb besser, als navigator.language.

            - Sven Rautenberg

            1. horch was kommt von drausen rein -> es ist deutsch

              habs grad mal im ie6 ausprobiert und per php mir wieder per echo ausgeben lassen.
              werde jetzt mal ne if abfrage bauen und dann damit ein wenig rumexperimentieren.

              damit ist ja nun auch möglich komplett auf dem user zugeschnittene seiten anzubeiten, mich stört ja auch andauernd auf deutsch klicken zu müssen um dann erst diese sprache zu bekommen. damit wird dies aber bei meiner nächsten seite hoffentlich der vergangenheit angehören.

              danke dir nochmal

              so long

              lutz

          2. werde deinen weg über den HTTP-Header wählen.

            http://aktuell.de.selfhtml.org/artikel/server/alt-http/

  2. Hallo, Lutz,

    kann man das irgendwie über js (oder php - wahrscheinlich wird das nicht gehen, da ja serverseitig) realisieren?

    Mit JavaScript geht das ungefähr so:

    var redirectURL = "http://www.domainname.de";

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

    // if(getCookie(cookie_prefix + "_lang"))lang = getCookie(cookie_prefix + "_lang"); // nur wenn die bevorzugte Sprache in einem Cookie gespeichert wird

    // german
    if (lang.indexOf("de")==0)
    {window.location.replace(redirectURL + '/index_de.htm')}

    // default to english
    else
    window.location.replace(redirectURL + '/index_en.htm')

    Mit PHP ginge es ungefähr so:

    <?php
    $domain_name = "http://www.domainname.de";

    $lang = strtok($HTTP_ACCEPT_LANGUAGE,","); // language codes are comma delimited

    while ($lang)
    {
    if ereg((strstr($lang,"de")
    {
    header("Location: ".$domain_name."/index_de.htm");
    exit;
    }
    $lang = strtok(",");
    }
    header("Location: ".$domain_name."/index_en.htm"); // default
    exit;
    ?>

    Viel Spaß beim Testen,

    Sebastian