Compu: /Programmiertechnik. Mehrspr. Seite mit Datenbank oder Datei ???

Hi,

ich programmiere in php4 und habe mysql zur Verfügung.
Die Seite die ich erstellt habe soll 5-sprachig sein.
Bisher habe ich für alle Übersetzungen eine "translation.php"-Datei verwendet.
Nun frage ich mich, ob ich nicht besser alles was nicht mit Programmierung zu tun hat in die Datenbank packe.

Wie sollte aber die Tabelle aussehen?

wort| de | en | fr | it | es
...   ..   ..   ..   ..   ..

Bestimmte Wörter benutze ich auf mehrern Seiten!
Ich müsste dann ja zig,zig sql-Anweisungen haben, wenn ich für jedes Wort eine Zeile benützte!

Hilfe!

Danke,

Compu

  1. Halihallo Compu

    ich programmiere in php4 und habe mysql zur Verfügung.
    Die Seite die ich erstellt habe soll 5-sprachig sein.
    Bisher habe ich für alle Übersetzungen eine "translation.php"-Datei verwendet.
    Nun frage ich mich, ob ich nicht besser alles was nicht mit Programmierung zu tun hat in die Datenbank packe.

    Eine Trennung zwischen Daten und Programm kann nicht schaden und ist empfehlenswert.
    Besonders in diesem Kontext macht es Sinn. Warum sollst du Text im Programm ablegen,
    welcher u. U. gar nie benötigt wird?

    Wie sollte aber die Tabelle aussehen?

    wort| de | en | fr | it | es
    ...   ..   ..   ..   ..   ..

    wenn nicht jeder Tag eine neue Sprache hinzukommt ist das OK.

    Bestimmte Wörter benutze ich auf mehrern Seiten!
    Ich müsste dann ja zig,zig sql-Anweisungen haben, wenn ich für jedes Wort eine Zeile benützte!

    Wörter? Wörter? - Aber, aber, du wirst doch bemerkt haben, wie die Syntax, ja gar die
    Semantik von Sprachen unterscheidet... Wenn du jedes Wort übersetzt, kommt der selbe
    Müll raus, wie in den Übersetzungsprogrammen. Zudem ist es wirklich ineffizient einen
    Query pro Wort auszuführen. Ein (Teil-)Satz macht tausend mal mehr Sinn.

    Das Thema wurde auch schon oft Diskutiert, durchsuche das Archtiv nach Mehrsprachigkeit.

    Viele Grüsse

    Philipp

    1. Wörter? Wörter? - Aber, aber, du wirst doch bemerkt haben, wie die Syntax, ja gar die
      Semantik von Sprachen unterscheidet... Wenn du jedes Wort übersetzt, kommt der selbe
      Müll raus, wie in den Übersetzungsprogrammen. Zudem ist es wirklich ineffizient einen
      Query pro Wort auszuführen. Ein (Teil-)Satz macht tausend mal mehr Sinn.

      Nein so war das nicht gemeint. Die Wörter von denen ich hier rede sind Überschriften,etc

      Ich will sozusagen mit einem Rutsch ein Array aus der Datenbank einlesen können, dass dann alle Übersetzungen für die Zielsprache beinhaltet.

      Danke

      1. Halihallo Compu

        Wörter? Wörter? - Aber, aber, du wirst doch bemerkt haben, wie die Syntax, ja gar die
        Semantik von Sprachen unterscheidet... Wenn du jedes Wort übersetzt, kommt der selbe
        Müll raus, wie in den Übersetzungsprogrammen. Zudem ist es wirklich ineffizient einen
        Query pro Wort auszuführen. Ein (Teil-)Satz macht tausend mal mehr Sinn.

        Nein so war das nicht gemeint. Die Wörter von denen ich hier rede sind Überschriften,etc

        Auch Überschriften können mehrere Worte, ja sogar Sätze enthalten.

        Ich will sozusagen mit einem Rutsch ein Array aus der Datenbank einlesen können, dass dann alle Übersetzungen für die Zielsprache beinhaltet.

        Wozu brauchst du in einem Script alle Übersetzungen? - Der Benutzer wird doch wohl eine
        Sprache ausgewählt haben; somit wäre es verschwendend alle Übersetzungen einzulesen.
        Nun gut, dass ist nebensächlich.
        Nehmen wir an, du hast ein Programm artikel.php, welches einiges an Text und
        Überschriften ausgibt. Dann wäre es aus Sicht der Performance Sinnvoll, wenn du ein
        Feld 'programm_name / -id' anlegst, sodass die DB die Daten schnell selektieren kann.
        Dann kannst du pro Programm gleich alle Überschriften in einem Rutsch einlesen, das ist
        wohl in einigen Fällen schneller, als bei jeder Überschrift einen neuen Query
        auszuführen (es sei denn, du lagerst für jedes Script über 100'000 Überschriften, von
        welchen du dann reel nur 10 benötigst).
        Hälst du das Auslesen der Überschriften für Performancekritisch, musst du nach einer
        anderen Möglichkeit suchen. Möglichkeiten, die sich hier anbieten wären z. B. extern
        gelagerte .txt Dateien mit einfacher Struktur.

        Viele Grüsse

        Philipp

        1. Wozu brauchst du in einem Script alle Übersetzungen? - Der Benutzer wird doch wohl eine
          Sprache ausgewählt haben; somit wäre es verschwendend alle Übersetzungen einzulesen.

          ??? Hä? Möchte ich doch gar nicht!
          Nur alle Wörter einer bestimmten Sprache.

          Nehmen wir an, du hast ein Programm artikel.php, welches einiges an Text und
          Überschriften ausgibt. Dann wäre es aus Sicht der Performance Sinnvoll, wenn du ein
          Feld 'programm_name / -id' anlegst, sodass die DB die Daten schnell selektieren kann.
          Dann kannst du pro Programm gleich alle Überschriften in einem Rutsch einlesen, das ist
          wohl in einigen Fällen schneller, als bei jeder Überschrift einen neuen Query
          auszuführen (es sei denn, du lagerst für jedes Script über 100'000 Überschriften, von
          welchen du dann reel nur 10 benötigst).

          Du meinst also so?
          sprache | tomate | apfel
          de|tomate|apfel
          engl|tomato|apple
          etc?

          Dann hätte ich aber Zeilen mit 300 Feldern oder so.
          Ich möchte Überschriften und Erklärungen speichern.

          Momentan benutze ich eine Datei language.php. Die beinhaltet soetwas:

          $gipse="gypsums";
          etc ...

          1. Halihallo compu

            Wozu brauchst du in einem Script alle Übersetzungen? - Der Benutzer wird doch wohl eine
            Sprache ausgewählt haben; somit wäre es verschwendend alle Übersetzungen einzulesen.

            ??? Hä? Möchte ich doch gar nicht!
            Nur alle Wörter einer bestimmten Sprache.

            ja, ja, is ja gut, man wird doch wohl noch kommentieren dürfen :-)

            Nehmen wir an, du hast ein Programm artikel.php, welches einiges an Text und
            Überschriften ausgibt. Dann wäre es aus Sicht der Performance Sinnvoll, wenn du ein
            Feld 'programm_name / -id' anlegst, sodass die DB die Daten schnell selektieren kann.
            Dann kannst du pro Programm gleich alle Überschriften in einem Rutsch einlesen, das ist
            wohl in einigen Fällen schneller, als bei jeder Überschrift einen neuen Query
            auszuführen (es sei denn, du lagerst für jedes Script über 100'000 Überschriften, von
            welchen du dann reel nur 10 benötigst).

            Du meinst also so?
            sprache | tomate | apfel
            de|tomate|apfel
            engl|tomato|apple
            etc?

            Uh, nein, sowas käme mir nie in den Sinn, geschweige würde ich es empfehlen. Das
            wiederspricht allem, was mir lieb ist ;-)

            Dann hätte ich aber Zeilen mit 300 Feldern oder so.

            Genau deshalb wäre es ja verwerflich. Das Datenbankschema wäre katastrophal, würde es
            mit jedem neuen Wort ändern.

            Also, dann versuche ich es nochmal:
            Ich stellte mir für eine Mehrsprachige Page etwa folgendes vor:

            programm_name  |  wort  |  de  |  en  |  fr   | ...
            ---------------------------------------------------
            aritcles.php    Apfel    Apfel  apple   schö nö sä pas ;-) [1]
            articles.php    Zitrone  Zitr.  lemo.   ...
            show.php        bla      bla    blu

            wenn du dich also im Programm articles.php befindest, dann kannst du alle Records
            mit programm_name='articles.php' auslesen (geht schnell) und sie in einem Array, oder
            was auch immer Speichern...

            Aber das war's ja nicht, wonach du suchtest... :

            Dein Schema ist schon OK, du hattest ja (wort;de;en;fr) vorgeschlagen.
            Nun, was ist denn daran auszusetzen, diese einfach aus der DB auszulesen und in einem
            assoziativen Array (Hash) zu speichern?
            Nebenbei: Eine datenbankgestützte Verwaltung ist nur bedingt zu empfehlen, wenn die
            Wörter fast nie ändern und oft gebraucht werden. Dann macht eine Umsetzung über eine
            include mehr Sinn (wenn's nicht zuviele Wörter sind).

            [1] fr lass ich mal lieber weg, sonst bin ich morgen noch am selben Posting...

            Viele Grüsse

            Philipp