mjonsonMedlem sedan nov. 200237 inlägg
Hej alla, jag är ny här!
Jag vill att en Select Case sats ska avgöra vilken .inc fil som ska inkluderas.
Det här koden funkar inte:
<%
Select Case lang
Case se
%> <!--#include file="language_se.inc"--> <%
Case en
%> <!--#include file="language_en.inc"--> <%
Case de
%> <!--#include file="language_de.inc"--> <%
Case Else
Response.Redirect("default.asp")
End Select
%>
Vad har jag gjort för fel?
(Jag hittar ingen tidigare tråd som täcker detta helt.)
Som det är nu så läses den include-filen som står överst i listan alltid in. Har någon en alternativ lösning?
solbulleMedlem sedan mars 20014 998 inlägg
Välkommen till WF!
om se, en mfl är strängar ska det stå inom " ", mao:
Case "se"
Sen är det som så att ALLA dina includefiler kommer att inkluderas men endast den som överenstämmer kommer att köras.
mjonsonMedlem sedan nov. 200237 inlägg
Alternativ lösning?
Ok, tack - jag ska prova.
Men det är ju inte så bra om alla inkluderas. Finns det nån som vet en alternativ lösning?
Grejjen är att jag har en webbsida där användaren kan välja vilket språk den ska presenteras i, svenska, tyska eller engelska.
Hur har andra löst problemet med språkhantering?
Jag skulle vilja skilja på html/asp och språk-specifikt innehåll såsom textmassor. På så vis behöver jag bara ändra filen med html/asp när jag vill ändra utseende och funktioner.
Tack på förhand!
OveRRidEMedlem sedan feb. 20018 509 inlägg
Om du har ASP 3.0 kan du göra såhär:
<%
Select Case lang
Case "se"
server.execute "language_se.inc"
Case "en"
server.execute "language_en.inc"
Case "de"
server.execute "language_de.inc"
Case Else
response.redirect("default.asp")
End Select
%>
eller om man vill vara ordentligt duktig:
server.execute "language_" & lang & ".inc"
mjonsonMedlem sedan nov. 200237 inlägg
Jag har provat det nu, men jag tror inte det fungerar i mitt fall. Min textfil innehåller bara en massa textvariabler, ex:
<%
'''LANGUAGE: SVENSKA
'''File name: language_se.inc
default_headline = "Welcome to my page!"
default_text_1 = "Alot of text goes here..."
default_text_2 = "...and here is some more!"
%>
Jag vill alltså inkludera denna fil i en .asp sida så här:
<%
''NORMAL .ASP USER PAGE
''File name: default.asp
'''initierar lang...mm.
server.execute "language_" & lang & ".inc"
<p class=big><% =default_headline %></p>
%>
Jag får det inte att funka. Misstänker att det beror på att filen (language_se.inc) bara innehåller en massa variabler och ingen egentlig exekveringsbar kod.
Vad tror ni? Ska jag gå över till att använda databas? Eller kanske text-fil?
OveRRidEMedlem sedan feb. 20018 509 inlägg
Misstänker att det beror på att filen (language_se.inc) bara innehåller en massa variabler och ingen egentlig exekveringsbar kod.
Det är helt korrekt. Det är nackdelen med execute, sidan inkluderas inte, den körs för sig. Alltså gäller inte variablar som dim:as i den, på den sidan som den execute:as på.
JaarMedlem sedan juli 2001434 inlägg
Kan du inte inkludera en fil "language.inc" och där i ha en case typ?
language.inc
Select Case lang
Case "se"
var1 = "välkommen"
var2 = "bro"
Case "en"
var1 = "welcome"
var2 = "bridge"
Case "de"
var1 = "willcommen?!?"
var2 = "Brücke"
Case Else
var1 = "trodde det var något av de ovan som var default"
var2 = "då lägger du de variablerna här istället o skiter i dem i case satsen.. de tas ju ändå"
End Select
mjonsonMedlem sedan nov. 200237 inlägg
Case sats i include
Ja, det låter ju faktiskt ganska smart!
Enda problemet är att .inc filerna innehåller all den text som hela webbplatsen kräver i ett visst språk. De är 7kb per styck (and growing), och med ditt förslag kommer alla språk ligga i samma gemensamma .inc-fil. Det blir 21kb som måste laddas för varje sida som besökaren kommer till. Fast den gemensamma .inc-filen kanske läggs i cachet eller arbetsminnet så att den inte laddas varje gång?
För varje språk har jag nämligen hela webbplatsens textinnehåll i samma .inc fil. Men enligt ditt förslag lägger jag alla språk i samma fil. Då kanske jag ska dela upp innehållet och ha en .inc-fil för varje sida, stället för hela webbplatsens innehåll.
Nu är jag inne på detaljer, men...
Undrar vilket som är snabbast?
JaarMedlem sedan juli 2001434 inlägg
Hmm, enligt någons lösning åt en av våra kunder som kör tre språk (svenska, norska, danska) så har han en fil med alla språk.
Den är 26 kb i dagsläget...
Jag vet inte hur "smart" asp är, men JSP servrarna cachar alltid filerna i minnet, kompilerade o färdiga... Så om man har en parameter som ändras 1 ggr per dag (typ datum) så går det inte åt så mycket maskinkraft...
Troligen borde den hålla en fil som inkluderas på varje sida i minnet om det är vettigt programerat av microsoft...
mjonsonMedlem sedan nov. 200237 inlägg
Kontig variabeltilldelning
Ok, nu har jag testat det där med:
Select Case lang
Case "se"
var1 = "välkommen"
var2 = "bro"
Case "en"
var1 = "welcome"
var2 = "bridge"
...
Jag har upptäkt ett problem. Om jag inte tilldelar var2 någonting i case "en" så att koden istället ser ut så här:
'This file: language_content.inc
Select Case lang
Case "se"
var1 = "välkommen"
var2 = "bro"
Case "en"
var1 = "welcome"
var2 = "" 'Här har jag tagit bort bridge!
...
...och sedan skriver ut:
lang = "en"
<!--#include file="language_content.inc"-->
Response.Write("var2")
...så skrivs ändå "bro" ut. Var2 ska ju inte ska ju inte tilldelas "bro" om inte case är "se".
Vad har jag gjort för fel?