Halihallo
Gibts hier jemand der bereits Mehrsprachige PHP-Homepages gebaut hat?
aber mit perl...
Eines wäre gewesen: Sämtliche Texte (Strings) werden in einer mySQL DB gehalten.
das ist schon mal gut...
Bei einem ersten Seitenaufruf werden sämtliche Strings der gewüschten Sprache aus der DB geholt und in die Session gestellt.
So kann jede Seite ohne dass sie wieder DB Zugriffe machen muss auf die gewünschten Textfragmente zugreifen.
ist aber ein wenig Speicherverschwendend... Ich bin bisher ganz gut damit gefahren, wenn ich bei jedem Programm eine DB-Connection aufbaue und die Texte dann immer über diese hole...
Was nun? Gibts noch andere Konzepte?
ich kann dir mal kurz was zu meiner sagen:
erste Variante:
Das erste mal kam ich in Zusammenhang mit <www.swiss.tv> mit Langugageindependance in Kontakt. Dort hab ich ein ziemlich simples Interface dafür gebastelt:
Die zu verwendende LanguageID wird in der Session gespeichert, oder wahlweise über die URL mitgeschleppt. Der Text wird mit gettext( <TextID> ) geholt und ausgegeben. Diese Prozedur funktioniert ganz einfach: TextID aus der Session holen und entsprechenden Übersetzungsrecord aus der DB lesen (SELECT Translated FROM LanguageTranslatedItem WHERE TextID=... AND LanguageID=...).
zweite Variante:
Nun, dann hab ich für ne andere Site ein zweites Interface basteln müssen:
Ich habe bemerkt, dass die Sprachen etwas komplizierter sind... Z. B. bei zusammengesetzen Sprachkonstrukten (wenn ich z. B. eine nicht zu übersetzende URL in eine Übersetzung einfügen muss); oder wenn die Satzstellung sich bei diesen in verschiedenen Sprachen ändern.
Dafür hab ich dann Platzhalter in die Sprachtexte eingefügt, welche dann wohl in jeder Sprache an einem anderen Ort stehen (z. B. "hallo %1, das ist meine Welt" => "hello %1, this is my world"). Eventuell lässt sich so ein Platzhalter auch noch übersetzen (falls es sich nicht um eine URL o. ä. handelt und auch sprachabhängig ist). Da ich unter ziemlichen Zeitdruck bei diesem Projekt stand und ich nicht jeden Record eingenhändig in die DB eintragen wollte, habe ich die gettext-Prozedur erweitert:
Die gettext-Prozedur erhält _keine_ TextID, sondern den deutschen Text, wie ich ihn im Programm haben will (das hab auch den Vorteil, dass man den Programmquelltext viel besser versteht: gettext(209) oder gettext('Hallo %1, füllen Sie bitte das folgende Formular aus')). Falls der übergebene Text noch nicht in der DB auffindbar ist, wird er automatisch eingefügt und später durch einen Übersetzer (menschlicher Natur) übersetzt. Oh, da kommt mir grad eine Idee. Ich könnte den Bablefish anzapfen und eine Vorabübersetzung implementieren ;)
Vielleicht nicht genau deine Frage, aber auch interessant...
Viele Grüsse
Philipp