Sprache in zentraler Datei ablegen

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

  • Sprache in zentraler Datei ablegen

    Hallo,

    ich entwickle gerade an einem Backend, dort sollen alle Texte aus einer separaten Sprachdatei kommen, damit man später leichter übersetzen und umschalten kann.

    Im HTML der PHP-Datei habe ich überall Platzhalter erstellt:
    Code:
    <a href="#"><img src="i/logout.gif" alt="{LOGOUT}" title="{LOGOUT_TITLE}"/></a>
    Dann eine Sprachdatei erstellt mit folgendem Inhalt:
    Code:
    $lang['LOGOUT'] = 'Logout';
    $lang['LOGOUT_TITLE'] = 'Klicken Sie hier um sich auszuloggen';
    Wie muss ich denn nun vorgehen, um die Platzhalter im HTML mit denen der Sprachdatei zu ersetzen?
    Gruß,
    Peter

  • #2
    PHP-Code:
    echo "<a href=\"#\"><img src=\"i/logout.gif\" alt=\"" $lang[LOGOUT_TITLE] .
         
    "\" title=\"" $lang[LOGOUT] . "\"/></a>" 
    Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

    Kommentar


    • #3
      Verstehe das nicht, es ersetzt mir alles mit einem "d". Keine Fehlermeldungen, es wird nur jedes $lang['platzhalter'] mit einem "d" ersetzt???
      Gruß,
      Peter

      Kommentar


      • #4
        Hm? das is aber komisch. Hast du denn die Variablen vorher aktiviert (das Script durchgeführt in der sie initialisiert werden)?

        Falls nicht solltest du das vorher tun, ansonsten..
        Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

        Kommentar


        • #5
          Wieso muss ich sie denn aktivieren? Ich habe nur eine Datei backend.php, darin mache ich einen include auf die Datei language.php und in der stehen die Variablen.

          Wenn ich in der language.php die Variablen ohne das [] reinschreibe, geht es. Schreibe ich dort also $lang_BIN = 'left'; wird mir in der backend.php $lang_BIN ersetzt.

          Schreibe ich $lang["BIN"] = 'left'; ersetzt mir $lang["BIN"] in backend.php das mit einem "d".

          Kannst du mir sagen wie ich das korrekt machen muss oder was ich falsch mache?
          Gruß,
          Peter

          Kommentar


          • #6
            du machst wahrscheinlich irgendwo $lang='d'; (sprache = deutsch ?) und damitt ist das array $lang futsch und ist ein string 'd'

            Kommentar


            • #7
              auch eingeschaltete register globals können es verursachen.
              was steht in der url zu dem zeitpunkt der ersetzung?

              Kommentar


              • #8
                Hey cool, das war es. Danke nun geht es.
                Gruß,
                Peter

                Kommentar


                • #9
                  Original geschrieben von penizillin
                  auch eingeschaltete register globals können es verursachen.
                  dadurch werden aber doch keine getzten variablen überschrieben

                  aber das ist mal wieder ein ganz blödes verhalten von php. dass man einen string auch als array ansprechen kann, schön und gut, aber dass es keinen fehler gibt, wenn man auf einen nicht existenten index zugreift ist "schade"

                  Kommentar


                  • #10
                    dadurch werden aber doch keine getzten variablen überschrieben
                    doch, leider schon. vgl. http://php-resource.de/forum/showthr...gister+globals

                    dass es keinen fehler gibt, würde ich aber dem type casting sowie dem buchstabenweisen ansprechen von strings in die schuhe schieben:
                    PHP-Code:
                    $a 'foo';
                    echo 
                    $a['existiert_nicht']; 
                    # entspricht
                    echo $a[(int)'existiert_nicht'];
                    # entspricht
                    echo $a[0];
                    #ergibt ausgabe
                    'f' 
                    bei dem kollegen Screw Driver stand in der url vermutlich "lang=de", daher das "d"...

                    Kommentar


                    • #11
                      achso, habs mal ausprobiert
                      PHP-Code:
                      // register_globals on simulieren
                      $lang='de';
                      $lang['LOGOUT'] = 'Logout';
                      $lang['LOGOUT_TITLE'] = 'Klicken Sie hier um sich auszuloggen';
                      echo 
                      $lang[blub];
                      // Ausgabe: K 
                      $lang wird durch register_globals als string gesetzt und alle folgenden array-zuweisungen beziehen sich auf den string.
                      sehr schöner effekt

                      aber da ausgabe "K" ist, hat es nichts mit $lang='de'; zu tun, sondern die letzte array-zuweisung gewinnt (Klicken...).
                      also fing beim op die letzte zuweisung mit "d" an, oder er hat $lang irgendwo explizit überschrieben, wie ich es vermutet habe.

                      Kommentar


                      • #12
                        Original geschrieben von 3DMax
                        aber das ist mal wieder ein ganz blödes verhalten von php. dass man einen string auch als array ansprechen kann, schön und gut
                        Eigentlich weniger schön und gut - das ist wirklich blödes Verhalten, "historisch gewachsen", wie es so schön heißt.

                        Zwischenzeitlich galt es als deprecated, aber m.W. will man es in PHP 6 wieder offiziell aufnehmen - wenn das mal nicht ausgewachsener Blödsinn ist.
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar


                        • #13
                          Original geschrieben von wahsaga
                          Zwischenzeitlich galt es als deprecated, aber m.W. will man es in PHP 6 wieder offiziell aufnehmen - wenn das mal nicht ausgewachsener Blödsinn ist.
                          Das mit geschweiften Klammern a{2} ist deprecated und verschwindet in 6, mit eckigen Klammern ist korrekt und bleibt (auch wenn ich persönlich es zwar schön finde, aber durch multibyte-Strings nicht nutzen kann ... aber mal gucken, wenn in php6 das mit dem Array auch für multibyte-Strings möglich wird, könnte das wieder interessant werden ^^)

                          Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                          bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                          Wie man Fragen richtig stellt

                          Kommentar


                          • #14
                            Du hast recht, da ist das englische Manual mal wieder aktueller als das deutsche - in letzterem steht's noch umgekehrt.
                            I don't believe in rebirth. Actually, I never did in my whole lives.

                            Kommentar


                            • #15
                              ich dachte, sowohl {} als auch [] fliegen für stringzugriffe raus... hmm!

                              Back to topic:
                              Am sinnigsten wäre natürlcih, wenn du das nicht schon machst, eine Templateengine zu verwenden, so dass du Code und HTML voneinander trennen kannst und nicht wie arsen ganz am Anfang die Strings verbinden musst!!

                              Kommentar

                              Lädt...
                              X