Kai: n Sprachen verwalten

Hallo,

ich möchte eine Website basteln, die später mal n Sprachen ausgeben können soll. Ich bin mir nur momentan nicht so sicher, wie ich das angehen will. Meines Erachtens müsste für jede notwendige Ausgabe eine Variable definiert werden und dann der Text der entsprechenden Sprache zugewiesen und später nur die vom User eingestellte Sprache abgefragt/ausgegeben werden.

Nur wie/wo halte ich die Daten zusammen?

  • Datenbank
  • Includefile
  • Template (mit Smarty bei zwei Sprachen machbar, aber bei n wohl etwas unpraktisch)
  • XML
  • Andere Vorschläge

Ich will mir immer die kompletten Daten ziehen und im Template dann auf die entsprechende Key->Value-Kombination zugreifen. So lange ich nur 100 Übersetzungen (Texte, Wörter) habe, dürften sich alle Lösungen recht performant verhalten, aber wie sieht es aus, wenn z. B. 10000 Schlüssel-Wert-Paare in einem Array vorliegen? Kann ich sowas evtl. auch selber messen um eigene Tests durchzuführen?

Ich würde mich über ein paar Einschätzungen freuen.

Grüße

Kai

  1. hi,

    da gibts meherere Möglichkeiten.

    Ich würde dis über ne DB erledigen und jeder Sprache ne eindeutige ID geben. Die ID ordnest du dann nur noch dem Text zu und fertig ist die Page.

    Bis denne

    Botix

    PS: Natürlich must du noch irgendwo dem User die Möglichkeit geben die Sprache einzustellen. Diesen Wert musst du dann natürlich irgendwie mitschleifen (Cookie oder oder?).

    1. PS: Natürlich must du noch irgendwo dem User die Möglichkeit geben die Sprache einzustellen. Diesen Wert musst du dann natürlich irgendwie mitschleifen (Cookie oder oder?).

      Ich habe die Sprache in der Session stehen, mehr zum Vorgehen in der Antwort an Kalle.

  2. Hallo,

    ich möchte eine Website basteln, die später mal n Sprachen ausgeben können soll.

    Du schreibst nicht, ob die Seiten relativ unverändert bleiben oder sich laufend ändern, also von daher eine DB erfordern.

    Problematik: Bei Änderungen/Ergänzungen in einer Sprache müssen alle anderen mitgezogen werden. Deshalb sollten die verschiedenen Sprachen im Quellcode absatz- oder kapitelweise nahe beieinander bleiben.

    Zwei bis drei Sprachen könnte man spaltenweise nebeneinander anzeigen, das sieht recht vernünftig aus:

    deutsch              english              francais
    -------------------- -------------------- --------------------

    Bei mehr Sprachen wird diese Darstellung aber unübersichtlich und PHP sollte die Sprache ausfiltern:

    <?PHP
      if ( $n == 'dt' ) {
    ?>
    deutsch
    --------------------
    <?PHP
      } else if ( $n == 'en' ) {
    ?>
    english
    --------------------
    <?PHP
      } else if ( $n == 'fr' ) {
    ?>
    francais
    --------------------
    <?PHP
      }
    ?>

    Kalle

    1. Du schreibst nicht, ob die Seiten relativ unverändert bleiben oder sich laufend ändern, also von daher eine DB erfordern.

      Na ja, ein paar dynamische Inhalte wird sie haben, aber das textliche Grundgerüst wird statisch sein.

      Problematik: Bei Änderungen/Ergänzungen in einer Sprache müssen alle anderen mitgezogen werden. Deshalb sollten die verschiedenen Sprachen im Quellcode absatz- oder kapitelweise nahe beieinander bleiben.

      Ist bei mir nicht so gravierend (s. u.)

      Zwei bis drei Sprachen könnte man spaltenweise nebeneinander anzeigen, das sieht recht vernünftig aus:

      deutsch              english              francais


      Bei mehr Sprachen wird diese Darstellung aber unübersichtlich und PHP sollte die Sprache ausfiltern:

      <?PHP
        if ( $n == 'dt' ) {
      ?>
      deutsch

      <?PHP
        } else if ( $n == 'en' ) {
      ?>
      english

      <?PHP
        } else if ( $n == 'fr' ) {
      ?>
      francais

      <?PHP
        }
      ?>

      Bei mir sieht das momentan so aus:

      keyValue         de               en               fr
      -------------    -------------    --------------   -------------
      dictionaryHello  hallo            hello            salut
      dictionaryName   Name             name             nom

      usw. Den keyValue und die aktive Sprache in der Session lege ich dann in ein Array. Im Smarty Template frage ich dann nach dem keyValue und lasse mir den Wert dazu ausgeben. Funktioniert schon ganz gut, meine Hauptsorge ist halt die Performance, wenn die DB mal richtig groß wird. Ich frage SELECT keyValue, de FROM ab und das kann halt irgendwann mal mächtig viel werden, da ich mit meiner derzeitigen Templatelösung keine limitierten Abfragen machen kann. Und wenn doch, dann wären es etliche Einzelabfragen, ich denke, ein großes Array ist schneller.

      Jedenfalls danke für Deine Meinung, DB scheint wirklich die angenehmste Lösung zu sein.

      Grüße

      Kai

  3. Hallo Kai,

    ich möchte eine Website basteln, die später mal n Sprachen ausgeben können soll. [...]

    das Thema gabs hier schon öfters, schau dir mal </archiv/2004/8/t88003/#m524017> und evtl. auch </archiv/2004/8/t88483/#m527470> an. Auch die Suche sollte noch einiges ausspucken.

    Grüße aus Nürnberg
    Tobias

  4. Hallo, Kai,

    wenn die Seite sehr komplex ist und von verschiedenen Personen verwaltet wird, würde ich mit einem Content-Management-System arbeiten. Die Verwaltung mehrsprachiger Sites ist seit der aktuellen Version 3.7 im kostenlosen typo3 CMS recht brauchbar.

    Bei sehr einfachen Seiten, die selten geupdated und von einer mit HTML erfahrebnen Person geupdated werden, würde ich zumindes bei schlechten Servervoraussetzungen wahrscheinlich mit statischen Seiten mit simplen Header- und Footer-Includes arbeiten. Die Dateien für jede Sprache kommen dabei in einen Ordner mit einem ISO-Sprachkürzel (de, en, etc.). Für das Anlegen einer neuen Sprache wird einfach ein neuer Ordner angelegt und die Files der Ursprungssprache dareinkopiert und übersetzt. Die sprachspezifische Navigation und Verlinkung der analogen Seiten in verschiedenen Sprachen untereinander wird per Skript automatisch eingefügt.

    Grüße,

    Sebastian