• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Mehrsprachige Webseite

Supercomputer

Mitglied
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 :)
 
Werbung:
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?
 
Werbung:
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:
Code:
{
    "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.
 
Werbung:
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.
Code:
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.
 
Werbung:
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.
 
  1. echo "<li> <a href='".$RETURN."news'>".$Trans[2]."</a> </li>";
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.
 
Werbung:
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.

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?
 
Werbung:
Werbung:
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..
 
Zurück
Oben