Hade tänkt göra min sida flerspråkig utan att behöva göra dubletter av alla sidor, då tänkte jag att jag skulle använda databaser på något sätt, nu vill jag ha lite tips innan jag sätter igång, hur gör jag för att få det så lättanvänt och så lite prestandakrävande som möjligt? skapa en column i varje tabell som heter sprak. Man kan också, förutom vad som nämndes ovan, använda sig av servervariabeln HTTP_ACCEPT_LANGUAGE så sker språkvalet "automatiskt" när användaren kommer till sidan. varför en kolumn i varje tabell? borde man inte ha en tabell med alla språk i? Jag brukar i Session_OnStart i global.asa kolla värdet på HTTP_ACCEPT_LANGUAGE och lagra detta i en sessionsvariabel, typ: Jag är säker på att det finns gott om information om det här ämnet om du söker lite. På tal om det här med prestanda. Det lättaste hade varit om du körde asp.net istället då du hade kunnat använda cache-klassen istället... Allt som finns på alla eller nästan alla sidor tycker jag att du skall lagra i application-objectet på nå't sätt, skriv gärna ett antal generella funktioner som kan försöka leta efter texten i först application-saken, sedan i databasen... Det du skall lagra i application-objectet är nå'n form av klass med t.ex. när texten användes sist, vilket språk texten är för, vilket id den har mot databasen samt texten i sig själv. men nu kodar jag i vanlig asp... något sånt här hade jag tänkt mig att tabellen skulle se ut: Jag håller också på att gör flerspråkiga sajter. Min databasmodell tycker jag fungerar bra. Du skulle kunna ha det som detta: jo något sånt lär jag ju få göra, men jag tänker mest på den fasta texten nu som menyer, hjälptexter och annat sånt. Jo jag har också problem med de fasta texterna. Nu har jag tillsvidare lagt alla i en .inc fil som jag inkluderar på alla sidor. Nackdelen är att den laddar massa onödiga variabler på varje sida. Fördelen är att jag kan återanvända översättingar jag redan gjort. Här är ett litet utdrag ur filen: Det där inlägget blev inte så snyggt formaterat.. Klicka på svara så syns en del av texten bättre i översta rutan. Som jag skrev så vore det enklare med asp.net, men jag skrev ett förslag på lösning också med hjälp av application-objectet också... För de statiska texterna tycker jag att du skall satsa på att lägga dem också i db och sedan skriva lite funktioner för att hämta ut det, men cacha texterna i application-objectet som sagt... Jag håller på med ett ganska så stort project innom flerspråkiga sidor. Tack, tror att jag börjar få en ide hur jag ska göra det nu, sätter en language mapp i varje mapp, där har jag olika textfiler för varje språk. sen includar jag bara rätt textfil och läser variablerna från den. Uppstod ett litet problem nu, har svenska texten i en fil och engelska i en annan.. men hur ska jag göra för att hämta texten från rätt fil av dom två man kan ju inte använda asp i #include och om jag använder server.execute så kan jag ju ändå inte använda variablerna där jag vill ha dom.. jag håller med Jeppe om att du kan fixa med en fil som du includerar... Jo, det går, men det är grötigt som bara den, en databas är lättare... Hur lätt är det att sitta & uppdatera det där tror du? :/ Men om det var fasta värden så ska dom ju inte ändras men jag skulle föredra en databas och sedan spara sv eller en på varje postad sak... Jag har löst samma problem genom att ha en databas per språk, samma tabellstruktur i båda databaserna. (Dessa ändras ju mindre sällan) och därefter så testar jag i början av min index-sida vilket språk som är aktuellt. det fungerar nu iaf, inte med caching men behöver bara skicka en databasfråga så får jag dom texter som jag behöver. har tänkt om databasstrukturen ocksåFlerspråkig sida
Sv: Flerspråkig sida
Sen så för varje svenskt inlägg så sätter du sv och varje engelskt så sätter du en.
Sen då folk kommer in på sidan och får välja vilket språk så skapar du en session("sprak") = "en" eller "sv"
Och varje gång du ska hämta nå data så sätter du bara in en session i SQL anropet.
WHERE=" & session(""sprak) & "
Nåt sånt tror jag skulle funka....Sv: Flerspråkig sida
Sv: Flerspråkig sida
Sv: Flerspråkig sida
<code>
Session("website_lang") = Left(Request.ServerVariables("HTTP_ACCEPT_LANGUAGE"),2)
</code>
Varför jag bara slänger in de två första tecknen är för att i t ex engelska så är värdet på variabeln "en-us" om det är "amerikanska" osv...
Sen där jag hämtar text / skriver ut text så kollar jag värdet på sessionsvariabeln i en select case-sats... alternativt i SQL-strängen som nämndes ovan.
Varför jag använder mig av en sessionsvariabel är för att ibland vill användaren ställa in språket själv... och då gör man en funktion för det.
Det automatiska sker ju bara en gång vid uppstart av sessionen... Sv: Flerspråkig sida
Sv: Flerspråkig sida
id - sprak - sida - text - idnamn
id = auto nummer
sprak = vilket språk
sida = vilken sida(för att ha det lite redigare)
text = texten som ska skrivas ut
idnamn = identifikationsnamn(samma för alla språk)Sv: Flerspråkig sida
Jag lagrar först alla språken i en tabell:
tbl_site_language
site_language (primärnyckel) Innehåller (eng,swe,spa,ger,jap)
site_language_description Inehåller (English,Swedish....)
Sen för tex nyhetsspalten har jag först en huvudtabell:
tbl_news
id
show_in_site (true/false)
Sen en nyhets/språk tabell där man skriver in nyhetstexterna:
tbl_news_site_language
id
news_id (främmande nyckel från tbl_news)
title
news_text
site_language (främmande nyckel från tbl_site_language)
Så har jag löst det för nyhetsspalterna och övrig info i databasen.
För de statiska texterna på sidorna är jag inte riktigt nöjd. Jag har lagt alla texterna i en include fil med en if sats.
<code>
If site_language="swe" then
welcome_string = "Välkommen!"
ElseIf site_language="eng" Then
welcome_string = "Welcome!"
End If
</code>
Denna fil börjar bli väldigt lång och rörig så jag funderar på hur jag kan lösa det bättre. Svårt att komma ihåg vad man döpt alla sina strängnamn också. Xml kanske vore smidigare?
/JeppeSv: Flerspråkig sida
Tabell: site_language
Spalt:
id = Ger ett nytt nummer för varje postat språk
site_language = sv, en o.s.v.
id---site_language
1---sv
2---en
Tabell: news
Spalt:
id = Ger ett nytt nummer för varje postad nyhet
site_language = Det id för det språket du väljer
headline = Rubriken för nyheten
content = Texten som hör till rubriken
id---site_language---headline------------content-------
1----------------1---Svensk rubrik!!------Svensk Text!!
2----------------2---English Headline!!---English Text!!
Något sånt menar jag... Du kan ju som du själv sa ha språken i en egen spalt och då blir det sådär. Om man har som dom flesta andra har så kan det bli fel om någon från japan kommer in på sidan för att då har inte du det rätta språket...
Anropet blir nu detta... Då dom väljer språk så skapar du en session("site_language")= "id från site_language tabellen"
Sen varje gång du ska hämta data så sätter du bara in WHERE="" & Session("site_language") & ""Sv: Flerspråkig sida
Sv: Flerspråkig sida
<code>
If language = "swe" Then
'---VERB STRINGS---
add_string = "Lägg till"
send_string = "Skicka"
edit_string = "Ändra"
update_string = "Uppdatera"
upload_string = "Ladda upp"
delete_string = "Ta bort"
confirm_string = "Bekräfta"
show_in_site_string = "Visa på sidan"
yes_string = "Ja"
no_string = "Nej"
back_string = "Tillbaka"
next_step_string = "Nästa steg"
close_string = "Stäng"
'---MEMBER STRINGS---
login_string = "Logga in"
remember_me_string = "Kom ihåg mig."
forgot_password_string = "Glömt lösenord"
member_string = "Medlem"
resign_member_string = "Avsäg medlemskap"
new_member_string = "Bli medlem"
new_member_title_string = "Bli medlem"
edit_member_string = "Ändra uppgifter"
news_letter_string = "Nyhetsbrev"
order_string = "Orderfakturor"
confirmation_string = "Bekräftelse"
...osv...
ElseIf language = "eng" Then
... samma på engelska...
End If
</code>
Sen på sidorna lägger jag in strängarna där de behövs tex. <%=login_string%>
Att ha detta i en databas kan ju vara en ide men det känns som detta är lättare att ha det i en fil. Har en ide om att göra om allt till XML men måste nog kolla över mina kunskaper först lite.
/jeppeSv: Flerspråkig sida
/JSv: Flerspråkig sida
Sv: Flerspråkig sida
Alla html-filerna gör jag om till asp. Sen byter jag ut all text till en variabel, samma variabel oavset språk. Dessa variabler ligger sedan i olika textfiler, beroende på språk.
Via servervariables tar jag reda på klientens språk och laddar in den språkfilen default, men där finns också in listbox så att man kan ladda in ett annat språk. Med hjälp av coockies så kan man sedan hålla reda på vilket språk som användes sist.
Därefter så har jag gjort(ej färdig riktigt) ett VB-project, som gör att jag laddar upp mina HTML-filer, byter namn till asp, och gör så att jag enkelt kan byta ut texten mot variablerna, spara både ASP-filerna och de olika språkfilerna.
Jag har funnit att detta fungerar kanonbra, ialla fall för mig.Sv: Flerspråkig sida
Sv: Flerspråkig sida
Sv: Flerspråkig sida
Döp en fil till language.asp
language.asp<code>
Sub site_language(type)
if session("site_lang") = "sv" Then
Select Case type
Case Menu
Response.Write "==MENY==<br />" & vbcrlf
Response.Write "Startsidan<br />" & vbcrlf
Response.Write "Kontakta Mig" & vbcrlf
Case Headline
Response.Write "Välkommen!" & vbcrlf
End Select
elseif session("site_lang") = "en" Then
Select Case type
Case Menu
Response.Write "==MENU==<br />" & vbcrlf
Response.Write "First Page<br />" & vbcrlf
Response.Write "Contact Me" & vbcrlf
Case Headline
Response.Write "Welcome!" & vbcrlf
End Select
else
Select Case type
Case Menu
Response.Write "==MENY==<br />" & vbcrlf
Response.Write "Startsidan<br />" & vbcrlf
Response.Write "Kontakta Mig" & vbcrlf
Case Headline
Response.Write "Välkommen!" & vbcrlf
End Select
end if
End Sub</code>
Sen då du valt språk så skapar du en session..
session("site_lang") = "sv" eller session("site_lang") = "en"
beroende på vilket språk dom väljer...
Sen så på varje sida skriver du bara:<code>
<% call site_language(Menu) %></code>för att hämta menyn till exempel...
Du kan annars spara allt i en databas och hämta det beroende på vilket språk dom vill ha på sidan.Sv: Flerspråkig sida
Sv: Flerspråkig sida
Så är det lätt att hämta det bara via att skriva WHILE site_lang = sesison("site_lang")
och då sparar man sv eller en i sessionen site_lang för att sedan hämta den varje gång man ska hämta nå poster...Sv: Flerspråkig sida
<code>lang = Response.QueryString("lang")</code>
Mina besökare väljer själva språk genom klick på flagga, där skapas QueryString:en.
Beroende på vilket språk så laddar jag olika databaser till min Connection-sträng. Databaserna är döpta eng_databas.mdb, swe_databas.mdb, tys_databas.mdb osv. Funkar bra och löser problemet med färre kodrader än vad jag orkade ta mig igenom här :)
RogerSv: Flerspråkig sida
id - auto number
Lang - char
Textid - int
Text - Text
sida - char
sen använder jag bara:
<code>
set rs = connect.execute("select textid,text from Languages where sida = '" & sida & "' and lang = '" & lang & "'")
texter = rs.getrows
</code>
sen har jag en funktion som hämtar den texten jag vill ha
<code>
GetText(5,texter)
</code>
men då måste jag skicka med arrayen texter i funktionen, kom inte på någon annan lösning.