Avatar billede mac10 Nybegynder
05. januar 2010 - 19:11 Der er 6 kommentarer og
2 løsninger

Flere forskellige sprog på website? (Bedste metode?)

Hej alle eksperter

Jeg har nu roddet lidt med et website som jeg skulle lave på både dansk og engelsk. Jeg havde lavet det således at en session afgjorde sproget (også en cookie version), og den tog data ud fra db.

I min db havde jeg følgende:

- pages
id
title_dk
content_dk
title_eng
content_eng
date_added

Er nu blevet anmodet om at også at sørge for at man kan vælge mellem Svensk og Tysk oven i de 2 sprog. Synes bare det er rimelig meget data som kommer til at lægge i én række.

Hvad er den bedste metode at bygge det på? Med en mellemtabel måske? Så man f.eks. gør følgende:

- pages
id
date_added

- pages_lang
id
page_id
lang
title
description

Ovenstående kunne jo fungere, men ville blive lidt langhåret når man i CMS skulle lave en masse MYSQL UPDATE sætninger for hver gang man skulle rette én side, da den skal gemme det på 4 forskellige sprog (og måske endnu flere senere hen).

Er der nogen der ligger inde med en god metode at sørge for at gøre det universielt, uden alt for meget kode eller data i db'en?

Har tit gået og tænkt over dette, men aldrig kommet til noget konkret, men nu skal jeg bruge det i praksis så hjælp søges! :)
Avatar billede keysersoze Ekspert
05. januar 2010 - 19:17 #1
din nuværende databasestruktur er i hvert fald ikke særlig optimal - til gengæld ser dit nye forslag helt korrekt ud.

Kodemæssigt burde det heller ikke være noget større problem - du kan selvfølgelig ikke undgå at der kastes en del inserts/updates til databasen, men i stedet for at du selv skal opdatere koden for hvert sprog kan du jo lave en løkke der håndterer det hele for dig, fx i pseudokode;

'SELECT * sprog
'foreach sprog start
'UPDATE/INSERT pages WHERE sprog = foreachvalue
'foreach sprog slut

Før der blev kørt INSERT/UPDATE kunne man evt tjekke om det i det hele taget var noget tekst at behandle.
Avatar billede showsource Seniormester
05. januar 2010 - 22:34 #2
Jeg er ikke lige helt med på hvad keysersoze skriver, udover det er til update af siden ?

Min erfaring siger:

En tabel hvor hvert sprog er defineret:
1 dk
2 eng
3 de
o.s.v

Du har så typisk en tabel med faste vars, f.eks. tekst i toppen af siden
Og en tabel som viser div. sider, og hvor row "langid" passer til en defineret var. (Altid min. et sprog i tabel et.

Og ved hver request henter du så mulige langs.
D.v.s. laver en query som henter de mulige langs i tabel et, som også har samme langid i div. andre tabeller.

Dem gemmer du i et array, og tjekker så evt. for en sat cookie, til at definere hvilket lang som skal vises.

I admin af langs, er det jo dem som er defineret i tabel et som afgør havd som skal vises.

Ved ikke, måske du er med ?
Avatar billede mac10 Nybegynder
06. januar 2010 - 10:37 #3
Lige pt. så synes jeg min metode nr. 2 lyder som den letteste at overskue som keysersoze siger.

Jeg er ikke helt med på din løsning showsource. Jeg ved ikke om jeg misforstår, men synes det lyder som lidt meget arbejde for så lille en funktion.

Vil du ikke mene at der er bedre med en mellemtabel og så bare hente det data som passer til page_id?
Avatar billede showsource Seniormester
06. januar 2010 - 11:32 #4
Tror nu ikke der er den store forskel på måden.
Har netop lavet en side med forsk. sprog
Her valgte jeg at bruge en tabel til sprog, som nævnt.
Ved hver request hentes sprog og lægges i et array.
Kunne selvf. laves direkte i scriptet, men valgte en tabel for at andre kan redigere sprog på siden.
Og den query som henter sprog, tjekker at der rent faktisk findes en side til sproget.

Der har jeg så godt nok en lille bøf, fordi der kan f.eks. være to undersider til dk, men kun en til eng.
Men jeg er heller ikke 100% færdig med siden endnu.

Og grunden til at jeg vil ha' array'et, er for at 100% sikkert kunne definere hvilket sprog som skal vises, og samtidig være sikker på at det findes i db.

Og ved redigering vælges først sprog og derefter side.

Skal så lige tilføje også, at hvert link har ?lang=dk hvor dk er defineret førend der laves output.
Og i formularer er det et hiddenfelt.

Med en .htaccess kunne man jo evt. få en lidt pænere url.

Og jeg er da bestemt ikke sikker på at måden jeg har lavet det på er optimal, men det er til en mindre side, og umiddelbart fungerer det fint.
Avatar billede mac10 Nybegynder
06. januar 2010 - 12:06 #5
Tak for dit input showsource. Jeg vil prøve mig lidt frem og se hvilken metode der tilpasser sig bedst til min fremgangsmåde og tage udgangspunkt i det.

Også tak til dig keysersoze.

I må meget gerne smide et svar, da det netop var nogle idéer og meninger jeg havde brug for - og det synes jeg at jeg har fået.

God dag til jer begge
Avatar billede keysersoze Ekspert
06. januar 2010 - 13:39 #6
Der er nok ikke én måde der er den rigtige da det selvfølgelig afhænger af ens setup, dog er den metode brugt på nuværende tidspunkt meget skæv. En helt tredje mulighed kunne måske være en XML kolonne og dermed gemmer man teksterne i en XML struktur. Statiske tekster til fx menuer osv kunne lægges i deciderede XML-filer.
Avatar billede showsource Seniormester
06. januar 2010 - 17:54 #7
Et svar.
Og umiddelbart mener jeg at en query er langt hurtigere end filbehandling.
+ at evt. manipulation (hacker) er sværere.
Avatar billede keysersoze Ekspert
06. januar 2010 - 23:14 #8
filer bliver kun brugt til statiske eller så godt som statiske ting såsom tekster til knapper osv og det fungerer glimragende - decideret indhold skal som udgangspunkt selvfølgelig ikke ligge i filer, men det gør det heldigvis heller ikke med xml datatyper i databaser.
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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