Avatar billede eksperten1 Nybegynder
20. marts 2004 - 23:32 Der er 10 kommentarer og
1 løsning

Sprogversionering, tanker og idéer

Jeg ville gerne høre andres tanker og meninger (erfaringer) med at lave sprogversionerede webapplikationer i ASP.

Jeg står for at skulle lave en webapplikation som skal leveres i 3 sprog. Bemærk at det ikke er et normalt site, men mere et reelt program. Så det er eks. overskrifter, knaptekster, js-advarsler og den slags jeg skal versionere. Indholdet klarer brugerne selv.

Jeg har haft forskellige tanker med at opbevare diverse tekster i en database, men syntes at der måske er for mange ekstra querys på den måde.

Jeg fandt ud af at et webmail system (iismail) har et directory der hedder "lang", som indeholder en .dat fil for hvert sprog som det er tilgængeligt i. Herunder har jeg klistret lidt af den danske fil ind.
Jeg formoder at filen bliver læst ind i enten en cookie eller en sessionvariabel og parset ut i et array, men hvad med performance på det.
Bemærk at der ikke er specielt mange brugere på systemet samtidig, men alligevel er jeg indstillet på at lave den mest optimale metode.

Jeg har haft tænkt på at lave n tilsvarende fil i xml, men spørgsmålet er vel også om det ikke bare er endnu et lag der skal bruge cpu kraft.

Hvor ville det være mest hensigtsmæssigt at opbevare det. Hvis nu at jeg laver en application_variabel for hvert sprog og så kun henter brugerens sprogvalg fra en cookie. ?

Jeg glæder mig til jeres tanker og idéer.

mvh Mark

-- Fra webmails config fil:
;############################
; Language file for Webmail (http://www.iisworks.com)
; Add a ";" to comment (part of) a line.
; 03/07 Danish - Contributed by Thorvald Aagaard
;############################

;### Language specific system settings
0=ISO-8859-1 ;Charset for denne language
1=1030 ;LCID
192=Ind, Slettede emner, Sendte emner, Kladder ;### Built-in folder names. Do not change order!
196=År, Måneder, Uger, Dage, Timer, Minutter ;### Names for timeperiods

;### Login page
2=Bruger
3=Kodeord
4=Gem brugernavn
5=Log ind
6=Tilmeld
7=Send kodeord
8=Sprog
9=Gem dit brugernavn i en cookie på denne computer
10=Forkert brugernavn eller kodeord

;### Listing
11=Fra
12=Emne
13=Dato
14=Alder
15=Størrelse
16=Til
17=Ny meddelelse
18=Afsender
19=Dato sendt
20=Sidste læsning
21=Dato hentet
22=Hentet fra IP
23=CC Modtagere
24=Høj prioritet
25=Lav prioritet
26=Meddelelser
27=fundet
28=Ulæst
29=Første side
30=forrige side
31=Næste side
32=Sidste side
33=Månedlig båndbreddegrænse overskredet! Der er lukket for både afsendelse og modtagelse af mail.
34=Opret ny meddelelse
35=Flyt valgte meddelelser
36=Er du sikker på du vil slette alle valgte emner fra Webmail?
37=Slet valgte meddelelser
38=Find tekst i meddelelser i denne folder
39=Afbryd find
40=Marker valgte meddelelser som Læst
41=Marker valgte meddelelser som Ulæst
42=Send valgte meddelelser som vedhæftning pr. email
43=Skift Autopreview mode
44=Vis mine links
45=Tag en note
46=Vælg folder der skal vises
47=Bruger konto konfiguration
48=Manage WebMail brugere og grupper
49=Webmail konto og mailbox information
50=Log ud af Webmail
51=Gå til hjemmeside
52=Check for nye meddelelser
53=(Fra)vælg alle meddelelser på denne side
54=Vis sidste POP log
Avatar billede misbruger Nybegynder
20. marts 2004 - 23:43 #1
Jeg har før lavet en multilinguel webapp, og hvad angår ovenstående .dat fil, så er det efter min mening ikke den rigtige måde....

Det vil som regl være mere performance venligt at læse fra en db, end en fil på disken.

Endvidere er der lettere for slutbrugeren at vedligeholde en tabel i databasen, end i en fil.

Såfremt du ønsker kan jeg hurtigt tegne dig et diagram over hvorledes jeg lavede db'en til min løsning, der er virklig ikke mange ben i det.

Grundlæggende gør jeg det at....
Jeg henter et recordset med alle tekster for en given side/webform i et givent sprog
Fylder alle felterne, box's etc ved load af siden.
Dermed kan man også skifte sprog på hvilken som helst side...

Det tricky ligger først i såfremt der skal være forskellige versioner af en side, men det har jeg løst ved at have en tabel med tekster der overskriver default teksterne, såfremt det er en speciel version.... Lidt advanceret SQP klare den fint.
Avatar billede misbruger Nybegynder
20. marts 2004 - 23:44 #2
SQL even :)
Avatar billede eksperten1 Nybegynder
21. marts 2004 - 09:19 #3
Hmm, så du finder det mere hensigtsmæssigt at hente teksterne hver gang en side vises ?
Jeg kunne godt tænke mig at se den måde du strukturede tabellen på. !?

Tak for svaret.
Avatar billede retry Nybegynder
21. marts 2004 - 10:44 #4
Enkeltord og korte tekster i database. Èn tabel indeholder opslagsordet, en anden tabel indeholder oversættelserne, en tredie tabel indeholder mulige sprog.
Ordbog pr. sprog caches.
Opslag sådan: response.write translate("hello world")
Hvis argumentet til translate ikke findes, returneres opslagsordet blot.

Længere tekster lagres i database som andet "content", men med dokumenttype "systemDocument". Konventionen er her, at der slås op på dokumentets titel og en INNER JOIN med id for det aktuelt valgte sprog.
response.write getSystemDocument("myDocTitle", currentLanguage())

Tabeller med sprogversionérbare kategorier o.lign. har sprog-Id med som kolonne. Derved bliver alt "content" inklusive diverse kategoriseringer individuelt pr. sprog, mens hele "rammeværket" har 1-til-1 korrespondance mellem alle sprog. Administrator kan selv tilføje/slette sprog, da alt ligger i databasen.

Det er sådan set lige ud ad landevejen, når principperne én gang er fastlagt.

Jeg har efterfølgende implementeret teknikken under ASP.NET med udnyttelse af .NETs udmærkede cache-faciliteter, men ellers identisk.
Avatar billede eksperten1 Nybegynder
21. marts 2004 - 10:52 #5
Hvad mener du med at det caches ? Skal jeg bruger Filter funktionen imod et array med teksterne i eller ?
Avatar billede retry Nybegynder
21. marts 2004 - 11:04 #6
caches = holdes i memory
Avatar billede eksperten1 Nybegynder
21. marts 2004 - 11:07 #7
Det forstår jeg, men hvordan vil du opbevare dem, i et array ? I en application_variabel ?
Avatar billede retry Nybegynder
21. marts 2004 - 11:13 #8
Ja, array eller dictionary i application variable.
Avatar billede eksperten1 Nybegynder
21. marts 2004 - 11:14 #9
Hvordan fungerer det rent performance mæssigt ?
Avatar billede retry Nybegynder
21. marts 2004 - 11:34 #10
Opslag i ordbogen er ikke mærkbare, da det foregår i memory. De fleste webservere har masser af CPU-tid tilovers. Jeg tjekkede lige en almindelig portalforside: Det tager knap 400ms at generere siden. I løbet af den tid har den hentet ca. 10 #includes og kørt 16 queries i databasen. I den sammenhæng betyder 30 ordopslag blandt måske 300 ord i en memory-baseret datastruktur ikke noget.
Avatar billede eksperten1 Nybegynder
21. marts 2004 - 11:45 #11
Ja men så må det vist være den metode jeg skal bruge.

1000 tak for din hjælp, det var alletiders.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester