mehrere sprachen - includen, oder aus mysql??

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

  • mehrere sprachen - includen, oder aus mysql??

    hi

    ich werde demnächst ein rel. grosses projekt starten

    also das projekt machen wir viersprachig.

    nun, das auch nur, weil wir in der blöden schweiz (nene, ich find sie schon schön) 3 national sprachen haben, und dann noch english.

    also, wir machen erst mal die beta phase nur auf deutsch.

    aber genug drum herumgeredet:

    wie sollen wir sprachen auslagern??

    in dateien, welche includet werden, und nach elemente eingeteilt werden??
    zb produktedetails:

    lang/produkte.php:
    etwa so:
    <?PHP
    $lang['de']['preis']="Preis";
    $lang['en']['preis']="Price";
    ?>

    oder so:
    <?PHP
    $lang['de']['23']="Preis";
    $lang['en']['23']="Price";
    ?>
    wobei jeder string dann eine ID hat, finde ich aber etwas blöder.

    oder sollen das ganze in eine DB eintragen??
    das würde dann aber extrem viel abfragen geben.


    wie macht ihr das den ??

  • #2
    zur besseren Übersicht und Pflege würde ich das in eine MySQL-Datenbank-Tabelle schreiben.

    Die Tabelle 'languages' könnte dann so aussehen:
    id,source,lang_de,lang_en,lang_it,lang_fr

    die Abfragen wären dann einfach:
    $sQuery = "SELECT lang_". $LANG ." from languages";
    require_once('gehirn_v_02beta.php');

    Kommentar


    • #3
      Ein gutes Vorbild sind da Foren wie das phpBB oder auch phpMyAdmin. In den Skripten wird fuer jede Anzeige ein globales Array verwendet. Sagen wir, in deinem Projekt steht fuer die Begrueßung die Variable: $display["greeting"]. Anhand irgendeiner Einstellung, Cookie oder HTTP_ACCEPT_LANGUAGE inkludierst du dann eine Datei in der steht: $display["greeting"] = "Hallo du da"; als Beispiel fuer eine deutsche Sprachdatei. Wenn Englisch verwendet werden soll, inkludierst du anstatt dessen die englische Datei in der steht: $display["greeting"] = "Hello there".

      Die Variable bleibt immer die selbe, werden aber je nach Sprachwahl unterschiedlich definiert.

      Kommentar


      • #4
        hab gerade mal testweise was zweisprachiges gemacht. hab da auch die Array Methode genommen. ob du damit glücklich wirst ist ne andere Frage.

        Gibt da auch n PHP Modul/Funktion zu. such mal im forum.

        Kommentar


        • #5
          Mann könnte auch ganz einfach die Funktion define(); benutzen, falls du das meinst, TobiaZ!

          PHP-Code:
          <?php
          /* lang_de.php */
          define("_BEGRUESSUNG""Hallo");
          ?>

          <?php
          /* lang_en.php */
          define("_BEGRUESSUNG""Hello");
          ?>

          <?php
          /* test.php */
          if($_COOKIE['lang'] == "de"){ $lang "de"; }
          else { 
          $lang "de"; }

          require_once(
          "lang_".$lang.".php");

          echo 
          _BEGRUESSUNG;
          ?>
          Mit freundlichem Gruß,
          Deathrow

          Kommentar


          • #6
            @Deathrow: so wie ich bereits sagte.
            Allerdings wuerde ich keine Konstanten nehmen, da faellt dir nach einer Weile dein linker kleiner Finger ab und deine Shift-Taste gleich mit.

            Kommentar


            • #7
              @max: musst du ja nicht zwingend groß schreiben

              @d: konstanten würde ich aber auch nicht nutzen.

              PHP-Code:
              if($_COOKIE['lang'] == "de"){ $lang "de"; }
              else { 
              $lang "de"; } 
              Diese Prüfung auf gar keinen Fall vergessen! Für Singel-language-Pages einfach unerlässlich.

              Kommentar


              • #8
                also ich habs eben der einfachen pflege wegen mit MySQL gemacht ....

                die idee lang_de, lang_en,lang_xx zu nehmen ist zwar so nicht schlecht aber halt nur zu gebrauchen wenn eine fixe anzahl sprachen zur verfügung steht .... bei mir siehts so aus:

                tab language_langs
                id int(10) auto increment
                name varchar(100)

                z.B.
                1 | deutsch
                2 | englisch

                tab language_elemtente
                id int(10) auto increment
                elementid int(10)
                langid int(10)
                content longtext

                z.B.
                1 | 1 | 1 | Hallo
                2 | 1 | 2 | Hello
                3 | 2 | 1 | Keks
                4 | 2 | 2 | Cookie

                wobei dir erste Tabelle eigentlich nicht zwangsläufig gebraucht wird solang du nicht 10 oder mehr sprachen verwaltest (kannste dir ja aufschreiben/merken fürs programieren) ...

                dann gibts ne php funktion getelemts($langid) die beim jedem Script am Anfang aufgerufen wird und die content felder der sprache in ein array schreibt, so z.B.:
                $lang[$row['elementid']] = $row['content'];
                $lang[1] = 'Hallo';

                Verwaltung läuft dann über en kleines Admin Panel ... eigentlich nichts weltbewegendes vom Programmieraufwand und trotzdem (theoretisch) für beliebig viele Sprachen geeignet, leicht verwaltbar durchs mysql und auch von der Geschwindigkeit abzeptabel, weil ja nur eine DB Abfrage benötigt wird ....

                mfG
                CMS-X Medien- und Modelagentur

                Kommentar

                Lädt...
                X