newnew Posted March 4, 2009 Report Share Posted March 4, 2009 Man nepeiciešams vairākvalodu saits, valodas atslēgvārdus admins var rediģēt admin panelī. Iepriekš nekad to netaisīju. Palasīju šeit forumā un googlē un man sanāk šitāds algoritms: Ir linki LV, RU, ENG. Uzspiežot uz šo valodu izpildās funkcija set_lang. Šī funkcija uzstāda sesiju, uzstāda sesijas mainīgo (valodu) un izveido masīvu lang, kurā salādē no datubāzes tabulas languages visus atslēgvārdus, kas atbilst valodai. Pēc tam šai funkcijai notiek redirekts - uz index.php vai arī var uz tekošo lapu. Tālāk visa saita ietvaros, kur ir kādi atslēgvārdi,$ tiek izmantots masīvs lang Un šitais neattiecas uz menu, menu būs citādāk - atsvišķa tabula datu bāzē, kurā katrai valodai būs sava rinda. Citās vietās lasīju, ka var veidot atsevišku failu en.php, lv.php utt., bet es izdomāju glabāt valodas datu bāzē nevis failā, jo tad ērtāk izveidot admin paneli. Man vismaz tālikās. Pirms to visu rakstīt, gribējās zināt - vai šitā ir korekti un kas vēl būtu jāņem vērā? Quote Link to comment Share on other sites More sharing options...
Klez Posted March 4, 2009 Report Share Posted March 4, 2009 itkā jau ir ok. vari uztaisiit vienu tabulu, kura ir aptuveni šāda: id | konstante | sadala | lv | ru | en | un tabulā liec iekšā datus sadaļu liec NULL, ja teksts ir vajadzīgs visās lapās (linki, menu .... utt) un tad katras sadaļas tekstiem norādi sadaļu ... nebūs visu laiku visi teksti jālasa masīvā ... un vēl ir variants ka pie katras tekstu labošanas vari izveidot failu, piem: ja labo, tad uzgenerē failus lv.php, ru.php .... un tad lapā tik includē attiecīgo failu Quote Link to comment Share on other sites More sharing options...
Kaitnieks Posted March 4, 2009 Report Share Posted March 4, 2009 Nekādu būtisku trūkumu nav, ja neskaita paša neērtības - tiklīdz pievienosi jaunu tulkojamo stringu, tā būs jāver vaļā tavs kontrolpanelis vai DB menedžeris un jāpievieno tas arī tur. Ar laiku tas var kļūt visai kaitinoši, tāpēc centies šajā ziņā atvieglot sev visu maksimāli. Quote Link to comment Share on other sites More sharing options...
newnew Posted March 4, 2009 Author Report Share Posted March 4, 2009 to Klez: vari lūdzu vēlreiz paskaidrot par to kolonnu "sadala" un kā tad es varēšu iztikt bez tā lielā masīva? Quote Link to comment Share on other sites More sharing options...
Klez Posted March 4, 2009 Report Share Posted March 4, 2009 (edited) kaitnieks, varbūt ka no vienas puses ir ērtāk to tulkojumu ievadīt web`ā ... +var jau uztaisīt fciju kas pārbauda. echo tulkojums(TXT_SAKUMS); function tulkojums($konstante){ if (!defined($konstante)) izveidojams_txt_db($konstante); //ja nav tāda definēta, tātad arī nav iekš db return $konstante; } function izveidojams_txt_db($konstante){ //pārbaudām vai nav tāds ieraksts iekš db //ja nav tad izveidojam ar defaulto tekstu $konstante . " LV | RU | EN" //uzgenereejam valodu failus } šajā gadījumā nevajag `sadala` fildu tabulā par to sadaļu biju domājis tā, ja `sadala` = NULL tad to selektojam visās lapās. bet to sadaļu vajag tad ja tu netaisies generēt valodu failus. ir jāskatās kas mazāk noēd atmiņu vai masīvs vai definētās konstantes. piemēram ja netais failus tad: piem sākums: select lv,konstante from tabula where sadala = 'null' and sadala = 'sakums' te var tos tekstus likt gan masīvā gan konstantēs while (....){ define($one[1], $one[0]); //vai $txt_masivs[$one[1]] = $one[0]; } par mums: select lv,konstante from tabula where sadala = 'null' and sadala = 'par_mums' while (....){ define($one[1], $one[0]); //vai $txt_masivs[$one[1]] = $one[0]; } bet ja ģenerē failus tad ir vienkāršāk: require('lv.php'); manuprāt vienkāršāk būtu ģenerēt failus. Edited March 4, 2009 by Klez Quote Link to comment Share on other sites More sharing options...
Kaitnieks Posted March 4, 2009 Report Share Posted March 4, 2009 (edited) un tad katras sadaļas tekstiem norādi sadaļu ... nebūs visu laiku visi teksti jālasa masīvā ... Man liekas, ka galvenā ideja risinājumam bija tāda, lai būtu jātaisa tikai viens DB pieprasījums (pie valodu pārslēgšanas/inicializācijas). Tu piedāvā taisīt pieprasījumu pŗslēdzot sadaļu, kas ir vai nu solis uz priekšu vai atpakaļu, atkarībā no tā, vai autors taisās šajā tabulā glabāt arī lapas saturu, vai tikai vispārīgos lapas stringus ("Sākums", "Lasīt vairāk", "Beidzēt"). Edited March 4, 2009 by Kaitnieks Quote Link to comment Share on other sites More sharing options...
Klez Posted March 4, 2009 Report Share Posted March 4, 2009 es piedāvāju katrā sadaļa ielasīt tikai attiecīgajai sadaļai vajadzīgos tekstus un tos kurus vajag visās sadaļās (linki, header,footer) nevis ielasīt visus tūlkojumus Quote Link to comment Share on other sites More sharing options...
newnew Posted March 4, 2009 Author Report Share Posted March 4, 2009 Es domāju glabāt tikai sadaļas, labļus u.tml. Tad šobrīd jādomā par kādu no šiem risinājumiem: 1) ģenerēt failus tikko kā ir izmaiņas datu bāzē (admins izmaiņas veica) 2) katrā sadaļā ielasīt vajadzīgo + vienreiz kkad ielasīt visām sadaļām vajadzīgo 3) ielasīt uzreiz visu kkur un tad izmanto Quote Link to comment Share on other sites More sharing options...
codez Posted March 4, 2009 Report Share Posted March 4, 2009 Es daru tā: Man HTML kods glabājas kā templeits. Kodā ir tagi <t>teksta_tags</t> Piemēram, ja ir index.tpl templeita fails, tad tiek izveidots index.tpl.en_us, index.tpl.en_gb, index.tpl.lv_lv, utt. Katrā tulkotajā tpl failā <t>teksta_tags</t> ir aizvietots ar tulkojumu no db. Kad PHP pieprasa index.tpl failu, tad es paskatos kāda ir lietotāja iestādītā valoda un par pielieku pie index.tpl klāt "." un valodu, iegūstu, piemēram, index.tpl.en_us, šo failu arī attiecīgi izmantoju. Kad db tiek mainīti kādi tulkojumi, vai tiek mainīts kāds templeits, tad ir jāpalaiž rīks, kurš pārtulko šo vai visus templeitus. Izstrādes stadijā šis rīks man automātiski palaižas pie katra pieprasījuma un pārbauda, ja ir faila mainīšanas datuma atšķirības starp .tpl un .tpl.en_us failu, tad iztulko. Plusi šādai sistēmai ir ātrdarbība: nav jāgriežas pie db un katrai valodai jau ir iztulkots templeits, kas nozīmē, ka vietās, kur ir tulkojumi jau ir teksts un nav jāgriežas pie masīviem vai citām datu struktūrām pēc teksta. Quote Link to comment Share on other sites More sharing options...
newnew Posted March 4, 2009 Author Report Share Posted March 4, 2009 Manuprāt, codez pieeja ir derīga lieliem projektiem. Tā kā man nav tik svarīga ātrdarbība (vismaz šobrīd šķiet, ka nebremzēs nekas), tad ar templatiem liekas pārāk sarežģīti šobrīd, bet nākotnē iespējams variants... Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.