Mehrsprachige Webseite

Hallo, mein aktuelles Webprojekt würde ich gerne mehrsprachig gestalten.

(Ich hoffe, dass dies das richtige Unterforum ist, da es scheinbar in keines richtig rein passt)

Nun überzeugen mich die „normalen“ Wege nicht so wirklich.
Daher habe ich mir überlegt, alle Texte in eine Datenbank zu schreiben und diese dann aus zu lesen.
Dadurch spare ich mir das ganze doppelte schreiben, jedoch weiß ich nicht wie sehr es den Datenbankserver belastet.

Die Sprache, die ich an den User als erstes ausgebe, ist die, die ich über die gängigen Wege ermitteln kann (Browser Daten, vorher besuchte Seite).
Diese wird dann in einer Session gespeichert.

Ich möchte es dem Nutzer aber natürlich auch ermöglichen, die Sprache manuell zu ändern.

Nun zu meinen Fragen:

  1. Bringt meine Idee, Vorteile / Nachteile mit sich?
  2. Wie sieht es mit Sicherheit / Performance aus?
  3. Wenn der User die Sprache ändert, kann ich dann mit Ajax ( wenn JavaScript unterstützt wird ) einfach nur die Texte tauschen, oder muss ich immer die Seite neu laden?

Habt ihr weitere Fragen?

Ich hoffe, dass ich jetzt nicht ganz so wirres Zeug geschrieben habe.

Mit freundlichen Grüßen
Supercomputer

P.S. Frohe Weinachten :slight_smile:

Stichwörter für Inernationalisierung sind i10n und i18n. Module gibt es für unterschiedliche Sprachen und Frameworks. Die Übersetzungen können, müssen aber nicht zwingend in einer Datenbank abgelegt werden. Sofern es lediglich um Zwischenüberschriften, etc., geht, reichen auch einfache Dateien, welche die Translation-IDs als JSON-Objekt speichern und innerhalb der Views als String interpolieren. Man kann eine default language, analog zum gesendeten Header einstellen, und dem User ermöglichen, diese Einstellung nachträglich zu verändern.

Ich baue so etwas gerade mit AngularJS, damit funktionieren die Spracheinstellungen auch asynchron (AJAX). Das Modul dazu findest du hier:
http://angular-translate.github.io/docs/#/guide

Ich möchte nicht unbedingt auf irgendwelche Module zurück greifen, da ich auch keine Frameworks nutze.

So wie ich es herauslesen, gibt es keinerlei Probleme, wenn ich es wie oben beschrieben machen möchte?

Welche Nachteile das mit sich bringt, wirst du sehr schnell merken. Es hat schon seinen Grund, warum man heutzutage auf Translation-IDs setzt. Eine Struktur wie:

{ "index": { "main": { "headline": "Hello World", "form": { "headline": "Bitte Text eingeben", "button_text": "Klick Mich" } }, "aside": { "tu": "was" } } }

lässt sich wesentlich einfacher in Form verschachtelter JSON-Objekte abbilden, als wenn man stattdessen Datenbanktabellen erstellen müsste. Wenn du auf den Einsatz von Frameworks verzichten möchtest, welche die notwendige Funktionalität bereits mitbringen und obigen Text als index.main.form.headline rendern können, ist das natürlich dein gutes Recht, aber dann frage nicht, falls du mit deinem Projekt in eine Sackgasse gerätst.

Aktuell setze ich es so um, dass ich über die Session die Sprache lese, dann eine Datenbank abfrage mache und die Ausgabe dann über $ Array [ID] an die richtige Position bringe

Das mag angehen, solange dein Projekt noch klein ist, aber wenn es über die Zeit wächst, wird es unübersichtlich. Im Gegensatz zu JSON-Objekten lassen sich innerhalb Tabellen keine Namespaces setzen. Was spricht denn aus deiner Sicht dagegen, den einfacheren Weg mit Übersetzungsdateien zu wählen? Deren Inhalt und Struktur lässt sich bei Bedarf auch viel schneller ergänzen und verändern.

JSON-Objekte sind nach meinem Kenntnisstand auf JavaScript aufgebaut, da JavaScript Clientseitig ausgeführt wird, biete ich eine Angriffsmöglichkeit. (Wenn ich falsch liege, bitte ich um Korrektur)

Ich finde es eigentlich übersichtlicher, alles zusammen in einer Datenbank zu haben, natürlich wird es schwierig, nachher die ganzen Datensätze der Tabellen richtig zu zu ordnen, jedoch kommt es mir in erster Linie auf Sicherheit und Performance an.

Du liegst falsch. Die Angriffsmöglichkeit bietet nicht die Technik sondern die implementierung. Und warum sollte das überhaupt eine sicherheitslücke sein?

Das ist recht einfach, alles was der User verändern und zum Server schicken kann ist potenziell gefährlich
(Never trust the User).

Die JSON-Objekte basieren auf JavaScript, dass sagt das JSON.
Jedoch wird JavaScript doch vom Client ausgeführt, was mache ich dann z.B. wenn JS blockiert oder deaktiviert ist?

Das ist jetzt mal ein Link aus dem Menü des Headers, von der Seite, die ich Mehrsprachig gestalten möchte, nach meiner aktuellen Vorgehensweise.

echo "<li> <a href='".$RETURN."news'>".$Trans[2]."</a> </li>";

Dabei Steht das $RETURN für die vorher ermittelten „…/“ um in den Ordner „news“ zu gelangen.
Das $Trans array beinhaltet die entsprechenden Übersetzungen.

  1. Mach doch wie du willst. Wirst ja merken obs geht.
  2. http://json.org/ lesen lernen
  3. wenn du ein menu mit javascript machst, wäre das auch gefährlich laut deiner definition?

Es wird zumindest unbrauchbar werden, wenn JavaScript nicht unterstützt wird.

EDIT
Danke für den Link, die Seite habe ich bereits mehrfach gelesen und daraus interpretiere ich, dass auf beiden Seite Client und Server JavaScript nutzbar sein muss.

[ol]

echo „

  • “.$Trans[2].„
  • “;

    [/ol]
    Genau so etwas meinte ich. Welcher Inhalt für $Trans[2] gerendert wird, ist für den Betrachter völlig unersichtlich. Spätestens in 3 Wochen weißt du das selber nicht mehr. HTML-Templates sollten verständlich sein, und außerdem gibt man Markup nicht per echo aus.

    Da steht doch sowas wie „json is language independent“… Usw… Schon auf der startseite. Dritter satz +/-

    Man könnte natürlich auch $Trans[‚menu_forum‘] oder der gleichen nehmen.
    Ich habe nicht vor ein Template zu erstellen.

    Und das „independet“ bedeutet also, egal was ist, es läuft IMMER?
    Wie schnell lässt es sich denn lernen?

    JSON ist Syntax ohne Funktionen. Da gibt es nichts zu lernen.

    Zumindest der Syntax muss gelernt werden :wink:

    Wie sieht es mit dem Bedarf an Speicherplatz aus?

    Der Bedarf an Speicherplatz, wenn man Daten serialisiert ausgibt? :frowning:

    Die JSON Datein müssen ja irgendwo irgendwie gespeichert werden.

    Wie viel Platz brauchen die und wie sieht es mit der Geschwindigkeit im Vergleich zu einer Datenbank aus?

    1 byte pro utf 8 zeichen. Je nach konfigurierter blockgrösse mehr oder weniger dann. Ist plattenabhängig…

    Setz dich doch einfach mal ein paar mins mit dem thema auseinander. Wie oben erwähnt i18n und i10n sollten gute srichworte sein.

    Ich hatte hiermit zwar noch keinen Kontakt, ich denke aber es wäre unnötig dem Client alle Sprachen zu senden. Es ist doch sinnvoller die JSON Datei mittels PHP einzulesen und die geforderte Sprache in den Quelltext einzusetzen.

    Zum einen braucht man dann keine JavaScript Unterstützung und zum anderen schickst dir deinem Client keinen unnötigen Traffic. Bei Deutsch und Englisch mag das unerheblich sein, aber bei mehreren Sprachen ist es ja völlig unnötiger Traffic auch wenn unmerklich viel.
    Ist es unbedingt notwendig das die Sprache ohne neuen Request gewechselt werden kann? Wie oft kommt das bei einem User vor…