|
Ülesanne selline, et tarvis andmebaasis muuta teatud väljad tõlgitavaks. Nt toote nimi ja kirjeldus, kliendi nimi, mõõtühik jne. Pähe tulevad järgmised variandid:
Mida soovitate? |
|
Ma arvan, et variant 3 on kõige mõistlikum. Kasutada baastabelites tõlgete ID'sid ja pärida tõlkeid läbi funktsiooni (mitte join'i). See peaks olema suht kiire, kuna indeks (tolke_id, keel) on kompaktne ja efektiivne. Täiendava kiiruse jaoks on võimalik funktsiooni poolt tagastatud tulemused mälutabelis salvestada (cache'ida) kui programmeerimiskeskkond seda võimaldab. Või kui kliendi pool on võimalik kasutada mõnda lokaalset andmestruktuuri, siis on näiteks sisse logimisel võimalik luua lokaalne tabel ainult selle keele tõlgetega, mida kasutaja kasutab ja pärida tõlked sealt. Funktsiooni kasutamine tagab selle, et selliseid täiendavaid mälustruktuure saab muuta/lisada/kasutada ka hiljem kui süsteem kasvab ja vajadused muutuvad. Variant 2 on tegelikult peaaegu sama hea, lihtsalt kasutatav ID väli on tekstiväli, mis kasvatab indeksi oluliselt suuremaks (situatsioonis kus on vaja tõlkida terve fraas). Variant 1 - tuleks hoiduda igal juhul. See on väga piirav lahendus ja kui süsteem kasvab, siis võib uue keele lisamine olla väga keerukas (suure arvu päringute tõttu, mis pärivad tõlget konkreetsest veerust). (Ja veel, kui hakata süsteemi arendama nullist ja tegemist on tüüpilise browseri põhise lahendusega, siis on kasulik kaaluda mõne olemasoleva framework'i kasutamist, kus tõlkimise mootor on juba realiseeritud) |
|
Ma ütleks, et kõigil neil variantidel on omad head ja vead. Õige lahendus oleks täiendada andmebaasimootorit ennast nii, et välju saaks tõlkida. Kuid miskipärast on mul tunne, et seda sa tegema ei hakka :) Variant 1 pole sugugi nii paha kui see vaid õigesti implementeerida. Mõistagi on vale kirjutada sellist koodi:
Sellisel juhul on muidugi uue keele lisamine ääretult piinarikas. Parem on täiendada andmebaasiklassi nii, et parajasti aktiivse keele nimetus lisatakse automaatselt spetsiaalselt märgistatud väljade lõppu. Näiteks:
Suurim eelis selle variandi puhul on muidugi kiirus. Ei mingeid keerukaid JOIN'e ega muud säärast. Väga lihtne on ehitada iga keele tulbale eraldi indeksid peale, et sorteerimine toimuks just vastava keele reeglite alusel. Kui sul aga on kõik keeled ühes suures tõlgete tabelis, siis selle indekseerimine ei saa just kõikse lihtsam olema. (Näiteks MySQL lubab ühele tulbale määrata vaid ühe kollatsiooni.) Olen ise taolist süsteemi kasutanud ja polnud tal häda kedagi. Kui oli tarvis uut keelt lisada, siis selle tegi ära väike skriptikene. Ainuke asi, et kui tegid andmebaasis käsurealt Samas on mul olnud kokkupuuteid andmebaasidega, kus tõlked on seotud ID-dega ning lihtsalt tabelile peale vaadates ei saa mitte mõhkugi aru mis asja see tabel sisaldab, sest tekstide asemel on igal pool mingid numbrid. Muidugi VIEW'de kasutamine oleks seda probleemi leevendanud, kui keegi oleks kunagi viitsinud neid VIEW'sid sinna teha. Lisaks ei tasu ära unustada, et VIEW'desse UPDATE'mine ja INSERT'imine võib osutuda problemaatiliseks. 1
Minu kontekst on see, et uusi keeli peab saama kasutaja käigu pealt lisada. Näiteks tekib ühel päeval klient Venetsuelas ja on tarvis pakkumised hispaania keeles vormistada.
(Oct 26 '09 at 13:55)
Tambet Matiisen ♦♦
Kui kasutaja peab saama keeli lisada, siis variant 1 muutub märksa kehvemaks jah.
(Oct 26 '09 at 19:03)
Rene Saarsoo ♦♦
|
|
Lisan veel ühe variandi:
|
|
Mina ei paneks tõlkeid üleüldse baasi, vaid kasutaks näiteks gettexti. Gettexti peale/juurde on ehitatud terve hulk tööriistu, millega tõlkijatel mugav majandada on ja mille uuesti ehitamine baasi peale tundub jalgratta leiutamisena. Pealegi, kui juba tõlkima hakata, siis on sul ilmselt ka selliseid tekste vaja tõlkida, mida baasis ei ole - kasutajaliidese elemendid näiteks. Ja milleks siis hoida üleval kahte paralleelset süsteemi? Toote nimede/kirjelduste jms gettexti lähteformaati saamiseks tuleb muidugi natuke vaeva näha, aga minu meelest tulemus on seda väärt. Minu kontekst on see, et kasutaja tahab ise toodete nimetusi jms tõlkida. St ma peaks sisuliselt .po faile jooksult genereerima ning realiseerima nende editori oma kasutajaliideses. Natuke keeruliseks läheb. Aga muidu olen gettexti kasutanud ja kasutajaliidese tekstide tõlkimiseks sobib ta väga hästi.
(Oct 28 '09 at 10:57)
Tambet Matiisen ♦♦
|

