dennis94m: mehrsprachig

0 52

mehrsprachig

dennis94m
  • php
  1. 0
    bleicher
    1. 0
      dennis94m
      1. 0
        ChrisB
        1. 0
          dennis94m
          1. 0
            ChrisB
            1. 0
              dennis94m
              1. 0
                dennis94m
                1. 0
                  dennis94m
                  1. 0
                    Tom
                    1. 0
                      dennis94m
                      1. 0
                        Tom
                        1. 0
                          dennis94m
                          1. 0
                            Tom
                            1. 0
                              dennis94m
                              1. 0
                                Tom
                                1. 0
                                  dennis94m
                                  1. 0
                                    Tom
                                    1. 0
                                      dennis94m
                                      1. 0
                                        Tom
                                        1. 0
                                          dennis94m
                                          1. 0
                                            dennis94m
                                            1. 0
                                              Tom
                                              1. 0
                                                dennis94m
                                                1. 0
                                                  Tom
                                                  1. 0
                                                    dennis94m
                                                    1. 0
                                                      Tom
                                                      1. 0
                                                        Tom
                                                        1. 0
                                                          dennis94m
                                                          1. 0

                                                            Ratlosigkeit

                                                            Tom
                                                            1. 0
                                                              dennis94m
                                                              1. 0
                                                                dennis94m
                                                                1. 0

                                                                  Das dunkle Geheimnis von is_readble()

                                                                  Tom
                            2. 0
                              dennis94m
                              1. 0

                                Gefahr beim include()

                                Tom
                              2. 0
                                ChrisB
                              3. 0
                                EKKi
              2. 0
                ChrisB
  2. 0
    Daniel unreg
  3. 0
    dennis94m
  4. 0
    Malcolm Beck´s
    1. 0
      Sven Rautenberg
      1. 0
        Malcolm Beck´s
  5. 0
    Gunnar Bittersmann
    1. 0
      Tom
      1. 0
        Der Martin
        1. 0
          Tom
          1. 0
            Der Martin
          2. 0
            Gunnar Bittersmann
        2. 0
          Gunnar Bittersmann
          1. 0
            Der Martin
      2. 0
        Gunnar Bittersmann

liebe forumianer,
hab mal wieder eine frage und zwar habe ich vor meine webseite in deutsch und englisch anzubieten. dazu habe ich im ordner "lang" die dateien de.php und en.php erstellt. in diesen php-Dateien sind dann die einzelnen variablen festgelegt.

zb:
$welcome = "Willkommen";

bzw:
$welcome = "Welcome";

Die php-Dateien lade ich per include in das jeweilige dokument und zwar so:

<?  
$lang = $_GET['lang'];  
  
include ("lang/$lang.php");  
?>

Also wenn ein User dann auf "example.php?lang=de" geht kommt die seite in deutsch bzw. wenn er auf "example.php?lang=en" geht kommt die seite in englisch.

Nun muss ich aber teilweise formulare auch per "post" abschicken und habe auch bei anderen aktionen gemerkt das das anhaengsel "lang=xx" verschwindet.

Meine Frage also:
Wie kann ich dieses Problem noch loesen?
Kann ich irgendwie (nicht über URL-Variablen) den Wert fest einschreiben?
ich habe links auf der seite für deutsch und englisch.

viele gruesse,
dennis

  1. Grüße,

    Kann ich irgendwie (nicht über URL-Variablen) den Wert fest einschreiben?

    über POST?
    MFG
    bleicher

    1. ok bin grade auf die idee sessions gekommen. kann man das damit nicht loesen. ich moechte, das waehrend dem kompletten seitenbesuch die ausgewaehlte sprache gespeichert wird.

      wie koennte das mit sessions gehen?
      leibe gruesse,
      dennis

      1. Hi,

        ok bin grade auf die idee sessions gekommen. kann man das damit nicht loesen. ich moechte, das waehrend dem kompletten seitenbesuch die ausgewaehlte sprache gespeichert wird.

        wie koennte das mit sessions gehen?

        In dem man die Sprachauswahl in der Session hinterlegt und von dort auch wieder ausliest.

        MfG ChrisB

        --
        Light travels faster than sound - that's why most people appear bright until you hear them speak.
        1. ok ich bin anfaenger auf dem gebiet waere ganz lieb wenn mir einer ein kurzes beispiel oder ein link zu einem beispiel posten koennte.
          viele gruesse,
          dennis

          1. Hi,

            ok ich bin anfaenger auf dem gebiet waere ganz lieb wenn mir einer ein kurzes beispiel oder ein link zu einem beispiel posten koennte.

            http://tut.php-quake.net/de/sessions.html
            http://www.php.net/manual/en/book.session.php

            MfG ChrisB

            --
            Light travels faster than sound - that's why most people appear bright until you hear them speak.
            1. ok...danke...trotzdem habe ich irgendwas falsch gemacht:
              index.php:
              <?php include('lang.php'); ?>

              lang.php:

              <?php session_start();  
                
              if ($HTTP_PODT_VARS['lang'])  
                 {  
                 session_register ("lang")  
                 $sid = session_id();  
                 }  
                
              if ($sid == "")  
                 {  
                 session_register("en-GB")   //Hiermit möchte ich bezwecken, dass wen keine   Sprache ausgewählt wurde, Englisch gewählt wird.  
                 }  
                
              else  
                 {  
                 include ($lang.".php");  
                 }
              

              liebe gruesse,
              dennis

              1. if ($HTTP_PODT_VARS['lang'])

                daran liegts nicht nur vertippt! sorry

                1. ok mittlerweile bin ich soweit
                  <?php

                  session_start ();

                  if ($_GET['lang'])
                  {
                  session_register ($_GET['lang']);
                  $sid = session_id();
                  }

                  if ($sid == "")
                  {
                  include ('de-DE.php');
                  }

                  else
                  {
                  include ($_GET['lang'].".php");
                  }
                  ?>

                  Problem:
                  wenn ich die seite direkt über index.php aufrufe wird de-DE benutzt.
                  wenn ich die seite ueber index.php?lang=en-GB aufrufe wird en-GB benutzt.

                  Nur wenn ich jetzt erneut wieder direkt index.php aufrufe wurde englisch nicht aktiviert, d.h. es wird wieder deutsch angezegit.

                  wie loes ich dieses problem?

                  1. Hello,

                    ok mittlerweile bin ich soweit
                    <?php

                    session_start ();

                    if (isset($_GET['lang']))
                      {
                         $_SESSION['lang'] = $_GET['lang'];
                      }

                    So würde die Sprache immer nue gesetzt werden, wenn dies per Get-Request gefordert wird.

                    Wenn nun kein Sprachparameter mehr mitgeschickt wird, soll aber trotzdem eine Sprache definiert sein. Das machstg Du, indem Du in die Session schaust, was dort eingetragen ist.

                    if (!isset($_SESSION['lang']))
                       {
                           ## Standardsprache setzen
                           ## ...
                       }
                       else
                       {
                           ## prüfen ob $_SESSION['lang'] gültig ist
                           ## wenn nicht eine gültige Standardsprache setzen
                       }

                    ## Hier die eingestellte Sprache laden

                    Liebe Grüße aus dem schönen Oberharz

                    Tom vom Berg

                    --
                    Nur selber lernen macht schlau
                    http://bergpost.annerschbarrich.de
                    1. also wenn ich das jetzt richtig verstanden habe so

                      $_SESSION['lang'] = $_GET['lang'];  
                        
                      if (!isset ($_SESSION['lang']))  
                      {  
                      include ($_SESSION['lang'].".php");  
                      }  
                      else  
                      {  
                      include ('de.php')  
                      }
                      
                      1. Hello,

                        also wenn ich das jetzt richtig verstanden habe so

                        Nein!

                        Ich hatte es Dir anders aufgeschrieben!
                        Du musstest es doch niur abschreiben!

                        !

                        So würde $_SESSION['lang'] immer mit false überschrieben werden, wenn im Get-Request keine Sprache angegeben war.

                        Liebe Grüße aus dem schönen Oberharz

                        Tom vom Berg

                        --
                        Nur selber lernen macht schlau
                        http://bergpost.annerschbarrich.de
                        1. irgendwas versteh ich dann falsch

                          if (!isset($_SESSION['lang']))
                             {
                                 ## Dasheißt doch wenn $SESSION['lang'] exisitiert, soll ich hier
                                 ## die standardsprache Deutsch einfügen
                             }
                             else
                             {
                                 ## prüfen ob $_SESSION['lang'] gültig ist (ist doch oben schon)
                                 ## wenn nicht eine gültige Standardsprache setzen (ist doch auch oben schon)
                             }

                          ## Hier die eingestellte Sprache laden (???)

                          sorry, ich verstehs einfach nicht. Könntest du es vielleicht mir zuliebe kommplett ausschreiben. wäre echt super.
                          leibe gruesse, dennis

                          1. Hello,

                            irgendwas versteh ich dann falsch

                            Oh Mann! Also nochmal... :-)

                            <?php

                            ## fürs Debugging:
                                error_reporting(E_ALL);
                                ini_set('display_errors, 1);

                            session_start();

                            ## erlaubte Werte für Language
                                $_lang = array('de','fr','en','es');  ### und so weiter

                            ## Sprache neu setzen, wenn dies gefordert wurde
                                if (isset($_GET['lang']))
                                {
                                    ## Prüfen ob die angeforderte Sprache einen erlaubten Wert enthält
                                    if (in_array($_GET['lang'], $_lang))
                                    {
                                        $_SESSION['lang'] = $_GET['lang'].'.php';
                                    }
                                }

                            if (!isset($_SESSION['lang']))
                                {
                                    ## Das heißt doch, wenn $SESSION['lang'] NICHT exisitiert, soll ich hier
                                    ## die standardsprache Deutsch einfügen
                                    ## genau!
                                    $_SESSION['lang'] = 'de.php';
                                }

                            ## Hier die eingestellte Sprache laden
                                include ($_SESSION['lang']);

                            Das include mit einem Wert aus einem Request darfst Du nur durchführen, wenn Du diesen vorher auf erlaubte Werte gecheckt hast. Andernfalls könnte der Client hier jedes File, dass für PHP auf deinem Server erreichbar ist, oder sogar welche von außen (über http://) includen lassen. Damit könnte man Deinen Server übernehmen.

                            So, wie das include jetzt durchgeführt wird, muss sichergestellt sein, dass es die erlaubten Dateien auch gibt. Sonst müsstest Du noch zusätzlich mit is_readable() prüfen.
                            http://de.php.net/manual/en/function.is-readable.php

                            Liebe Grüße aus dem schönen Oberharz

                            Tom vom Berg

                            --
                            Nur selber lernen macht schlau
                            http://bergpost.annerschbarrich.de
                            1. super genauso hab ichs mir vorgestellt...ich weiß das du dafür jetzt auch Geld verlangen könntest aber Danke nochmal.
                              Und so ist jetzt sichergestellt, das die Sprache auch noch funktioniert, wenn keine $_Get-Variable mehr existiert?
                              lg, dennis

                              1. Hello,

                                super genauso hab ichs mir vorgestellt...ich weiß das du dafür jetzt auch Geld verlangen könntest aber Danke nochmal.

                                Samstags nie :-)

                                Und so ist jetzt sichergestellt, das die Sprache auch noch funktioniert, wenn keine $_Get-Variable mehr existiert?

                                Probier es doch aus.
                                Aber es sollte Dir auch möglich sein, den Code nachzuvollziehen.

                                Liebe Grüße aus dem schönen Oberharz

                                Tom vom Berg

                                --
                                Nur selber lernen macht schlau
                                http://bergpost.annerschbarrich.de
                                1. ok...guten morgen sonntag und weiter gehts..
                                  den satzt mit den 4 stunden nehm ich zurück war besser so...

                                  also folgendes:

                                  <?php  
                                      session_start();  
                                    
                                      ## erlaubte Werte für Language  
                                      $_lang = array('de-DE','fr-FR','en-GB','es-ES');  ### und so weiter  
                                    
                                      ## Sprache neu setzen, wenn dies gefordert wurde  
                                      if (isset($_GET['lang']))  
                                      {  
                                          ## Prüfen ob die angeforderte Sprache einen erlaubten Wert enthält  
                                          if (in_array($_GET['lang'], $_lang))  
                                          {  
                                              $_SESSION['lang'] = $_GET['lang'].'.php';  
                                          }  
                                      }  
                                    
                                      if (!isset($_SESSION['lang']))  
                                      {  
                                          ## Das heißt doch, wenn $SESSION['lang'] NICHT exisitiert, soll ich hier  
                                          ## die standardsprache Deutsch einfügen  
                                          ## genau!  
                                          $_SESSION['lang'] = 'de-DE.php';  
                                      }  
                                    
                                      ## Hier die eingestellte Sprache laden  
                                      include ($_SESSION['lang']);  
                                  ?>
                                  

                                  funktioniert auch einwandfrei...
                                  und ist das jetzt so sicher?
                                  wenn ich allerdings eine falsche sprache einstelle bekomme ich genauso fehlermeldungen..."no such file or directiory". ich möchte dann aber auch eine bestimmte seite verweisen.
                                  D.h. wenn die Sprache nicht existiert, möchte ich auf die seite error.php
                                  lg, dennis

                                  1. Hello,

                                    wenn ich allerdings eine falsche sprache einstelle bekomme ich genauso fehlermeldungen..."no such file or directiory".

                                    Die Meldung brauche ich vollständig!
                                    Welches File wurde denn gesucht?
                                    Auf welchem System testet Du?
                                    Es könnte sein, dass da noch eine alte Session vorhanden ist, die wiederaufgenommen wird.

                                    ich möchte dann aber auch eine bestimmte seite verweisen.
                                    D.h. wenn die Sprache nicht existiert, möchte ich auf die seite error.php

                                    Ich hatte Dich ja schon darauf hingewiesen, dass Du das Include noch mit einem is_readable() absichern kannst.

                                    statt:

                                    ## Hier die eingestellte Sprache laden
                                        include ($_SESSION['lang']);

                                    setze:

                                    ## Hier die eingestellte Sprache laden, wenn vorhanden
                                        if (is_readable($_SESSION['lang']))
                                        {
                                            include_once ($_SESSION['lang']);
                                        }
                                        else
                                        {
                                            ## Fehlerbehandlung wegen nicht lesbarer oder nicht vorhandener Sprachdatei,
                                            ## was aber nur in Ausnahmefällen zutreffen dürfte, da ja zu jeder erlaubten
                                            ## Sprache auch eine Datei gehören sollte
                                        }

                                    Ich hoffe, dass ich da jetzt selber keinen Denkfehler gemacht habe, es dürfte überhaupt nicht zur von Dir beschriebenen Fehlermeldung führen, wenn Du für jede erlaubte Sprache auch eine Sprachdatei hast. Dann könnte nur noch eine alte Eintragung in $_SESSION vorhanden sein, für die es keine Datei gibt.

                                    Liebe Grüße aus dem schönen Oberharz

                                    Tom vom Berg

                                    --
                                    Nur selber lernen macht schlau
                                    http://bergpost.annerschbarrich.de
                                    1. Ok....also das ganze sieht jetzt so aus:
                                      Funktioniert auch alles einwandfrei.
                                      Wenn ich jetzt irgendeinwert eingebe (zb: lang=reingelegt) bleibt die alte Sprache vorhanden udn es kommt keine fehlermeldung!!!

                                      <?php  
                                        
                                      // mehr brauchst nicht,  
                                      // es sei denn Du willst noch ne Abfrage  
                                      // nach der Browsersprache machen  
                                      session_start();  
                                        
                                      $lang_array = array('de-DE', 'en-GB', 'es-ES', 'it-IT', 'fr-FR');  
                                        
                                      // erster Seitenaufruf ? dann ist die voreingestellte Sprache deutsch  
                                      if (!isset($_SESSION['lang'])) $_SESSION['lang'] = 'de-DE';  
                                        
                                      // Sprachwechsel ? dann Sprache aus GET-Variable übernehmen  
                                      if (isset($_GET['lang']) && in_array($_GET['lang'], $lang_array))  
                                      {  
                                        $_SESSION['lang'] = $_GET['lang'];  
                                      }  
                                        
                                        include ($_SESSION['lang'].'.php');  
                                        
                                      ?>
                                      

                                      da ist es eigentlich vollkommen unnötig eine fehlermeldung einzubauen. Entschuldigung ich habe einen Denkfehler gemacht.
                                      Und das ganze kann ich jetzt wie du gesagt hast noch durch is-readable() absichern. Müsste dann so aussehen oder:

                                      <?php  
                                        
                                      // mehr brauchst nicht,  
                                      // es sei denn Du willst noch ne Abfrage  
                                      // nach der Browsersprache machen  
                                      session_start();  
                                        
                                      $lang_array = array('de-DE', 'en-GB', 'es-ES', 'it-IT', 'fr-FR');  
                                        
                                      // erster Seitenaufruf ? dann ist die voreingestellte Sprache deutsch  
                                      if (!isset($_SESSION['lang'])) $_SESSION['lang'] = 'de-DE';  
                                        
                                      // Sprachwechsel ? dann Sprache aus GET-Variable übernehmen  
                                      if (isset($_GET['lang']) && in_array($_GET['lang'], $lang_array))  
                                      {  
                                        $_SESSION['lang'] = $_GET['lang'];  
                                      }  
                                        
                                      if (is_readable($_SESSION['lang'].'.php'))  
                                      {  
                                        include ($_SESSION['lang'].'.php');  
                                      }  
                                      else  
                                      {  
                                         print "Error";  
                                      }  
                                      ?>
                                      
                                      1. Hello,

                                        Ok....also das ganze sieht jetzt so aus:
                                        Funktioniert auch alles einwandfrei.
                                        Wenn ich jetzt irgendeinwert eingebe (zb: lang=reingelegt) bleibt die alte Sprache vorhanden udn es kommt keine fehlermeldung!!!

                                        Und das ganze kann ich jetzt wie du gesagt hast noch durch is-readable() absichern. Müsste dann so aussehen oder:

                                        <?php

                                        // mehr brauchst nicht,
                                        // es sei denn Du willst noch ne Abfrage
                                        // nach der Browsersprache machen

                                        session_start();

                                        $lang_array = array('de-DE', 'en-GB', 'es-ES', 'it-IT', 'fr-FR');

                                        // erster Seitenaufruf ? dann ist die voreingestellte Sprache deutsch
                                        if (!isset($_SESSION['lang'])) $_SESSION['lang'] = 'de-DE';

                                        // Sprachwechsel ? dann Sprache aus GET-Variable übernehmen
                                        if (isset($_GET['lang']) && in_array($_GET['lang'], $lang_array))
                                        {
                                          $_SESSION['lang'] = $_GET['lang'];
                                        }

                                        if (is_readable($_SESSION['lang'].'.php'))
                                        {
                                          include ($_SESSION['lang'].'.php');
                                        }
                                        else
                                        {
                                           print "Error";
                                        }
                                        ?>

                                          
                                        So sieht es gut aus.  
                                          
                                        Wobei ich nicht einfach "Error" \_ausgeben\_ würde, sondern ein Fehlerflag setzen würde, was dann von den nachfolgenden Modulen ausgewertet werden kann. Dann ist die Chance größer, dass der User trotzdem immer ein valides HTML-Dokument bekommt, wenn auch mit für ihn wenig nützlichem Inhalt.  
                                          
                                          
                                          
                                          
                                          
                                        Liebe Grüße aus dem schönen Oberharz  
                                          
                                          
                                        Tom vom Berg  
                                        ![](http://selfhtml.bitworks.de/Virencheck.gif)  
                                          
                                        
                                        -- 
                                        Nur selber lernen macht schlau  
                                        <http://bergpost.annerschbarrich.de>
                                        
                                        1. ok...hab das so jetzt mal getest...leider funktionierts jetzt nicht mehr...die sprache wird nicht mehr geladen....ohne fehlermeldung

                                          1. doch die fehlermeldung "error" erscheint"
                                            aber die datei existiert!!!

                                            1. Hello,

                                              doch die fehlermeldung "error" erscheint"
                                              aber die datei existiert!!!

                                              Wo stehen denn die Sprachdateien?
                                              Stehen die im selben Verzeichnis, wie Deine Script-Datei?
                                              Oder hast Du sie ins include-Dir gepackt?

                                              Liebe Grüße aus dem schönen Oberharz

                                              Tom vom Berg

                                              --
                                              Nur selber lernen macht schlau
                                              http://bergpost.annerschbarrich.de
                                              1. das script und die datei im selben verzeichnis

                                                1. Hello,

                                                  das script und die datei im selben verzeichnis

                                                  Lass Dir doch nicht jeden Wurm einzeln aus der Nase ziehen!

                                                  Welches OS?
                                                  Was für ein Filesystem?
                                                  Wie sind die Rechte eingestellt?
                                                  Wird die Datei vielleicht noch von Deinem Editor gesperrt gehalten?

                                                  Liebe Grüße aus dem schönen Oberharz

                                                  Tom vom Berg

                                                  --
                                                  Nur selber lernen macht schlau
                                                  http://bergpost.annerschbarrich.de
                                                  1. editor sperrt nichts.
                                                    verzeichniss lang = 775
                                                    datei de-DE.php = 644
                                                    datei lang.php = 644

                                                    os, filesystem = ?

                                                    Apache/2.2 Server

                                                    1. Hello,

                                                      editor sperrt nichts.
                                                      verzeichniss lang = 775
                                                      datei de-DE.php = 644
                                                      datei lang.php = 644

                                                      os, filesystem = ?

                                                      Apache/2.2 Server

                                                      ist bei diesem Host der safe_mode aktiviert?

                                                      Funktioniert es denn ohne "is_readable()"?
                                                      Dann muss es auch mit funktionieren. Ein File, das Du nicht lesen kannst, kannst Du auch nicht includen.

                                                      Liebe Grüße aus dem schönen Oberharz

                                                      Tom vom Berg

                                                      --
                                                      Nur selber lernen macht schlau
                                                      http://bergpost.annerschbarrich.de
                                                      1. Hello,

                                                        Hello,

                                                        editor sperrt nichts.
                                                        verzeichniss lang = 775
                                                        datei de-DE.php = 644
                                                        datei lang.php = 644

                                                        os, filesystem = ?

                                                        Apache/2.2 Server

                                                        ist bei diesem Host der safe_mode aktiviert?

                                                        Funktioniert es denn ohne "is_readable()"?
                                                        Dann muss es auch mit funktionieren. Ein File, das Du nicht lesen kannst, kannst Du auch nicht includen.

                                                        ABER (nur zur Vollständigkeit fürs Archiv): liegt das File im safe_mode_include_dir, dann kann man es includen, aber nicht normal lesen... Du hast aber bestätigt, dass die Files im selben Verzeichnis liegen, wie das Script und _nicht_ im safe_mode_include_dir.

                                                        Da hier keine Antwort mehr kommt, wollte ich das nicht schuldig bleiben.

                                                        Liebe Grüße aus dem schönen Oberharz

                                                        Tom vom Berg

                                                        --
                                                        Nur selber lernen macht schlau
                                                        http://bergpost.annerschbarrich.de
                                                        1. sorry ich musste gestern abend überraschend weg.
                                                          also es liegt nicht im safe_mode_include_dir!
                                                          liegt im selben ordner wie das script
                                                          aber ohne is_readable funktioniert es???
                                                          lg, dennis

                                                          1. Hello,

                                                            sorry ich musste gestern abend überraschend weg.
                                                            also es liegt nicht im safe_mode_include_dir!
                                                            liegt im selben ordner wie das script

                                                            aber ohne is_readable funktioniert es

                                                            Das kann ich mir nicht weiter erklären.
                                                            Da kann ich nur noch Tippfehler oder sonstige Dinge vermuten, die ich nicht sehen kann.

                                                            Vielleicht fällt ja sonst noch jemand 'was ein.

                                                            Liebe Grüße aus dem schönen Oberharz

                                                            Tom vom Berg

                                                            --
                                                            Nur selber lernen macht schlau
                                                            http://bergpost.annerschbarrich.de
                                                            1. hab gerade nochmal was ausprobiert und zwar folgendes
                                                              hab mal echo getcwd(); eingegeben ins script an ende
                                                              spuckt folgendes aus:

                                                              Error/users/meinname/www/HAUPTVERZEICHNIS/doc/web-manuals

                                                              1. Lösung:

                                                                  
                                                                <?php  
                                                                  
                                                                session_start();  
                                                                  
                                                                $lang_array = array('de-DE', 'en-GB', 'es-ES', 'it-IT', 'fr-FR'); //Alle verfügbaren Sprache im Fomat sprache-LAND  
                                                                  
                                                                // Erster Seitenaufruf? Dann ist die voreingestellte Sprache Deutsch!  
                                                                if (!isset($_SESSION['lang'])) $_SESSION['lang'] = 'de-DE';  
                                                                  
                                                                // Sprachwechsel? Dann Sprache aus GET-Variable übernehmen und "speichern"  
                                                                if (isset($_GET['lang']) && in_array($_GET['lang'], $lang_array))  
                                                                {  
                                                                  $_SESSION['lang'] = $_GET['lang'];  
                                                                }  
                                                                  
                                                                if (file_exists('../../lang/' . $_SESSION['lang'].'.php'))  
                                                                {  
                                                                  include ('../../lang/' . $_SESSION['lang'].'.php');  
                                                                }  
                                                                else  
                                                                {  
                                                                   print "Error. The language is not available. Please inform the administrator";  
                                                                   //DIese Fehlermeldung wird nur angezeigt, wenn einer der oben erlaubten Sprachdateien gelöscht oder nicht verfügbar ist.  
                                                                }  
                                                                ?>  
                                                                
                                                                
                                                                1. Hello,

                                                                  Lösung:

                                                                  <?php

                                                                  session_start();

                                                                  $lang_array = array('de-DE', 'en-GB', 'es-ES', 'it-IT', 'fr-FR'); //Alle verfügbaren Sprache im Fomat sprache-LAND

                                                                  // Erster Seitenaufruf? Dann ist die voreingestellte Sprache Deutsch!
                                                                  if (!isset($_SESSION['lang'])) $_SESSION['lang'] = 'de-DE';

                                                                  // Sprachwechsel? Dann Sprache aus GET-Variable übernehmen und "speichern"
                                                                  if (isset($_GET['lang']) && in_array($_GET['lang'], $lang_array))
                                                                  {
                                                                    $_SESSION['lang'] = $_GET['lang'];
                                                                  }

                                                                  if (file_exists('../../lang/' . $_SESSION['lang'].'.php'))
                                                                  {
                                                                    include ('../../lang/' . $_SESSION['lang'].'.php');
                                                                  }
                                                                  else
                                                                  {
                                                                     print "Error. The language is not available. Please inform the administrator";
                                                                     //DIese Fehlermeldung wird nur angezeigt, wenn einer der oben erlaubten Sprachdateien gelöscht oder nicht verfügbar ist.
                                                                  }
                                                                  ?>

                                                                  
                                                                  >   
                                                                    
                                                                  Wobei das mMn sachlich falsch ist.  
                                                                    
                                                                  Ich habe mich aber schon gewundert, wieso Christian Seiler in seinem Beispiel zum Autoloader (ist ein anderes Hauptthema, aber eine ähnlicher Zusammenhang bzüglich Verfügbarkeitstest) file\_exists() benutzt und nicht is\_readable(), obwohl er es sonst immer sehr genau nimmt.  
                                                                  Ein File, das vorhanden ist, muss nämlich nicht unbedingt lesbar sein. Is\_readable() wäre also die richtige Funktion.  
                                                                    
                                                                  Da gibt es also noch ein dunkles Geheimnis.  
                                                                    
                                                                  Mal sehen, ob sich das noch klären lässt.  
                                                                    
                                                                    
                                                                    
                                                                    
                                                                  Liebe Grüße aus dem schönen Oberharz  
                                                                    
                                                                    
                                                                  Tom vom Berg  
                                                                  ![](http://selfhtml.bitworks.de/Virencheck.gif)  
                                                                    
                                                                  
                                                                  -- 
                                                                  Nur selber lernen macht schlau  
                                                                  <http://bergpost.annerschbarrich.de>
                                                                  
                            2. Funktioniert einwandfrei.
                              Jetzt stellt euch mal vor jemand hätte gleich auf meine Frage das gepostet:

                              <?php  
                              session_start();  
                                
                              if (isset($_GET['lang']))  
                              {  
                                $_SESSION['lang'] = $_GET['lang']; //Hiermit wird sichergestellt, das der GET-Wert verwendet wird, wenn er verfügbar ist.  
                              }  
                              else if (!isset($_SESSION['lang'])) // falls in Session noch keine Sprache eingetragen worden ist, Standardsprache "Deutsch" setzen.  
                              {  
                                $_SESSION['lang'] = 'de-DE'; //Sprachkürzel angeben.  
                              }  
                                
                                
                              include $_SESSION['lang'] . '.php'; //Hiermit wird dann die entsprechende Sprachdatei inkludiert.  
                              ?>
                              

                              es wären mir (siehe Postingszeiten) 4 Stunden erspart geblieben.
                              an dieser stell gruß an chris ;-)
                              bis dann, dennis

                              1. Hello,

                                Funktioniert einwandfrei.

                                Das sieht nur so aus. Warts ab, bis jemand Dir eine Sprache einstellt, die Du nicht vorgesehen hast.

                                Und meinen Sicherheitshinweis hast Du acuh nicht berücksichtigt.

                                include $_SESSION['lang'] . '.php'; //Hiermit wird dann die entsprechende Sprachdatei inkludiert.

                                Das glaubst aber nur DU!

                                Liebe Grüße aus dem schönen Oberharz

                                Tom vom Berg

                                --
                                Nur selber lernen macht schlau
                                http://bergpost.annerschbarrich.de
                              2. Hi,

                                Funktioniert einwandfrei.
                                Jetzt stellt euch mal vor jemand hätte gleich auf meine Frage das gepostet:

                                Das hätte *keiner* machen "dürfen" - Tom hat ja schon darauf hingewiesen, dass da noch eine eklatante Sicherheitslücke drin steckt.

                                es wären mir (siehe Postingszeiten) 4 Stunden erspart geblieben.

                                Also noch vier Stunden Lernzeit deinerseits weniger - dabei zeigst du ja, wie nötig du sie noch brauchst.

                                MfG ChrisB

                                --
                                Light travels faster than sound - that's why most people appear bright until you hear them speak.
                              3. Mahlzeit dennis94m,

                                Jetzt stellt euch mal vor jemand hätte gleich auf meine Frage das gepostet:

                                Dann hätte er Dich in falsche Sicherheit gewiegt, Du hättest NOCH weniger Ahnung von der gesamten Problematik und würdest weiterhin nur zusammengeklaute Codefetzen solange aneinanderstoppeln, bis keine offensichtlichen Fehlermeldungen mehr nerven.

                                Bist Du Dir sicher, dass Du das willst?

                                es wären mir (siehe Postingszeiten) 4 Stunden erspart geblieben.

                                Sieh's mal anders: Du hättest 4 Stunden weniger Zeit gehabt, Dich mit der Problematik auseinanderzusetzen (und offenbar war bereits das zu wenig!).

                                Im Übrigen sind wir hier im "SELF"HTML-Forum ... nicht bei "Ich-hab-keine-Ahnung,-wie-ich-das,-was-ich-will,-umsetzen-kann-und-auch-keinen-Bock-auf-Lernen-oder-so,-aber-hier-gibt's-bestimmt-haufenweise-Deppen,-die-mir-mal-eben-schnell-funzende-Proggies-coden"HTML.

                                MfG,
                                EKKi

                                --
                                sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
              2. Hi,

                if ($HTTP_POST_VARS['lang'])

                Welche Uralt-PHP-Version nutzt du, in der das noch nötig ist?
                Aktuell ist $_POST.

                session_register ("lang")

                Welche Uralt-PHP-Version nutzt du, in der das noch nötig ist?
                Aktuell ist $_SESSION.

                if ($sid == "")
                   {
                   session_register("en-GB")   //Hiermit möchte ich bezwecken, dass wen keine   Sprache ausgewählt wurde, Englisch gewählt wird.

                Dann frage ab, ob die Session-Variable einen Wert enthält.

                MfG ChrisB

                --
                Light travels faster than sound - that's why most people appear bright until you hear them speak.
  2. Hallo,

    Nun muss ich aber teilweise formulare auch per "post" abschicken und habe auch bei anderen aktionen gemerkt das das anhaengsel "lang=xx" verschwindet.

    Das kann normalerweise nicht passieren, wenn du ?lang= im action-Attribut des Formulars festlegst.

    Bei GET-Formularen erstelltst du ein verstecktes input-Feld mit den entsprechenden Werten.

    Nebenbei: Starte php-Abschnitte immer mit <?php :-)

    Gruß

  3. hab das ganze wie folgt geloest

    <?php  
      
    session_start ();  
      
    $_SESSION["lang"] = ($_GET["lang"]);  
      
    include ($_SESSION['lang'].".php");  
      
    ?>
    

    Problem: Sobald ich die URL-Variable "lang" entferne funktioniert nichts mehr. Sie wie kann ich die session speichern?

  4. hi,

    hab mal wieder eine frage und zwar habe ich vor meine webseite in deutsch und englisch anzubieten. dazu habe ich im ordner "lang" die dateien de.php und en.php erstellt. in diesen php-Dateien sind dann die einzelnen variablen festgelegt.

    Ich habe mir jetzt diesen Thread durch gelesen und möchte eine Alternative zu SESSION vorschlagen, wobei ich noch nicht ganz nachvollziehen kann, warum so eine wichtige Funktion von einer SESSION und GET abhängig gemacht wird.

    Wie dem auch sei, wenn du die möglichkeit hast, Subdomains anzulegen, dann lege eine für deutsch an, bspw. „de.example.org“.
    Diese Domain lässt du auf dein Root (/) zeigen, sprich, egal, ob du mit oder ohne das „de.“ in der URI die Seite aufrufst, bekommst du immer die gleiche index.php angezeigt.

    Nun kannst du mittels [link:http://de2.php.net/manual/de/reserved.variables.server.php@title=$_SERVER['HTTP_HOST'\]] prüfen, ob „de.“ im Host vorkommt, wenn ja, inkludierst du die „de.php“, wenn nein, dann wird immer „en.php“ inkludiert.

    Grob vereinfacht bzw. die prüfung, ob „de.“ oder nicht, überlasse ich dir ;)

    if (HOST == 'de.')  
    {  
      require_once 'de.php';  
    }  
    else  
    {  
      require_once 'en.php';  
    }
    

    Diese Variante hat den Vorteil, dass du nichts in der URI mitschleppen, also jedem Link innerhalb deiner Seite nicht noch irgend welche Parameter mit geben musst, denn du kannst nicht immer davon ausgehen, dass Cookies bei jedem akzeptiert werden.

    Zur Ergänzung kannst du noch den Client fragen, welche Sprache er bevorzugt, und dementsprechend den Client direkt auf die richtige Seite weiterleiten.

    Ermitteln der Sprache des Browsers mittels PHP
    Alternative Dokumentinhalte via HTTP

    mfg

    --
    echo '<pre>'; var_dump($Malcolm_Beck`s); echo '</pre>';
    array(2) {
      ["SELFCODE"]=>
      string(74) "ie:( fl:) br:> va:? ls:? fo:) rl:| n4:# ss:{ de:? js:} ch:? sh:( mo:? zu:("
      ["Meaningful"]=>
      string(?) "Der Sinn des Lebens ist deinem Leben einen Sinn zu geben"
    }
    1. Moin!

      Grob vereinfacht bzw. die prüfung, ob „de.“ oder nicht, überlasse ich dir ;)

      if (HOST == 'de.')

      {
        require_once 'de.php';
      }
      else
      {
        require_once 'en.php';
      }

        
      Ach, [du bist Schuld an diesem Thread](https://forum.selfhtml.org/?t=186398&m=1237915)...  
        
       - Sven Rautenberg
      
      1. hi,

        Ach, du bist Schuld an diesem Thread...

        Mitgehangen, mitgefangen.

        mfg

        --
        echo '<pre>'; var_dump($Malcolm_Beck`s); echo '</pre>';
        array(2) {
          ["SELFCODE"]=>
          string(74) "ie:( fl:) br:> va:? ls:? fo:) rl:| n4:# ss:{ de:? js:} ch:? sh:( mo:? zu:("
          ["Meaningful"]=>
          string(?) "Der Sinn des Lebens ist deinem Leben einen Sinn zu geben"
        }
  5. @@dennis94m:

    nuqneH

    Also wenn ein User dann auf "example.php?lang=de" geht kommt die seite in deutsch bzw. wenn er auf "example.php?lang=en" geht kommt die seite in englisch.

    Sollte man einem Nutzer zusätzliche Arbeit aufbürden, die sein Browser doch für ihn automatisch erledigen kann? Nein, sollte man natürlich nicht. Beschäftige dich mit Sprachvereinbarung! Und s.a. diese Lösung mit Cookies

    Qapla'

    --
    Bildung lässt sich nicht downloaden. (Günther Jauch)
    1. Hello,

      Sollte man einem Nutzer zusätzliche Arbeit aufbürden, die sein Browser doch für ihn automatisch erledigen kann?

      Meinst Du etwa dieses leidige Feature, dass die früher bei PHP auch immer benutzt haben?
      Immer, wenn ich die englische Manualseite haben wollte, kam nach einigen Links wieder automaitsch die deutsche. :-)

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Hi,

        »» Sollte man einem Nutzer zusätzliche Arbeit aufbürden, die sein Browser doch für ihn automatisch erledigen kann?
        Meinst Du etwa dieses leidige Feature, dass die früher bei PHP auch immer benutzt haben?

        offensichtlich haben die was anderes benutzt.

        Immer, wenn ich die englische Manualseite haben wollte, kam nach einigen Links wieder automaitsch die deutsche. :-)

        Ja, das hat mich auch schon ungefähr (n+1) mal genervt. Also kann's nicht Language Negotiation sein: Die Information, welche Sprache ich gerne hätte, sendet mein Browser ja schließlich mit jedem Request wieder aufs neue mit.

        Ciao,
         Martin

        --
        Die Zeit, die man zur Fertigstellung eines Projekts wirklich braucht, ist immer mindestens doppelt so lang wie geplant.
        Wurde dieser Umstand bei der Planung bereits berücksichtigt, gilt das Prinzip der Rekursion.
        1. Hello,

          Ja, das hat mich auch schon ungefähr (n+1) mal genervt. Also kann's nicht Language Negotiation sein: Die Information, welche Sprache ich gerne hätte, sendet mein Browser ja schließlich mit jedem Request wieder aufs neue mit.

          Woher hat er die denn?

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
          Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
          1. Hi,

            »» Ja, das hat mich auch schon ungefähr (n+1) mal genervt. Also kann's nicht Language Negotiation sein: Die Information, welche Sprache ich gerne hätte, sendet mein Browser ja schließlich mit jedem Request wieder aufs neue mit.
            Woher hat er die denn?

            von mir, woher sonst?

            So long,
             Martin

            --
            Männer sind ungerecht: Sie sehen immer nur den Baum, den eine Frau mit dem Auto gerammt hat. Aber die vielen Bäume, die sie nicht einmal gestreift hat, sehen sie nicht.
          2. @@Tom:

            nuqneH

            »» Die Information, welche Sprache ich gerne hätte, sendet mein Browser ja schließlich mit jedem Request wieder aufs neue mit.

            Woher hat er die denn?

            Grmpf, du hast den Artikel wirklich nicht gelesen.

            Qapla'

            --
            Bildung lässt sich nicht downloaden. (Günther Jauch)
        2. @@Der Martin:

          nuqneH

          »» Immer, wenn ich die englische Manualseite haben wollte, kam nach einigen Links wieder automaitsch die deutsche. :-)

          Ja, das hat mich auch schon ungefähr (n+1) mal genervt. Also kann's nicht Language Negotiation sein: Die Information, welche Sprache ich gerne hätte, sendet mein Browser ja schließlich mit jedem Request wieder aufs neue mit.

          Wäre natürlich cool, wenn man seinen Browser nicht nur sagen lassen könnte „lieber deutsch als englisch“, sondern „lieber ein englisches Original als eine deutsche Übersetzung; ist das Original aber nicht englisch, dann lieber die deutsche Übersetzung als die englische“.

          Ich erinnere mich, dass das mal auf der W3C-I18n-Mailingliste diskutiert wurde.

          Qapla'

          --
          Bildung lässt sich nicht downloaden. (Günther Jauch)
          1. Hallo Gunnar,

            Wäre natürlich cool, wenn man seinen Browser nicht nur sagen lassen könnte „lieber deutsch als englisch“, sondern „lieber ein englisches Original als eine deutsche Übersetzung; ist das Original aber nicht englisch, dann lieber die deutsche Übersetzung als die englische“.

            huii, das hört sich nach einem phantastischen Traum an. Wobei ich das für mich etwas anders formulieren würde: Wenn und nur wenn das Original in deutscher Sprache vorliegt, dann bitte das deutsche Original, sonst die englische Fassung; wenn's die nicht gibt, dann meinetwegen auch niederländisch.

            Ich erinnere mich, dass das mal auf der W3C-I18n-Mailingliste diskutiert wurde.

            Mit welchem Erfolg? "Reden wir nächstes Jahr nochmal drüber"?

            Ciao,
             Martin

            --
            Was du heute kannst besorgen,
            das geht sicher auch noch morgen.
      2. @@Tom:

        nuqneH

        Meinst Du etwa dieses leidige Feature, dass die früher bei PHP auch immer benutzt haben?

        Leidig?

        Du hast den Artikel
        [ ] nicht gelesen.
        [ ] nicht verstanden.

        Immer, wenn ich die englische Manualseite haben wollte, kam nach einigen Links wieder automaitsch die deutsche. :-)

        Die Problematik wurde im Artikel angesprochen und es wurden Lösungen vorgestellt.

        Sprachvereinbarung sollte immer stattfinden, wenn ein Nutzer das erste Mal auf die Website kommt.

        Qapla'

        --
        Bildung lässt sich nicht downloaden. (Günther Jauch)