de-DE;de...sinvoll zerlegen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • de-DE;de...sinvoll zerlegen

    Hallo, ich hab mal wieder was das nicht klappt.

    es geht um die auswertung die hier rauskommt:
    $lng=($lng=$_SERVER['HTTP_ACCEPT_LANGUAGE'])?$lng:"?";

    das ergebnis speichere ich in einer Datei und das sieht dann so da drin aus:

    de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
    cs
    en-us
    en,*;q=0.5
    cs,en-us;q=0.7,en;q=0.3
    de
    sl,en-gb;q=0.7,en;q=0.3
    et

    das sind 8 beispiele.
    Das letzte Beispiel ist ganz schlimm, da steht das der client aus Ethiopien kommt, sollte aber aus "et"=>"Estnisch" kommen.
    Nur weil da der 2te teil fehlt wird country durch language ersetzt:-(

    Ich sehe das so:
    Country/Language
    cs,en-us -> client kommt aus tschechien, seine browsersprache englisch
    sl,en-gb;q=0.7,en;q=0.3 -> client kommt aus slowenien, browsersprache englisch

    et -> der kommt aus estland, liefert aber keine browsersprache :-(

    Ich habe jetzt den string auf 5 zeichen gekürzt, der durcheinender dahinter ist nicht sooo wichtig denke ich mal.

    also sieht meine textzeile jetzt so aus:
    de-de
    cs,en
    sl,en
    et

    Wie kann man das vernünftig zerlegen, also schauen ob ein - oder ein , vorhanden ist, -> dann ist links das land und rechts die sprache
    wenn es kürzer ist sowas wie "et", dann soll das die sprache sein, land gibts keins.

    So hab ichs gemacht, will aber nicht richtig tun:

    $al=$_SERVER['HTTP_ACCEPT_LANGUAGE'];
    $check=strpos($al,"-"); # Prüfen ob ein "-"-Zeichen vorhanden ist (z.B. de-ch)
    if($check==true)
    {$zt=explode("-",$al);
    $lang=$zt[0]; # Linker Teil

    # Vom rechten Teil nur die ersten 2 Stellen, falls der rechte Teil existiert
    if(!empty($zt[1]) and strlen($zt[1]<3)){$country=strtolower(substr($zt[1],0,2));}

    else{$country=strtolower($zt[0]);}
    }
    else
    {$lang=$al; $country=$al;}

    $arrLang=arrLang(); # $arrLang=array("af"=>"Afrikaans", "sq"=>"Albanisch", "ar"=>"Arabisch", "hy"=>"Armenisch",...
    $arrCountry=arrCountry() #$ arrCountry=array("ad"=>"Andorra", "ae"=>"Arabische Emirate", "af"=>"Afghanistan",...
    ACHTUNG: RamonaS zeigte ein beschämendes Verhalten in der Vergangenheit

  • #2
    Was ist dein Ziel?

    Falls es um das Herausfinden der Sprache geht, die der Website-Besucher am liebsten spricht (wenn er seinen Browser richtig eingestellt hat).

    Dafür gibts ein PEAR-Paket:
    Es heißt HTTP.
    Doku - interessant wäre hier HTTP::negotiateLanguage()

    Noch'n paar Links, die dir ein Bild vermitteln, wie Sprachenkürzel generell aussehen können (es gibt nicht nur die mit zwei Buchstaben):

    http://de.selfhtml.org/diverses/spra...sammengesetzte

    http://de.wikipedia.org/wiki/ISO_639

    http://www.loc.gov/standards/iso639-2/langhome.html
    Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

    Kommentar


    • #3
      Mein Ziel?...naja ich will das auswerten, mehr nicht :-)

      Die Plugins die du mir verlinkt hast, das möcht ich nicht machen, alles selbstgemacht, dann weiß ich wen ich fertig machen kann, wenns nicht tu

      Eigentlich gehts nur um die richtige zerlegung des strings. Naja die länder/sprachen mit 3 oder mehr zeichen, die muß man nicht haben.
      ACHTUNG: RamonaS zeigte ein beschämendes Verhalten in der Vergangenheit

      Kommentar


      • #4
        Dann guck dir das PEAR Package an und schau wie's dort gelöst ist. Danach kannst du's dann kopieren.
        Mein PHP Blog

        Kommentar


        • #5
          Original geschrieben von RamonaS
          Mein Ziel?...naja ich will das auswerten, mehr nicht :-)
          Definiere "auswerten". Willst du die Daten nur sinnvoll speichern? Oder willst du wissen, welche Sprache der User am liebsten hat? Oder was willst du sonst? Verstehe das Problem nicht so richtig wenn ich ehrlich bin

          Ich denke mal du willst bestimmte Informationen herausfinden, z.B. woher der Besucher kommt und/oder welche Sprache(n) er spricht - aber so ganz sicher bin ich mir da nicht
          Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

          Kommentar


          • #6
            @Arsen

            >Ich denke mal du willst bestimmte Informationen herausfinden, z.B. woher der Besucher kommt und/oder welche Sprache(n) er spricht
            Rischtisch!

            Ja ich möchte aus den bereits gespeicherten Daten, wie oben beschrieben, alles rausholen.

            Ich hab das zwar jetzt schon selber hinbekommen, aber ob das so richtig ist weiß ich nicht.

            Jedenfalls werden nur die "normalen" 2-2 kombinationen beachtet.
            Also de-AT kommt aus Östereich, browsersprache deutsch.

            Manche haben zB nur
            et
            stehen, da habe ich es so gemacht, wenn es nur 2stellig ist, dann ist das hoffentlich nur die Browsersprache.

            Ok genau kann man das nicht auswerten, man kann dort reinschreiben was man will im FF :-) ...aber ich rede jetzt von den normalen usern die in den tiefen der browserkennung nicht drann fummeln.
            ACHTUNG: RamonaS zeigte ein beschämendes Verhalten in der Vergangenheit

            Kommentar


            • #7
              Original geschrieben von RamonaS
              Jedenfalls werden nur die "normalen" 2-2 kombinationen beachtet.
              Also de-AT kommt aus Östereich, browsersprache deutsch.

              Manche haben zB nur
              et
              stehen, da habe ich es so gemacht, wenn es nur 2stellig ist, dann ist das hoffentlich nur die Browsersprache.
              Nein, den Schluss kannst du so nicht ziehen.

              http://www.w3.org/Protocols/rfc2616/...3.html#sec3.10
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                en-cockney, i-cherokee, x-pig-latin
                Ähmm genau hier hört mein wissen auf :-)

                Hab sowas noch nie gesehen, auch in meinem log noch nie (etwa 70tausend einträge)...dort ist es alles 2-2 stellig oder nur 2 stellig oder garnix (die bösen roboter und kidiescripte :-)
                ACHTUNG: RamonaS zeigte ein beschämendes Verhalten in der Vergangenheit

                Kommentar


                • #9
                  Original geschrieben von RamonaS
                  en-cockney, i-cherokee, x-pig-latin
                  Ähmm genau hier hört mein wissen auf :-)
                  en-cockney
                  Cherokee_(Sprache)
                  Pig_Latin


                  Alle drei haben übrigens gemeinsam, dass du ihre Sprecher nicht auf einen bestimmten Nationalstaat als Heimatland festnageln kannst. Und das ist auch das generelle Problem: Du kannst mit dem Accept-Language-Header eben nicht die Nationalität des Browserbenutzers feststellen. Als der Mozilla Firefox noch ganz neu war, gabs zeitweise die Version mit deutsch lokalisierter Benutzeroberfläche nur als "de-AT-Version", und "de-AT" hat der auch als Language-Accept-Header verschickt. Da hättest du eine Menge (deutschsprechende) Österreicher in deiner Statistik gehabt.

                  Hab sowas noch nie gesehen, auch in meinem log noch nie (etwa 70tausend einträge)...
                  Also ich hab in meinen Logs schon x-selfhtml und i-klingon entdecken können. Wer auch immer sich die Mühe gemacht hat, diese Sprachen extra seinen Browsereinstellungen hinzuzufügen ...

                  So lange du das ganze nur als Spaß siehst, ist auch nichts dagegen einzuwenden. Aber bleiben wir mal beim Beispiel de-AT: Die wenigsten deutsch sprechenden Österreicher machen sich die Mühe, "de-AT" in ihrem Browser als bevorzugte Sprache einzustellen. Und die begrüßt du dann höchstwahrscheinlich als Deutsche (weil "de" oder gar "de-DE" ausgewertet wurde). Gleiches gilt für Teile der Bevölkerungen der Schweiz, Luxemburgs, Belgiens usw. ...


                  Hier kann die Auswertung der IP-Adresse des Clients einen verlässlicheren Wert liefern.

                  ...in meinem log noch nie (etwa 70tausend einträge)...dort ist es alles 2-2 stellig oder nur 2 stellig oder garnix (die bösen roboter und kidiescripte :-)
                  Hmm, gerade da wäre das Hinzufügen der entsprechenden Header doch ein Kinderspiel.
                  Zuletzt geändert von fireweasel; 15.03.2009, 23:36.
                  Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                  Kommentar


                  • #10
                    Hallo fireweasel,

                    Das mit dem auswerten der IP ist eine gute idee, das wollte ich mal angehen, hat aber dann mangels wissen nicht geklappt.

                    Mal grudsätzliche frage: Stimmt es das jedem land alle 6 monate eine neue ip zugewiesen wird?
                    Oder kann man davon ausgehen das das erste teil der ip xxx. immer einem land zugeordnet werden kann und das auch so bleibt?

                    Wenn das nicht zutrifft kann man das ja vergessen, wäre dann so ungenau wie de-AT :-)

                    Naja ob de-AT oder de-DE, es gibt ja im grunde nur 3 staaten die deutsche sprache sprechen....im gegensatz zu spanisch oder mandarin :-)
                    ACHTUNG: RamonaS zeigte ein beschämendes Verhalten in der Vergangenheit

                    Kommentar


                    • #11
                      Original geschrieben von RamonaS

                      Mal grudsätzliche frage: Stimmt es das jedem land alle 6 monate eine neue ip zugewiesen wird?
                      Oder kann man davon ausgehen das das erste teil der ip xxx. immer einem land zugeordnet werden kann und das auch so bleibt?
                      Gaanz weit daneben.
                      Eine IP ist, anders als eine TLD, niemals einem Staat zugeordnet, sondern wird Blockweise von Telekommunikationsfirmen eingekauft.

                      Der Link zu MaxMind ist ganz brauchbar, benutz doch den oder einen vergleichbaren Service, der durch eine Reihe von Methoden die Zuordnung IP <-> Land vornimmt.

                      Du weißt aber, daß Google Analytics und ähnliche Statistiktools sowas schon mitbringen?

                      Kommentar


                      • #12
                        Naja ob de-AT oder de-DE, es gibt ja im grunde nur 3 staaten die deutsche sprache sprechen....im gegensatz zu spanisch oder mandarin :-)
                        Diese Zuordnung solltest du vermeiden, denn theoretisch kann dir auch ein deutschsprechender Italiener de-IT mitschicken...

                        Kommentar


                        • #13
                          Hallo,

                          ja ok, also kann man sagen, die auswerung der language, kann man in der pfeife rauchen:-)

                          Dann lass ich das lieber, ich die auswertung jetzt so das sie für die "normalen" daten soweit funktionieren.

                          Danke für eure hilfe....
                          ACHTUNG: RamonaS zeigte ein beschämendes Verhalten in der Vergangenheit

                          Kommentar

                          Lädt...
                          X