Avatar billede thb Nybegynder
01. juni 2004 - 20:53 Der er 16 kommentarer og
2 løsninger

Ide til sprog site

Hej alle

Jeg har før spurg om noget i den her stil, og jeg blev også vist en løsning, men jeg kan ikke lige finde ud af det...

Jeg skal lave et site med flere sprog..
Jeg har tænkt mig at lave følgende tabeller:

sprog
- lan_id
- navn

fasteord
- fasteord_id
- code

ord
- ord_id
- fasteord_id
- ord

tekst
- tekst_id
- lan_id
- tekst

Og så en tabel der sætter faste ord, ord og sprog sammen..

Det er så meningen at jeg vil i fasteord lave ord som "new_member" og i ord sætte man så "new_member" lig med foreksempel dansk og ordet "opret medlem" eller lign.

Lyder det som en fornuft måde at gøre det på.. og er mine tabeller fornuftige... ???

Har I en bedre måde at gøre det på.. ?

Thomas
Avatar billede dennismp Nybegynder
01. juni 2004 - 21:08 #1
Altså, hvis det løser dit problem - så er det en god løsning ..

Men prøv at se på: http://www.eksperten.dk/spm/500610 der bliver snakket lidt frem og tilbage om dette emne.
Avatar billede muddi Praktikant
01. juni 2004 - 22:27 #2
Nu ved jeg ikke hvor meget du er inde i php, men der er ikke nogen grund til at genopfinde hjulet, så du skulle måske tage et kig på PEAR. Der findes en translation klasse, som kan bruges til lige netop det du efterlyser
http://pear.php.net/package/Translation

Det kræver at du sætter dig ind i PEAR, og at du har PEAR på din server. Desuden skal du kende til Objektorienteret PHP.

Tag et kig på det, og se om det kan bruges.
Avatar billede thb Nybegynder
01. juni 2004 - 22:44 #3
Jeg har siddet og læst din ide til en løsning i linket...

Kan du ikke udbyde den select du laver... Jeg er ikke helt med...
Du skriver at du vil lave 2 tabeller, kan du ikke give eksempel du indholdet..

Undskyld alle de spm, men jeg vil godt have en fed løsning så jeg ikke skal lave det om hele tiden..

Thomas
Avatar billede thb Nybegynder
01. juni 2004 - 22:46 #4
Jeg føler selv at jeg er meget godt inde i php, har dog ikke lavet det så længe, legede i asp før i tiden, men synes at jeg er kommet godt efter det.. :D

Jeg læser lige lidt på PEAR... :D

Thomas
Avatar billede krydset Nybegynder
01. juni 2004 - 22:50 #5
altså det jeg gør er at lave sprogfiler i php da.php, eng.php, se.php, fi.php osv osv og så bruger jeg browseren til at vælge hvilket sprog brugeren skal have vis siden i, ed ikke om det er noget derhenad du kunne tænke dig ??
Avatar billede dennismp Nybegynder
01. juni 2004 - 22:56 #6
thb: "Jeg har siddet og læst din ide til en løsning i linket..." .. var det til mig ?

Hvis det er mit indlæg d. 21/05-2004 00:56:43 så kan jeg da godt forsøge:

language: id=1, sprog=da, charset=iso-8855-etelelrandetjegharglemt :)
language: id=2, sprog=en, charset=iso-8855-etelelrandetjegharglemt :)
language_item: id=1, language_id=2, name="WELCOME", value="Welcome to my homepage"
language_item: id=2, language_id=1, name="WELCOME", value="Velkommen til min hjemmeside"


osv..

.. men eksemplet er bare for at forsøge på at opfylde de krav der var. Jeg ville nok ikke bruge databasen til at lagre den slags. Men det skal siges at jeg endnu ikke har haft en multi-sprog side, så jeg har ikke nogen praktisk erfaringer. Men på samme side er der en del forslag om ikke andet :)
Avatar billede krydset Nybegynder
01. juni 2004 - 22:58 #7
de sprogfiler indeholder så variabler med tekst til sitet
Avatar billede thb Nybegynder
01. juni 2004 - 23:34 #8
dennismp > Den var til dig :D

krydset > Det jeg har prøvet endtil videre med overstående ide/system, er lidt det som du siger bare i en db istedet for en fil... Jeg føler at jeg har lidt bedre styr over det hvis det er i en db, og jeg kan lave et ordentligt admin system, hvor man vil kunne oprette sprog og tilføje ord til ordbogen..

Jeg sad og baksede med funktionen array_combine() og så ender jeg der hvor du er:
$lang['navn'] = værdi
print $lang['navn']

Men jeg ved ikke om det tager med server kraft at gøre det på den måde..

Og så ved jeg ikke om min db struktur er ordentlig, den må jo gerne være hurtig.
Det hedder vist normaliseret.. :D

Thomas
Avatar billede thb Nybegynder
01. juni 2004 - 23:35 #9
dennismp > Mit dit lille tekst eksempel så ender vi jo næsten ved det jeg har beskrevet.. :D Du har bare ikke delt tingene op....

Thomas
Avatar billede dennismp Nybegynder
02. juni 2004 - 00:09 #10
Jep. Det var også bare et hurtig eksempel. Men det var heller ikke lige databaseløsningen du skulle se.. Du skulle mere se de andre forslag der er :)

Grunden til at jeg ikke går ned på ord-niveau er at sprog er underlige. Tænk f.eks på dansk der har vi flere ord der betyder noget forskellige alt efter sammenhæng så du skal nok passe på med at oversætte enkelt-ord (sådan tolker jeg dit db-struktur).. Og nogle ord staves forskelligt alt efter hvad det henviser til.. osv.. Men det er bare overvejelser om hvad du putter i databasen - ikke selve dit design af det.

Så jeg har bare foreslået en simpel udgave :)

Men for at vende tilbage til dit spørgsmål. Ja, det er fornuftigt. "Bedre" er svært at sige, uden at kende til hvilke krav du har. Men de opfylder garanteret det du ønsker de skal, så mon ikke det er godt nok. Det ser da fornuftigt ud - og bare det du gør der tanker om det før du har implementeret det, er jo et god ting :)

Sådan normaliseringsmæssigt er det også fint. Jeg kan ikke finde på noget at brokke mig over :-)
Avatar billede sukos Juniormester
02. juni 2004 - 00:14 #11
Personligt, vil jeg kun "lege" med sprog når brugeren tillader en cookie.
Og den cookie bestemmer sproget.
Altså, ved hver request tjekkes cookien, og på den måde bestemmes lang.

Om du så vil ha' filer liggende med lang, eller gemme tekst i DB..................

I DB ville jeg ha' f.eks.

da_feltnavn og en_feltnavn

med dansk og engelsk tekst.

SELECT * FROM `". $_COOKIE["lang"] ."_feltnavn`
Avatar billede sukos Juniormester
02. juni 2004 - 00:15 #12
eller table name
Avatar billede sukos Juniormester
02. juni 2004 - 00:18 #13
$table = "da";

if(!isset($_COOKIE["lang"])) {
setcookie("lang", "da", time()+2592000);
}else{
    if($_COOKIE["lang"] == "en") {
$table = "en";
    }
}

SELECT * FROM `". $table ."_feltnavn`
Avatar billede sukos Juniormester
02. juni 2004 - 00:21 #14
hmm, lidt overflødig kode der! :O)

$table = "da";
if(isset($_COOKIE["lang"])) {
    if($_COOKIE["lang"] == "en") {
$table = "en";
    }
}
Avatar billede thb Nybegynder
02. juni 2004 - 08:31 #15
dennismp > tak for hjælpen.. :D Jeg tror at det er en meget god ide det du siger med ikke at oversætte enkelte ord, men mere sætninger..

sukos > Hvor kun hvis der er cookies.. ???

Alle må godt ligge et svar...

Thomas
Avatar billede dennismp Nybegynder
02. juni 2004 - 09:12 #16
Det var så lidt - håber du blev klogere :)
Avatar billede thb Nybegynder
02. juni 2004 - 13:30 #17
Sådan et array som jeg har tænkt mig at bruger: $lang['new_member'] = "opret medlem" vil sådan et array kunne opbevares i en session... og kræver det meget ?

Thomas
Avatar billede dennismp Nybegynder
02. juni 2004 - 13:43 #18
Gem det som en fil (fx language.php).

Hvis du gemmer det i session skal php ved hver hit hente en stor session ind (da den så vil indeholde alle teksterne) .. og da der er een session pr bruger så er det meget plads (Da det egenligt er unødvendigt). Og da teksterne ikke er forskellige pr bruger (udover evt om man vil have dansk eller engelsk) så er det spild af plads.

Gem det bare i en almindelig fil. :)

Hvis det er fordi du ønsker at indgå at php skal læse en ekstra fil pr. hit, så skal du huske på at session (normalt) også bliver gemt som almindelig filer.
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