Hallo!
> <%
> SELECT CASE Sprache
> CASE "deutsch" %><!-- #include file="deutsch.asp" --><%
> CASE "englisch" %><!-- #include file="englisch.asp" --><%
> END SELECT
> %>
Na, das wird so nicht funktionieren, da immer beide Dateien inkludiert
werden.
Hier meine Multi-Language-Funktion:
1. Datenbanktabelle [Texte]
Felder:
Id - Prim�rschl�ssel
Kontext - integer, z. B. Scriptname
Sprache - char(2), L�nderk�rzel
Text - varchar(250), Text mit Platzhaltern ("$1", "$2", oder "<xyz>",
...)
Abfrage (Access)
Select [Text] From [Texte] Where Kontext = [pKontext] and Srache =
[pSprache];
2. VBScript-Funktion
function GetText(pKontext, pSprache, pIndex)
dim lName: lName = "text-" & cstr(pKontext) & "-" & pSprache
if isempty(Application(lName)) then
dim cm: cm = Server.CreateObject("ADODB.Command")
dim rs: rs = Server.CreateObject("ADODB.Recordset")
dim ra
cm.ActiveConnection = Application("connString")
cm.CommandText = "LeseTexte"
cm.CommandType = adCmdUnknown
set rs = cm.Execute(ra, array(pKontext, pSprache))
ra = rs.GetRows()
rs.Close: set rs = nothing: set cm = nothing
Application.Lock
Application(lName) = ra
Application.Unlock
End if
GetText = Application(lName)(pIndex)
end function
Im Script werden nun alle Texte durch "GetText(17, "de", ?)" ersetzt.
Die Funktion liest nur einmal in der Datenbank und schreibt dann den
Text in eine Application-Variable. Bei vielen Seiten in vielen Sprachen
ist halt eine entsprechende Menge RAM einzuplanen.
Die Datenbank kann beliebig viele Sprachen aufnehmen und wird �ber das
Web gewartet oder per XML importiert. Wichtig ist doch, dass die
Betreiber der Webseite die Texte pflegen k�nnen, also muss es eine
Datenbank sein, oder?
Die Kontext-Nummer kennzeichnet entweder ein Script oder ein Formular
oder einen Formulartyp, so dass ich die Texte wirklich flexibel
verwalten kann.
Die einzelnen Texte k�nnen Platzhalterzeichen enthalten, um so
nachtr�glich Namen o. �. einzuf�gen (replace). Manchmal nutze ich auch
nur einen Datensatz f�r mehrere Texte und trenne diese dann erst im
Script (split). Wenn man ganz auf Platzhalter und Trennzeichen
verzichtet, kann man die Texte auch direkt f�r das Web aufbereiten
(Server.HTMLEncode).
Wenn man will, kann man auch alle Texte in der global.asa einlesen.
Wirklich umst�ndlich ist allein die Referenzierung der Texte �ber eine
Nummer. Da sich zwar schon mal �fter der Text ver�ndert, aber seltener
die Verwendung des Texts im Script nehme ich das in Kauf. In manchen
Scripts habe ich auch Konstanten f�r die Texte definiert, z. B.:
Const tInsert = 0, tUpdate = 1, tDelete = 2, ...
Freundliche Gr��e
Joachim van de Bruck
| [aspgerman] als [email protected] subscribed
| http://www.aspgerman.com/archiv/aspgerman/ = Listenarchiv
| Sie k�nnen sich unter folgender URL an- und abmelden:
| http://www.aspgerman.com/aspgerman/listen/anmelden/aspgerman.asp