Jump to content
php.lv forumi

daudzvalodas


newnew

Recommended Posts

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ā?

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 by Klez
Link to comment
Share on other sites

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 by Kaitnieks
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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...

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...