Ankündigung

Einklappen
Keine Ankündigung bisher.

variable je nach Sprache ausgeben

Einklappen

Neue Werbung 2019

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

  • variable je nach Sprache ausgeben

    Hallo zusammen,
    ich glaube ich habe ein ziemlich triviale Frage bin sehr neu auf dem PHP-Gebiet.

    Ich möchte eine Variable je nach Browsersprache des Betrachters ausgeben. Dazu habe ich folgenden Schnipsel eingefügt. Das funktioniert zwar ich habe jedoch zwei Probleme:

    1) Das scheint nicht rein nach Browsersprache zu funktionieren. Wenn ich Englsich als Sprache und als Zweitsprache Deutsch nehme, bekomme ich im Browser trotzdem "wert1" angezeigt. Das ist aber eigentlich nicht weiter schlimm.

    2) Statt direkt "wert1" auszugeben würde ich die Werte für alle Sprachen gerne in ein array speichern damit ich das mit einer Variable irgendwo im Text unterbringen kann. Also statt echo "wert1" die Variable $wert ausgeben welche je nach Browser unterschiedliche Inhalte anzeigt. Hat jemand eine Idee wie ich das machen kann?

    PHP-Code:
        <?php
        $sprache 
    $_SERVER["HTTP_ACCEPT_LANGUAGE"];
        if ( 
    eregi('de'$sprache) ) echo "wert1";
        elseif ( 
    eregi('en'$sprache) ) echo "wert2";
        else echo 
    "andere Sprache"
        
    ?>
    Wäre für jeden Vorschlag dankbar.

    Gruß
    Constantin

  • #2
    Antwortenrecycling:

    Dein Code berücksichtigt nur eine Teilmenge vorgeschriebene Format vom HTTP-Accept-Language-Header Wenn Dein Browser zufällig mal genau diese Teilmenge auch verwendet, dann funktioniert das ganze, ansonsten geht das in die Hose.

    Formal gestaltet sich das Format für den angesprochenen Header laut RFC wie folgt:

    1) Du hast eine Komma-separierte Liste von Werten.
    2) Jeder Einzelwert besteht wiederum aus zwei Werten, die per Semikolon getrennt sind. Der Part nach dem Semikolon (inkl. des selbigen) ist dabei optional.
    3) Der Part vor dem Semikolon ist die Sprache inkl. Sonderfall-Angabe.
    4) Der Part nach dem Semikolon ist der Preferenzfaktor. Er besteht aus "q=" und einer reellen Zahl. Fehlt der Wert, so würd für q 1.0 angenommen.
    5) Die ausgewählte Sprache ist die mit dem höchsten Wert für q.

    Ergo könntest Du mit folgendem Code den Header korrekt auswerten:

    PHP-Code:
    <?php
      
    // Default-Werte:
      
    $lang['country']='en';
      
    $lang['lang']='en';
      
    $lang['q']=-1;

      foreach(
    explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']) as $lRequest)
      {
        
    $sub=explode(';',$lRequest);
        if(isset(
    $sub[1]))
          
    $q=(float)str_replace('q=','',$sub[1]);
        else
          
    $q=1.0;

        if(
    $q>=$lang['q'])
        {
          
    $lang['q']=$q;
          
    $sub=explode('-',$sub[0]);
          
    $lang['country']=$sub[0];
          
    $lang['lang']=isset($sub[1])?$sub[1]:$sub[0];
        }
      }

      
    var_dump($lang);

    ?>
    Um eine Schleife über alle Werte wirst Du dabei wg. des Preferenzfaktors nicht herum kommen - es ist nämlich nicht gesagt, daß alle Browser die einzelnen Bestandteile nach Preferenz ordnen

    Gruß Jens

    Kommentar


    • #3
      Hallo Jens,

      ich habe mir das mal angeschaut, aber leider verstehe ich nicht wo die Werte für die unterschiedlichen Sprachen rein sollen, also wo das array ist. Das wäre super hilfreich, wenn du mir irgendwie ein Beispiel geben könntest (wert1->"fr"; wert2->"en"). Ich blick da sonst leider nicht durch

      Kommentar


      • #4
        Hilft zwar nicht bei deinem Problem, aber eregi ist depracted. Nimm lieber preg.

        Kommentar


        • #5
          Zitat von cocofalco Beitrag anzeigen
          Hallo Jens,

          ich habe mir das mal angeschaut, aber leider verstehe ich nicht wo die Werte für die unterschiedlichen Sprachen rein sollen, also wo das array ist. Das wäre super hilfreich, wenn du mir irgendwie ein Beispiel geben könntest (wert1->"fr"; wert2->"en"). Ich blick da sonst leider nicht durch
          Haste den Code einfach mal ausprobiert !?
          "Dummheit redet viel..Klugheit denkt und schweigt.." [Amgervinus]

          Kommentar


          • #6
            Der Code oben liefert Dir die Sprache, die dem User laut Header am genehmsten ist. Wenn Du mehrere Sprachen im Angebot hast, dann musst Du natürlich den Wert ermitteln, der dem User am genehmsten ist und den Du auch im Angebot hast.

            Um das zu erreichen, müsstest Du dieses If-Konstrukt erweitern:

            PHP-Code:
                if($q>=$lang['q']) 
                { 
                  
            $lang['q']=$q
                  
            $sub=explode('-',$sub[0]); 
                  
            $lang['country']=$sub[0]; 
                  
            $lang['lang']=isset($sub[1])?$sub[1]:$sub[0]; 
                } 
            Vor den Zuweisungen in $lang innerhalb des Rumpfes müsstest Du eine Prüfung tätigen, ob die entsprechende Sprache zu den von Dir unterstützen gehört. Ist das der Fall, so machst Du die Zuweisung, ansonsten nicht.

            Eine Möglichkeit dazu sähe wie folgt aus:

            PHP-Code:
                if($q>=$lang['q']) 
                { 
                  
            $currLang=array();
                  
            $currLang['q']=$q
                  
            $sub=explode('-',$sub[0]); 
                  
            $currLang['country']=$sub[0]; 
                  
            $currLang['lang']=isset($sub[1])?$sub[1]:$sub[0]; 

                  
            // hier steht jetzt in $currLang['lang'] die zu überprüfende Sprache
                  
            if(spracheVerfuegbar($currLang))
                    
            $lang=$currLang;
                } 
            Wie Du spracheVerfuegbar() definierst, hängt dann von Deiner jeweiligen Anwendung ab.

            Gruß Jens

            Kommentar

            Lädt...
            X