10. juni 2003 - 12:28Der er
62 kommentarer og 1 løsning
Idé til opbygning af dansk/engelsk side!
Jeg skal lave en hjemmeside til en børnehave i PHP, både på dansk og engelsk. Jeg er ikke ligefrem 1337 php writer endnu, så derfor vil jeg meget gerne belønne det bedste forslag til hvordan jeg kan opbygge to identiske hjemmesider på dansk og engelsk på den smarteste måde vha. php. Det skal lige tilføjes at der skal kunne logges ind og ændres på stort set alt, bare så det også er muligt.
Jeg vil dog kun give point hvis jeg finder forslaget ordentligt og smart.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
allerførst skal du slå det ud af hovedet at du skal lave to identiske hjemmesider! du skal KUN lave én hjemmeside som så til gengæld kan håndtere både dansk og engelsk.
alt i selve databasen skal opbygges så alt sættes op til at tilhøre et sprogid (fx "sprogid = 1" for dansk - og "sprogid = 2" for engelsk
alle faste ting på siden (menupunkter etc) kan du så enten også lægge i databasen med et sprogid eller lade det ligge i fx en txt som så bliver inkluderet alt efter hvilket sprog siden skal vises på.
og det er sådan set alt meget kort sagt - altså lav én side der kan håndtere begge sprog, og opbyg databasen til også at kunne håndtere begge sprog
Jeg har netop lavet akkurat det samme. Dog har jeg ikke begrænset mig til to sprog, men kører lige så mange sprog, som jeg nu kan få oversat sitet til.
Jeg gjorde det at: 1) Jeg lavede en sprogdatabase (Altså en tabel som har tre kolonner, SprogID, Sprogkode, Tekst. Hver gang jeg ønskede at skrive en tekst på siden, skrev jeg den i databasen i stedet, og satte så en referance ind på siden i stedet.
2) Refereancen er et kald til en lille funktion, som ligger i en general include, så når jeg kalder funtkionen med et bestemt sprogid ( f.eks FOOV001 = Forside Overskrift nr 1) så kunne funktionen udløse lige præcis den tekst, som jeg bad om. Sprogkoden (DA,EN,NO,SE) har jeg gemt i session("sprog"), sådan at for hver bruger har han sin egen parameter med rundt, som afgør sproget.
3) For at undgå at skulle lave 1 mia sql-kald for hver gang en side skulle bygges op, valgte jeg at gemme alle sprogteksterne i serverens hukommelse.
Det vil være fornuftigt at lave en funktion, som håndterer sprogteksterne og cachingen af dem. Man vil typisk anvende Application variable til caching, der er flere måder at gørre det på når man skal cache et dataset. Datasettet kan ikke caches som et object i ASP, men vi kan lave det om til et 2dimensionelt array sådan her
Cache = rs.getrows
Array’et kan caches direkte
Application(“cache”) = cache
Når du skal finde et sprogid kan du lave en eller anden form for binær søgning efter id’et I array’et
Funktionen kommer til at se nogenlunde sådan ud
Function getLangText(id, lang)
Cache = Application(“cache”) if isEmpty(cache) then SQL = “SELECT from …….” ….. ….. cache = rs.getrows Application(“cache”) = cache End if
<kode som søger I cache-arrayet efter id, lang og returnerer teksten>
End funtion
Når nogen retter I sprogteksterne fra din administrationsside sletter du cachen ved at kalde
Application.Contents.Remove("cache”)
Så bliver de nye tekster loadet næste gang getLangText bliver kaldt.
4) Og det virker, og jeg skal kun lave et site og et frameset osv..... Jeg ved at appilkation og session variable findes i PHP, men de hedder vist bare noget andet.
Du kan også kaste et blik på HTML_Template_Xipe, som er et skabelon system i PEAR der er forberedt til oversættelser, bl.a. også ved brug af I18N-pakken!
en simpel måde vil være at lave to filer - en til hvert sprog til brug for selve sidens opbygning altså menu punkter osv. og så gemme variabler med henholdsvis dansk og engelsk sprog:
dk.php:
$menu = "menu punkter"; $forside = "forside";
eng.php
$menu = "menu points"; $forside = "frontpage";
alt efter hvilket sprog der er valgt includer du den ene eller anden fil.
Medhensyn til teksten ville jeg som andre har foreslået lave noget med sprog_id i databasen og alt efter valgte sprog ville jeg sætte en var øverst på siden som indikerer hvilket sprog der er valgt og på den måde kan du bygge alle dine MySQL kald op efter denne variabel
dea_pg >> Ville ikke basere hele siden på HTTP_ACCEPT_LANG -- hvad nu hvis en russer lånte en græsk computer, så ville det være rart at kunne indstille sprog; nøjagtig som på Google
Mht application() i ASP - kan huske der var snak om hvorvidt der findes samme funktion i PHP, og i givet fald, hvilken?
exp => nej, man kunne sætte den til første sprog i HTTP_ACCEPT_LANG, men man skal altid have et link til de andre sprog man har oversat til! (gerne som et flag, så kan alle følge med ;)
Hvis det er en side der ofte besøges, vil det være for langsomt med en bunke tekststrenge til at rumme indholdet - så skal der hvertfald indbygges noget caching - evt. brug af et template system med mulighed for caching.
ideen går ud på at lave et biblotek med cachede filer, når en bruger kommer ind på en side tjekker man så om man har en cached version, hvis ja, include den side, hvis nej, brug Output Buffering, da dette kan lægge alt outputtet over i en streng... så skriver man en fil med dette indhold og lægger den i mappen for cachede filer...
Hmm jeg må jo sige at det gav en del forskelle svar.. og nu er jeg jo lidt i tvivl om hvem som skal have pointene.. Sennel's metode ser uden tvivl avanceret ud.. desværre for avanceret for mig :/ .. jeg ville foretrække noget lettere, så hvis I lige gad at trække de letteste svar ud (evt. komme med lidt flere), så finder jeg ud af hvad der passer bedst. -Tak!
1) opret en database, hvor du gemmer alt tekst til hele siden, hvor du har en række med "lang", så du senere kan få l den tekst i det sprog der er valgt
2) lav dine scripts, så når man kommer ind på siden bliver der dannet et array med al tekst i det pågældende sprog. derefter er det er spm om at udskrive de pågældende variabler
3) indse at det går hundelangsomt
4) lav et caching system så dine sider bliver gemt som .html filer der bliver opdateret fx hver uge/månede eller når noget andet på siden bliver opdateret!
1) opret en mappe der hedder fx "cache" 2) i toppen af hver .php fil laver du en rutine der tjekke om /cache/[sidenavn].php findes --- hvis ja i (2) 3) inkluder denne side, og lad være med at udføre PHP scriptet, men stol på at HTML cachen kan klare det (du kan evt indbygge et script der sammenligner de 2 filers "sidst-ændret dato") --- hvis nej i (2) 3) start output buffering (ob_start();) 4) i bunden af filen laves et dumb af det bufferede materiale til en streng, denne streng skrives til filen /cache/[sidenavn].php 5) hvis strengen
det var sådan step-by-step guide til caching... læg de artikler jeg linker til på phpbuilder hvis du vil vide mere
Jeg er næsten bange for at det der bliver for avanceret.. det skal heller ik tage for lang tid at lave. Tar det så abnormt meget længere tid med MySQL?
Ked af det guys.. men jeg har ikke tid til at sætte mig ind i noget så avanceret som det der cache.. jeg må lave mit eget hjemmelavedet et-eller-andet kombineret med mysql.. I skal ellers have tak for hjælpen..
hvis du ikke forventer en side i størrelsenordnen jubii, google m.m. så lav det som jeg foreslår
Lav to php-side der indeholder en masse variabler - fx (dog asp-syntaks);
Home = "Hjem" Products = "Produkter" Contact = "Kontakt
og tilsvarende på det andet sprog
Home = "Home" Products = "Products" Contact = "Contact"
og inkluder den side der passer til det valgte sprog. I stedet for så direkte at udskrive "Hjem" i din tekst, så udskriv variablen "Home" - på den måde slipper du let over det med sproget!
hav0k>> kig lidt på switch funktionen og se mit svar tidligere - det er den metode som bl.a. phpnuke benytter sig af og det er der mange der benytter ;o)
--------------------------------------------- <?php switch ($_GET["content"]) { case "admin": include "admin.php"; break; case "faq": include "faq.php"; break; default: include "default.php"; } ?>
Jeg vil ikke mene at jeg har fået et svar som jeg virkeligt kan bruge til noget -- så jeg tror at jeg vil give pointene til noget helt andet: Den som kan lære mig et eller andet meget nyttigt (og ikke for svært) i PHP, som jeg mener jeg også kan bruge til et eller andet :)
erhm - der er givet stort set alle de muligheder der findes (bortset fra hvis du vil benytte en decideret "sprogpakke" som formentlig koster og som skal installeres direkte af webhotellet)... så hvis du ikke har fået et svar du kan bruge til noget - ja, så står du altså ikke til at redde!
ja - som tidligere sagt så er der jo givet alle tænkelige muligheder, så at du ikke kan få det fixes skyldes i hvert fald ikke mangel på løsningsmuligheder men nok nærmere manglende programmeringskundskaber!
Hvis du virkelig ikke kunne få det løst kan det retfærdigheds vist være rigtigt nok at du beholder point selvom det dog normalt er god kotume at dele lidt point ud for hjælp... anyway
det som jeg så - og formentlig også de andre herfra - kan føle sig lidt snydt ved er, at det _alligevel_ ser ud som om at du har brugt vores hjælp! se her
Det ser jo alligevel ud som om du er i gang med noget sprogstyring - og det endda med en løsning som ligner meget det du har fået hjælp til ud fra flere af de forslag herigennem. Derfor undrer det mig derfor endnu mere at du beholder alle pointene.
... er det mig der tager grueligt galt eller hvordan og hvorledes?
anyway - der kan jo være en grund til dette... derfor syntes jeg at vi skal give hav0k en chance for at forklare sig. Er forklaringen ikke god nok eller kommer den slet ikke - ja så må vedkommende anmeldes.
Okay folkens .. det var jo godt nok noget af en reaktion.. Grunden til at jeg gav pointene til mig selv var at jeg simpelthen ikke vidste hvem jeg skulle give pointene til.. men okay - jeg er da lidt eksperten.dk n00b - så er der ik en måde jeg kan dele dem mellem alle jer .. så gør jeg da det med glæde.. (regnede ik med at I ville gå sådan amok :/ PS. Jeg skrev faktisk selv noget PHP som jeg sagtens ville kunne finde ud af FØR jeg spurgte herinde.. grunden til at jeg spurgte herinde var at jeg håbede at finde en smart måde at gøre det på .. men den viste sig at være for avanceret for mig -- derfor fik jeg ik noget rigtigt ud af det - men jeg vil da stadig gerne give jer nogen point for alle de mange svar ..
hvis du vil give point til flere i ét spm skal alle have svaret - så kan du enten markere personerne i den boks der kommer og trykke på accepter eller også kan du gå ind i avanceret og tildele derinde.
Nu er det for sent at give point - men hvis du mener der skal gives point skal du oprette et spm til med reference hertil samt fortælle hvem der skal have point...
Okay.. her er et link hvor flg, kan få point for jeres ulejlighed: http://www.eksperten.dk/spm/370249 Og disse personer er: keysersoze sennels avminarm dea_pg tipsen
NÅ ja.. grunden til at jeg var så lang tid om at skrive var at jeg var på ferie - ved ikke om I derinde har opdaget at det er sommer?? (ej :D)
Synes godt om
Ny brugerNybegynder
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.