Ron: Frage zu mehrsprachigkeit

Hallo,

mal ne Frage.

Es geht um eine Website mittels CMS in 2 Sprachen angelegt.
Es können Artikel eingegeben werden. Jeweils ein Feld für eine Sprache.
Wenn ich jetzt per PHP die Felder der jeweiligen Sprache ausgeben will, muss ich mir von irgendwoher ne variable holen und diese abfragen welche sprache ausgegeben werden soll.
da gibt es ja einige möglichkeiten.
Ich könnte da eine grundsätzliche Reihenfolge die ausgegeben wird anlegen.
wenn nichts angegeben ist also englisch.
ansonsten könnte der User die Sprache auswählen.
Oder nach Browsereinstellung. Bekomme ich die mit PHP ausgelesen, ja auch nicht...
Dann könnte ich Coockies speichern die ich per PHP auslesen kann.
Würde ich aber gerne vermeiden.
Meine Seite läuft in einem Frameset ab, daher könnte ich die Sprachauswahl auch im Top-frame speichern per Javascript. Aber den bekomme ich per PHP ja auch nicht ausgelesen, oder?

Wie gehe ich da am besten vor?
Hat da jemand einen Vorschlag?

Gruß Ron

  1. Hallo,

    Oder nach Browsereinstellung. Bekomme ich die mit PHP ausgelesen, ja auch nicht...

    Doch, Stichwort "Content negotiation", dazu gibt's sogar ein SELFHTML-Artikel: PHP: Ermitteln der Sprache des Browsers.

    Dann solltest Du natürlich noch eine Möglichkeit zum Umschalten anbieten. Das kann z.B. per Cookie sein oder einfach über die Adrese, z.B. index_de.html, index_en.html (mit mod_rewrite) oder eben index.php?lang=de, index.php?lang=en...

    Ich habe diese Funktion z.B. hier eingebaut, Du solltest dann entsprechend Deiner Browser-Einstellungen auf die deutschsprachige oder englischsprachige Seite weitergeleitet werden.

    Alex

  2. Hi Ron!

    Eine bequeme Möglichkeit wäre wohl die Lösung mit den Cookies. Einmal zu Beginn ein Cookie mit der Information angelegt, brauchst du dich danach um nichts mehr zu kümmern.
    Die zweite Möglichkeit wäre, die Information immer per HTTP-GET mitzuführen. Das bringt allerdings einen großen Aufwand mit sich und ist mit der Zeit nur sehr schwer wartbar.
    Die Topframe-Idee ist auf den ersten Blick nicht durchführbar, da du mit PHP (Server-Sprache) nicht auf lokale Laufzeitvariablen einzelner User zugreifen kannst.

    Mein Vorschlag wäre daher der Einsatz von Sessions. Sessions birgen sog. Session-Variablen, die zwischen Server und Client automatisch hin- und hergereicht werden. Sie beinhalten also genauso wie Cookies Informationen, die ein lokaler User spezifizieren und die ein skriptausführender Server lesen kann. Allerdings mit dem Unterschied, dass eine Session nach einer Sitzung "gelöscht" wird.

    Und so würde ich es realisieren:

    //1) Aktivieren der Session-Funktionalität
    session_start();

    //2) Initialisieren der Session-Variable mit einem Wert ("deutsch")
    if (isset($_SESSION['sprache']) == false) $_SESSION['sprache'] = "deutsch";

    1. und 2) müssen am Anfang jedes neuen Seitenaufrufs stehen. Die Weitergabe der sog. Session-ID, die den User identifiziert mit dem in der aktuellen Session-Sitzung kommuniziert wird, wird i.d.R. in einem automatisch angelegten Cookie weitergegeben. Will man sich selbst um die Weitergabe der Session-ID kümmern, dann kann man auch die globale Variable SID an jede aufzurufende URL anhängen, was den Gesamtaufwand allerdings wieder in die Nähe der HTTP-GET-Lösung bringt (und was i.d.R. auch nicht nötig ist).

    Der Gesamtaufwand würde sich also auf 1) und 2) beschränken. Wann und wie der User allerdings "seine" Sprache festlegt, ist darin nicht enthalten. Ich schlage vor, einen festen Default-Wert vorzugeben, den der User durch Klick auf (z.B.) ein Fähnchen-Icon jederzeit ändern kann. So wird es auch von vielen anderen Websites geregelt. Eine weitere Möglichkeit wäre der Einsatz mehrerer Domains mit unterschiedlichen Landes-Endungen, wobei jede Domain der Session-Variable einen anderen Startwert zuweisen würde.

    Für weitere Informationen empfehle ich dir www.php.net. Dort wird alle genauestens beschrieben.

    Gruß,
    Tobias

    1. Hallo Tobias,

      Die zweite Möglichkeit wäre, die Information immer per HTTP-GET mitzuführen. Das bringt allerdings einen großen Aufwand mit sich und ist mit der Zeit nur sehr schwer wartbar.

      Es muss ja kein GET-Parameter sein, sehr beliebt sind auch Sub-Domains (z.B. de.php.net, de.wikipedia.org, de.selfhtml.org). Zur Auswahl der Standardsprache kann man ja die Accept-Header auswerten und natürlich darf eine Möglichkeit, die Sprache manuell zu ändern nicht fehlen.

      Das hättea auch den Vorteil, dass man Links zu bestimmten Sprachversionen setzen will, wenn man dies nicht will kann man, sofern der Server korrekt eingerichtet ist, die sprachspezifische Sub-Domain einfach weglassen.

      Schöne Grüße,

      Johannes