Hi auch,
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=...).
Ja das scheint mir solide und gut zu sein, ist mir
jedoch wegen den vielen einzelnen DB zugriffen
nicht so geheuer.
Mir auch nicht.
Ich würde die Meldungsschlüssel nach Sprache und
Modulname präfixen und jeweils alle Meldungen eines
aufgerufenen Programms mit einem Rutsch lesen:
SELECT <felder> FROM msgtable WHERE msgkey LIKE
"$language$module%";
Präfixmatch über einen Unique Index ist sehr schnell,
trotz LIKE kann der Index verwendet werden.
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").
Schon an anderer Stelle erwähnt:
http://www.schroepl.net/pbm/software/united/_dokument/msg_file.htm
Eventuell lässt sich so ein Platzhalter auch
noch übersetzen (falls es sich nicht um eine
URL o. ä. handelt und auch sprachabhängig ist).
Ja - teilweise sind die Einfügungen in meine Meldungen
selbst wieder Inhalte von Meldungen. Das Anwendungs-
programm muß genau wissen, was es tun will.
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')).
Bei mir steht die deutsche Version der Meldung als
Kommentar im Quelltext.
Oh, da kommt mir grad eine Idee. Ich könnte
den Bablefish anzapfen und eine Vorabübersetzung
implementieren ;)
Ich habe mal so eine Babelfisch-Übersetzung "nach-
bearbeitet" ... weia.
Viele Grüße
<img src="http://www.schroepl.net/projekte/gzip_cnc/gzip_cnc.gif" border=0 alt=""> Michael