|
PHP PHP aplikacije, Smarty, PEAR |
![]() |
|
Alati teme | Način prikaza |
![]() |
#11 |
novi član
|
![]() Da, kontam poentu, svi prevodi idu u jednu tabelu, samo mi ona jedna tabela nije opravdavala postojanje. Inace, i dalje verujem da je broj 3 bolji, da li sto stare navike tesko umiru sta li je
![]() |
![]() |
![]() |
![]() |
#12 |
profesionalac
Professional
|
![]() Varijanta sa kolonama za svaki jezik mi je malo neprakticna.
Posto sam imao situaciju da treba da se podrzi veci broj jezika, i da to naravno treba da bude sto fleksibilnije, ishao sam na opciju da za svaki jezik imam odvojeno tabelu (content_page_sr, content_page_en, content_page_de), za jedan content item po red u svakoj tabeli, sa zajednickim content id-em (koji je sekvenca i cuva se negde druge i incrementuje po potrebi). Onda prosto uzmem $currentLanguage i mogu da zatrazim SELECT * FROM content_page_$currentLanguage i vozi... Povecan je broj kverija prilikom add/edit-a, ali su to ipak operacije koje imaju mali udeo u celoj prici. YMMV Prednost je u velikoj fleksibilnosti po pitanju broja polja i slicno. Mana je sto prilikom dodavanja novih jezika pored kreiranja tabele treba kreirati i po red za svaki postojeci content item. Sve u svemu, ovo mi se pokazalo kao najbolje resenje do sada.
__________________
The knack of flying is learning how to throw yourself at the ground and miss. |
![]() |
![]() |
![]() |
#13 |
profesionalac
Qualified
Datum učlanjenja: 19.05.2007
Poruke: 123
Hvala: 13
3 "Hvala" u 3 poruka
![]() |
![]() Ja stvarno ne vidim ni jednu prednost ovakve strukture (jedino ako bas ima PUNO redova, pa ako je cilj da se izbjegne da stavlja sve u jednu tabelu). Zar ti tabela sa kolonom languange_id ti nije prihvatljivije rješenje?
Poslednja izmena od bluesman : 28. 10. 2009. u 21:20. Razlog: Obrisan nepotreban citat |
![]() |
![]() |
![]() |
#14 |
mV
Certified
Datum učlanjenja: 22.08.2009
Lokacija: Novi Sad
Poruke: 67
Hvala: 0
16 "Hvala" u 13 poruka
![]() |
![]() Za potrebe jednog projekta gde je trebalo omogućiti velik broj jezika (10-15) ali gde je procena da većina tekstova neće uopšte biti prevedena izveo sam sledeću varijantu:
Sve varijante (prevode) teksta sam spojio u jedan string, upotrebivši neki "delimiter" koji se ne pojavljuje u normalnom tekstu, dodavši prethodno svakom prevodu dvoslovnu oznaku jezika kao prefiks, i takav string snimio u tabelu, polje tipa longtext, čak u istu tabelu sa ostalim sadržajima stranice, dakle nema posebne tabele za prevode. Pri prikazivanju stranice naravno, dovućiće se iz baze i nepotrebni prevodi, ali kao što rekoh većina sadržaja ima u 1 ili 2 jezika. PHP je taj koji će explode-ovati taj zapis, potražiti ima li ga u traženom jeziku, ako ga nema potražiti ga u "default" jeziku sajta, a ako nema ni takvog prikazati u bilo kojem prevodu. Važno je napomenuti da ne prevedene tekstove uopšte ne snimam u taj zbirni string. Jednostavno ih nema. Takvim pristupom sam dobio jednostavan mysql query, bez join-ovanja i bez kontrolne logike tipa "a ako nema u tom jeziku", ili dupliranja zapisa neprevedenih tekstova. Mislim da sam žrtvujući malo veći transfer dobio na brzini izvršavanja querija. Dodavanje novog jezika ne zahteva nikakvu intervenciju u bazi, jednostavno će stranica prikazati default prevod jer u novom jeziku nema ništa. U situaciji da se očekivalo da će većina tekstova biti prevedena na tih 10+ jezika išao bih na varijatu koja mi se pokazala uspešnom: Kôd:
CREATE TABLE IF NOT EXISTS `multilang_texts` ( `mltKey` varchar(32) NOT NULL, `mltLang` char(2) NOT NULL, `mltTranslated` char(1) NOT NULL, `mltText` longtext NOT NULL, UNIQUE KEY `mltId` (`mltKey`,`mltLang`) ); Kad se edituje tekst u default jeziku, tekst se piše i u sve zapise bez tog flega. Kad se edituje tekst u alternativnom jeziku (prevod), postavlja se taj fleg da se više ne dira. Poslednja izmena od Miroslav Ćurčić : 29. 10. 2009. u 11:22. |
![]() |
![]() |
![]() |
#15 | |
profesionalac
Professional
|
![]() Citat:
Redova inace zna da bude puno (mada se i to moze resiti na druge nacine..). Na sta treba paziti kod implementacije language_id kolone: Ako imam language_id kolonu, i dva reda za dva jezika, onda jedan content item nece imati jedan vec 2 id-a (sto iskljucuje mogucnost istog url-a sa prefixom ili poddomenom koji oznacava jezik). Znaci da moram da imam jos jednu kolonu koja sadrzi generisanu sekvencu za svaki content item i koja grupise sve jezike.
__________________
The knack of flying is learning how to throw yourself at the ground and miss. |
|
![]() |
![]() |
![]() |
Alati teme | |
Način prikaza | |
|
|
![]() |
||||
Tema | Početna poruka teme | Forum | Odgovori | Poslednja poruka |
TOP 20 MySQL Best Practices | dinke | SQL baze podataka - Sponzor: Baze-Podataka.net | 11 | 26. 11. 2009. 10:26 |
Multilanguage wordpress site | blackshtef | Web aplikacije, web servisi i software | 12 | 11. 11. 2009. 13:49 |
PHP Stilovi pisanja aplikacija (Best design practices) | ppavlovic | PHP | 26 | 10. 07. 2007. 15:43 |
Performance Tuning Best Practices for MySQL | Ilija Studen | SQL baze podataka - Sponzor: Baze-Podataka.net | 1 | 13. 08. 2006. 16:20 |