Pogledajte određenu poruku
Staro 29. 10. 2009.   #14
Miroslav Ćurčić
mV
Certified
 
Avatar Miroslav Ćurčić
 
Datum učlanjenja: 22.08.2009
Lokacija: Novi Sad
Poruke: 67
Hvala: 0
16 "Hvala" u 13 poruka
Miroslav Ćurčić is on a distinguished road
Default

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`)
);
Svi neprevedeni tekstovi se dupliraju (pišu u bazu) i ne dobijaju fleg na `mltTranslated`.
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.
Miroslav Ćurčić je offline   Odgovorite uz citat