xpfreund: Systemsprache abfragen

Hallo,

Gibt es eine Möglichkeit die Sprache des Systems mit PHP abzufragen. Es soll in jedem Browser funktionieren und für viele Sprachen der Welt gehen, also z. B. auch Koreanisch oder Chinesisch. Der Grund ist: Ich habe eine Sprachauswahl als Auswahlliste, wo die Systemsprache standardmäßig aktiviert ist.
Kennt ihr da ne Möglichkeit? Hab schon ein bisschen gegoogelt aber nichts gutes gefunden.

gruß aus Senftenberg am See

  1. Hello,

    Gibt es eine Möglichkeit die Sprache des Systems mit PHP abzufragen.

    was suchst du denn eigentlich? Die Sprache des Systems, oder die bevorzugte Sprache des Nutzers? Im letzteren Fall hilft dir der Header Accept-Language weiter.

    MfG
    Rouven

    --
    -------------------
    Eine Bilanz ist wie der Bikini einer Frau. Sie zeigt fast alles, aber verdeckt das Wesentliche  --  Günter Stotz, Regierungsdirektor des baden-württembergischen Wirtschaftsministeriums
    1. Hallo,

      Gibts das denn in allen Browsern?
      Bevorzugte oder Systemsprache, je nachdem, was vorhanden ist.

      gruß aus Senftenberg am See

      1. Hi,

        Gibts das denn in allen Browsern?

        Accept-Language ist seit mindestens[1] 1996 definiert.

        Cheatah

        [1] Die Spezifikation von HTTP/0.9 finde ich gerade nicht; also beziehe ich mich auf RFC 1945.

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hi Cheatah,

          [Accept-Language]
          Gibts das denn in allen Browsern?
          Accept-Language ist seit mindestens[1] 1996 definiert.

          ja schon, aber es wird in RFC 1945 als "Additional Feature" gelistet, ist also keine Pflichtangabe im Protokoll. Ein Client, der keinen Accept-Language-Header sendet, ist also durchaus vorstellbar - wenn auch sehr unwahrscheinlich, es sei denn für spezielle Zwecke.

          So long,
           Martin

          --
          Butterkeksverteiler zu werden ist vermutlich eine der wenigen beruflichen Perspektiven, die sich noch bieten, wenn man einen an der Waffel hat.
            (wahsaga)
        2. Hallo,

          <code lang=php>
          $languages = array("English" => "en",  //array mit benötigten Sprachen
          "Deutsch" => "de",
          "Andorran" => "ad",
          "Brazilian" => "br",
          "Catalan" => "ct",
          "China,P.R.C.(GB)" => "zh",
          "Czech" => "cz",
          "Danish" => "da",
          "Dutch" => "nl",
          "Espanol" => "es",
          "Finnish" => "fi",
          "Français" => "fr",
          "Greek" => "gr",
          "Hungarian" => "hu",
          "Italiano" => "it",
          "Icelandic" => "is",
          "Korean" => "ko",
          "Norwegian" => "no",
          "Portugues" => "pt",
          "Polish" => "pl",
          "Romanian" => "ro",
          "Russian" => "ru",
          "Slovenian" => "si",
          "Slovak" => "sk",
          "Svenska" => "se",
          "Turkish" => "tr",
          "Taiwan,R.O.C.(TW)" => "tw");
          $lang=$_SERVER["HTTP_ACCEPT_LANGUAGE"]; //Headerabfrage
          echo "<br><tr><td>Language:</td><td><select name='setting_langua'>\n"; //Auswahlliste
          foreach ($languages as $l_long => $l_short) {
            echo "<option value='$l_short'";
            $lang=substr($lang,0,2);
            if ($lang==$l_short) { echo " selected"; }
            echo ">$l_long-$l_short\n";
          }
          echo "</select><br><br></td></tr>\n";

          Bitte keine Kommentare über Tabellen und Abstände, die nicht über CSS definiert wurden.

          gruß aus Senftenberg am See

          1. Hi,

            $languages = array("English" => "en",  //array mit benötigten Sprachen

            in aller Regel würde die Zuordnung Key=>Klartext mehr Sinn ergeben.

            $lang=$_SERVER["HTTP_ACCEPT_LANGUAGE"]; //Headerabfrage
            foreach ($languages as $l_long => $l_short) {
              $lang=substr($lang,0,2);

            Warum versuchst Du, $lang bei jedem Schleifendurchlauf erneut zu normalisieren? Außerdem beachtest Du das Format des Headers nicht hinreichend.

            Bitte keine Kommentare über Tabellen und Abstände, die nicht über CSS definiert wurden.

            Warum nicht? Der erzeugte HTML-Code ist nicht sinnbehaftet. Daran ändert sich auch nichts, wenn der Themenbereich PHP lautet.

            Cheatah

            --
            X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
          2. hi,

            Bitte keine Kommentare über Tabellen und Abstände, die nicht über CSS definiert wurden.

            Dann sei wenigstens einer zu

            $lang=$_SERVER["HTTP_ACCEPT_LANGUAGE"]; //Headerabfrage
              $lang=substr($lang,0,2);
              if ($lang==$l_short) { echo " selected"; }

            erlaubt: Das ist reichlich suboptimal.

            Accept-Language kann mehr als eine präferierte Sprache enthalten, und darüber hinaus auch noch einen "quality value" - was bei dir komplett unberücksichtigt bleibt.

            Du triffst also im Zweifelsfalle gar keine Auswahl, wenn die erste gewünschte Sprache nicht vorliegt - obwohl die nächste vielleicht durchaus verfügbar wäre.

            Und abhängig vom quality value wählst du vielleicht sogar eine "falsche" aus.

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
            1. Hallo,

              hi,

              Bitte keine Kommentare über Tabellen und Abstände, die nicht über CSS definiert wurden.

              Dann sei wenigstens einer zu

              $lang=$_SERVER["HTTP_ACCEPT_LANGUAGE"]; //Headerabfrage
                $lang=substr($lang,0,2);
                if ($lang==$l_short) { echo " selected"; }

              erlaubt: Das ist reichlich suboptimal.

              Accept-Language kann mehr als eine präferierte Sprache enthalten, und darüber hinaus auch noch einen "quality value" - was bei dir komplett unberücksichtigt bleibt.

              Du triffst also im Zweifelsfalle gar keine Auswahl, wenn die erste gewünschte Sprache nicht vorliegt - obwohl die nächste vielleicht durchaus verfügbar wäre.

              Und abhängig vom quality value wählst du vielleicht sogar eine "falsche" aus.

              Dann wäre das ja auch nicht so schlimm, denn dann kann derjenige ja immer noch selbst auswählen. Und ob da nun en-us oder en-en steht, ist doch völlig egal, denn es werden sowieso nur die ersten beiden beiden Buchstaben ausgewählt.
              Und was den ganzen Befehl angeht: So genau muss er nun auch nicht sein, denn ursprünglich musste der User allein auswählen, welche Sprache bei der Installation verwendet werden soll, also nehme ich ihm ja nur ein wenig Arbeit ab. Außerdem glaube ich nicht mal, dass das so veränderte Projekt überhaupt jemals aus unsere Firma rauskommt. Also selbst, wenn wir irgendwelche Praktikanten oder so was bei uns hätten, wären die wahrscheinlich mit Englisch auch schon zufrieden.
              Deswegen ändere ich auch nichts an den Tabellen, weil ein CSS dort reinzukriegen viel zu kompliziert ist.

              gruß aus Senftenberg am See

          3. Hallo.
            Die Liste der Sprachen ist hoffentlich nur ein Beispiel und in der richtigen Liste stehen die Sprachen in ihrer jeweiligen Sprache.
            MfG, at

  2. (Hallo|Hi(ho)|Tag) xpfreund,

    Gibt es eine Möglichkeit die Sprache des Systems mit PHP abzufragen. Es soll in jedem Browser funktionieren und für viele Sprachen der Welt gehen, also z. B. auch Koreanisch oder Chinesisch. Der Grund ist: Ich habe eine Sprachauswahl als Auswahlliste, wo die Systemsprache standardmäßig aktiviert ist.
    Kennt ihr da ne Möglichkeit? Hab schon ein bisschen gegoogelt aber nichts gutes gefunden.

    Ich weiß nicht, was du gefunden hättest, wenn du nach "language negotiation" gegoogelt hättest, aber es gibt dafür (und einige andere Spielchen mit HTTP-Headern) eine PEAR-Klasse, sie heißt schlicht HTTP. Die Methode HTTP::negotiateLanguage() dürfte dir bei deinem speziellen Problem besser weiterhelfen, als dein selbstgestrickter Code.

    Auch können Sprachenkürzel ganz anders aussehen, als du dir vielleicht vorstellst, siehe z.B.:

    http://de.selfhtml.org/diverses/sprachenlaenderkuerzel.htm#zusammengesetzte

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

    http://www.loc.gov/standards/iso639-2/langhome.html

    MffG
    EisFuX

  3. Hi,

    [...] mit PHP abzufragen. Es soll in jedem Browser funktionieren

    Das ist ein Widerspruch, da PHP mit dem Browser (im Normalfall) nicht in Berührung kommt ...

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.