Database design med flere sprog

Tags:    php phpmyadmin database mysqli

Hejsa.

Hvordan designer jeg bedst mig database til min portfolio, den skal nemlig gerne være på min. 2 sprog, dansk og engelsk.

Er det bare at lave en kolonne til hvert sprog eller hvordan gør jeg det bedst?



8 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 8 karma
Sorter efter stemmer Sorter efter dato
Du kan også, helt lavpraktisk, gøre ligesom fx CodeIgniter og bruge ganske almindelige PHP filer til sprog.

fx have en mappe der hedder lang, og inde i den have en fil per sprog, der så indeholder et array med oversættelser for det sprog, som fx:

lang/da.php
Fold kodeboks ind/udKode 

lang/en.php
Fold kodeboks ind/udKode 


og så kan du fx i din php-fil gøre følgende:

index.php
Fold kodeboks ind/udKode 

så kan du skifte sprog frem og tilbage med ?lang=da og ?lang=en i url'en.

Det er selvfølgelig en meget spartansk implementation, men den kunne få dig skubbet igang. Så kan du altid flytte den til en database eller XML-baseret løsning senere.



jamen hvis du allerede har din infrastruktur til systemoversættelser på plads er det da bare at basere sig på den. Det er ikke den flotteste normaliseringstaktik, men at have en system key i sine tabeller er ganske normal praksis.

Hvis du på alle dine relevante database entries har en kolonne der hedder "lang_key", og smider fx "da" og "en" ind på de danske og engelske artikler, så skal du bare querie "where lang_key = $langkey"* når du skal finde entries på det valgte sprog. Så når du opretter dine entries sørger du så bare for at have en lang_key dropdown med de to sprog i, så du kan vælge hvilket sprog artiklen skal gælde for. Hvis du vil være en lille smule galla og sikker kan du så gøre databasefeltet til en ENUM der indeholder præcis de to values (eller hvor mange sprog du nu har).

*=sql sanitation sørger CI for, hvis du bruger activerecord.



Nu ved jeg ikke omfanget af dit projekt, men jeg plejer selv af bruge nogle xml filer der indeholder enkle ord. Det kunne i dit tilfælde være navn, hvornår, beskrivelse osv. dem gemmer jeg under det pågældende plugin og kalder dem fx. en.xml, da.xml osv...

Jeg ville nok oprette en tabel med de stamdata der går igen mellem alle sprogene..

fx.

portfolio
id //unik
link //linket til projektet?
dato //dato


portfolioList
id // unik id
sprog //sproget
beskrivelsen //
andet //
pID //linker til portfolio

Kan godt være jeg har misforstået noget ?



Indlæg senest redigeret d. 19.04.2014 22:59 af Bruger #7728
Du kan godt gøre det ved at have en kolonne for hvert sprog ja, men det er nok bedre i længden at designe det så du har en tabel med en række for hvert sprog, for hvert element af content. Så skal du ikke ud i alter table statements og hovedpine når du beslutter dig for at tilføje et tredje sprog.

Læs evt. lidt om database design og i18n. Er sikker på der må være nogle artikler som beskriver det.



Jeg plejer at have flere sprog i ressource filer. Det er godt nok i .NET, men sammenlign det lidt med XML filer (også måden Android gør det på). En (eller flere) XML-fil pr sprog, som så bliver indlæst, og man bruger teksten ved brug af en form for variabler.

Evt. læs mere her - der står også noget om at gemme det i MySQL.



Indlæg senest redigeret d. 22.04.2014 09:50 af Bruger #16372
Du kan også, helt lavpraktisk, gøre ligesom fx CodeIgniter og bruge ganske almindelige PHP filer til sprog.

fx have en mappe der hedder lang, og inde i den have en fil per sprog, der så indeholder et array med oversættelser for det sprog, som fx:

lang/da.php
Fold kodeboks ind/udKode 

lang/en.php
Fold kodeboks ind/udKode 


og så kan du fx i din php-fil gøre følgende:

index.php
Fold kodeboks ind/udKode 

så kan du skifte sprog frem og tilbage med ?lang=da og ?lang=en i url'en.

Det er selvfølgelig en meget spartansk implementation, men den kunne få dig skubbet igang. Så kan du altid flytte den til en database eller XML-baseret løsning senere.


Det er værd at nævne, at det er præcis samme tilgang du bør anvende når du har dine sprog i databasen istedet for filer. Eneste forskel er, at du populerer dit $lang array med værdier fra databasen, således at du dynamisk kan administrere sprogene i en backend. Anvendelsen af sprogene i fronten bør klart væres via et $lang array, forskellen ligger i om det populeres fra databasen, fra xml filer eller om det blot er hardcodet (som i Pers eksempel).



Det er ikke den statiske tekst.
Det bliver lavet i CI så de der lang filer kender jeg udemærket.
Det handler om den dynamiske tekst, lige er det til min portfolio. Den skal have to sprog indtil videre



Den var smart Per.
Takker



t