Pereiti prie turinio

Daugiakalbis puslapis


Rekomenduojami pranešimai

http://lt.php.net/parse_ini_file

 

LT.ini

[zinutes]

ok = "Registracija sėkminga";

not_ok = "Registracija nesėkminga";

 

EN.ini

[zinutes]

ok = "Registration successful";

not_ok = "Registration went wrong";

 

o tada galima..

 

$lang = parse_ini_file("lt.ini");

ir echo $lang["ok"];

 

arba berods galima taip

 

$lang = parse_ini_file("lt.ini", true) <- prideda skyrius ir gaunasi

 

echo $lang["zinutes"]["ok"];

 

 

Jeigu nesusimaišiau kabutėse, tai viskas pl. Manau, kad patogiau taip kalbą apsirašyt, negu iškart masyvais..

Nuoroda į pranešimą
Dalintis kituose puslapiuose

$lang = array(
'1_1'=>'asd',
'1_2'=>'dsa',
'2_1'=>'qwe',
'2_2'=>'ewq',
);

$kalba = 1;
echo $lang[$kalba.'_1'];

 

laaaaabai neprotinga...

o ka tu darysi kai tau reikes ismesti kokia kalba? ka darysi kai reikes pridet dar 5 kalbas? Tu gal galvoji kad PHP yra kalba be ribu? kad ji atminties nenaudoja?

 

Aurimo vienintelio kolkas pasiulytas variantas normaliausias (tik tiek kad INI failuose nereikia kabuciu ir kabliataskiu). Vienu metu atmintyje sedi tik ta kalba, kuria tu naudoji.

MySQL naudot neverta, nes tai daugiau maziau statiniai duomenys kurie bus tik skaitomi, todel ju dejimas i DB naudos neduoda.

 

Svarbiausia yra efektyvumas, o ne paprastumas sukodinti. :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

bent jau as savo zaidime darau taip:

 

lt.php

 

$lang['thanks']="Aciu";

$lang['go']="eiti";

 

en.php

 

$lang['thanks']="Thanks";

$lang['go']="go";

 

o po to skripte paprasciausia nuskaitai kokia kalba useris pasirinkes (galima is sesijos, galima is DB ar cookie, cia kaip jau patogiau)

sakykim nuksaitem i $language kintamaji

ir darai simple:

 

require($language);

 

echo $lang['thanks'];

 

 

naudojant sita varianta nereikia visu kalbu ikeldinet, todel nenaudojama atmintis ir nereikia kazkokiu parsinimo funkciju, todel veikia greit.

 

tikiuosi padejau kazkiek :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

bent jau as savo zaidime darau taip:

 

lt.php

 

$lang['thanks']="Aciu";

$lang['go']="eiti";

 

en.php

 

$lang['thanks']="Thanks";

$lang['go']="go";

 

o po to skripte paprasciausia nuskaitai kokia kalba useris pasirinkes (galima is sesijos, galima is DB ar cookie, cia kaip jau patogiau)

sakykim nuksaitem i $language kintamaji

ir darai simple:

 

require($language);

 

echo $lang['thanks'];

naudojant sita varianta nereikia visu kalbu ikeldinet, todel nenaudojama atmintis ir nereikia kazkokiu parsinimo funkciju, todel veikia greit.

 

tikiuosi padejau kazkiek :)

 

:) abejoju ar padejai.

 

kodel jums atrodo, kad kode apsirasinet dideles apimties duomenis yra gerai? PHP (ir kitos webui skirtos serverines programavimo kalbos) yra kaip tik tos kalbos, kuriose efektyvumas (ir ne tik pacio skripto) yra kritinis dalykas.

dabar paimkim 500kb dydzio language skripta. Ka turime?

1. Ogi ciut ne kelis kartus didesni interpretavimo laika, nes vienas skriptas didesnis uz visa likusia sistema. Interpretatorius ne dievas, jis irgi naudoja atminti. Jam reikia saugoti skripto vykdymo medi su visom cia nurodytom tekstinem konstantom. koks skirtumas kad pagrinde cia tik priskyrimo sakiniai. Ta jis darys sulig kiekvienu "require ($language)".

2. Vykdymo metu tas pats atminties kiekis yra sunaudojamas dictionary kurimui. Tad turim dviguba atminties sunaudojima kaip minimum.

 

Pliusai? nereikia skaityt ir parsint failo... ka laimetume ta darydami?

 

1. grubiai 7 eilutes kodo:

 

  open file
  while not eof
	readline(line)
	(key, val) = split(line, '=')
	lang[key] = val;
  end while
  close file

 

Interpretatoriui tai vienas juokas. Viena konstanta ir maza kruvele operaciju.

2. atmintis praktiskai isnaudota tik dictionariui. Pleciantis programai ir atsiradus keletui skirtingu sriciu, skaityt is failo galima tik tam tikros skilties tekstus, taip dar labiau sumazinant atminties naudojima.

 

 

Gal kam pasirodys 500kb*2=1Mb atminties kaip mazai.. tuomet siulau isivaizduot kas atsitiks su sistema kai tuo pat metu apsilankys 1000, 10000 ir daugiau vartotoju :D

 

Jo, aš ir matau, kad visi nekreipia dėmesio į bereikaliongą atminties naudojimą.

kintamiesiems tai niekas atskirai nepriskirines, man reik kad is .ini failo padarytu kintamuosius. yra koks greitesnis budas nei sukant cikla? :D

 

nekreipia demesio todel, kad nesuvokia.. su laiku ismoks. tikiuosi kad bent i mano postus protingai pasiziures.

 

o del budo - tai skirtumas bus nebent tik tas, kad ne tu ta cikla suksi, o kas nors kitas (bibliotekos funkcijos). Tad siulau tiesiog paciam ta pasidaryt ir bus ramu. Zinosi kaip kas veikia ir reikalui esant galesi keisti be problemu. Be to, protingos ir vietoje optimizacijos visada atsiperka, tik nepamirsk komentuot - tam atvejui jei paskui butu sunku suprast ka padarei :D

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tiesa sakant, tai as niekada nekomentuoju skripto :) mano manymu tai bereikalingi baitai, aisku skripto kulturai tai negaila baitu. Vakar netiketai dasilo klasiu paskirtis. bet cia turbut neitu i klase sukist?

Tik neisivaizduoju kaip paprasciau butu nuskaityt tik ta ini failo dali kur pvz [meniu]

Nuoroda į pranešimą
Dalintis kituose puslapiuose

:) abejoju ar padejai.

 

kodel jums atrodo, kad kode apsirasinet dideles apimties duomenis yra gerai? PHP (ir kitos webui skirtos serverines programavimo kalbos) yra kaip tik tos kalbos, kuriose efektyvumas (ir ne tik pacio skripto) yra kritinis dalykas.

dabar paimkim 500kb dydzio language skripta. Ka turime?

1. Ogi ciut ne kelis kartus didesni interpretavimo laika, nes vienas skriptas didesnis uz visa likusia sistema. Interpretatorius ne dievas, jis irgi naudoja atminti. Jam reikia saugoti skripto vykdymo medi su visom cia nurodytom tekstinem konstantom. koks skirtumas kad pagrinde cia tik priskyrimo sakiniai. Ta jis darys sulig kiekvienu "require ($language)".

2. Vykdymo metu tas pats atminties kiekis yra sunaudojamas dictionary kurimui. Tad turim dviguba atminties sunaudojima kaip minimum.

 

Pliusai? nereikia skaityt ir parsint failo... ka laimetume ta darydami?

 

1. grubiai 7 eilutes kodo:

 

  open file
  while not eof
	readline(line)
	(key, val) = split(line, '=')
	lang[key] = val;
  end while
  close file

 

Interpretatoriui tai vienas juokas. Viena konstanta ir maza kruvele operaciju.

2. atmintis praktiskai isnaudota tik dictionariui. Pleciantis programai ir atsiradus keletui skirtingu sriciu, skaityt is failo galima tik tam tikros skilties tekstus, taip dar labiau sumazinant atminties naudojima.

Gal kam pasirodys 500kb*2=1Mb atminties kaip mazai.. tuomet siulau isivaizduot kas atsitiks su sistema kai tuo pat metu apsilankys 1000, 10000 ir daugiau vartotoju :)

nekreipia demesio todel, kad nesuvokia.. su laiku ismoks. tikiuosi kad bent i mano postus protingai pasiziures.

 

o del budo - tai skirtumas bus nebent tik tas, kad ne tu ta cikla suksi, o kas nors kitas (bibliotekos funkcijos). Tad siulau tiesiog paciam ta pasidaryt ir bus ramu. Zinosi kaip kas veikia ir reikalui esant galesi keisti be problemu. Be to, protingos ir vietoje optimizacijos visada atsiperka, tik nepamirsk komentuot - tam atvejui jei paskui butu sunku suprast ka padarei :D

 

 

labai dekui uz pastebejimus ir paaiskinimus, kad cia nevaryti offtopic, parasiau PM :D

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tiesa sakant, tai as niekada nekomentuoju skripto :) mano manymu tai bereikalingi baitai, aisku skripto kulturai tai negaila baitu. Vakar netiketai dasilo klasiu paskirtis. bet cia turbut neitu i klase sukist?

Tik neisivaizduoju kaip paprasciau butu nuskaityt tik ta ini failo dali kur pvz [meniu]

 

Na nereikalingi baitai nebent tik diske :) interpretatorius komentarus graziai praleidzia, tad jam tai itakos neturi.

 

Klase apibrezia objekta, kurio sudedamosios dalys yra duomenys ir operacijos su tais duomenimis. Tad jeigu objektas savyje talpintu dictionary, ir pateiktu operacijas ji uzpildyti ir nuskaityti - tuomet tai butu galima aprasyti klase. Taciau interpretuojamose kalbose klases prideda zymu overheada... efektyvumo kritimas yra paslepiamas po supaprastejusiu programavimo darbu. Rinktis lieka gamintojui..

 

O su skaitymu - skaitai aklai faila tol kol randi skyriu [meniu]. Tada tol kol nerandi kito skyriaus, nuskaitytus duomenis dedi i dictionary. Jei kam kyla gudresniu ideju, prasom :D

Nuoroda į pranešimą
Dalintis kituose puslapiuose

hm.. Labai vilioja mane parse_ini_file savo paprastumu, bet gaila kad papildomos atminties uzimciau, nes nuskaitytu visa faila.

 

O su skaitymu - skaitai aklai faila tol kol randi skyriu [meniu]. Tada tol kol nerandi kito skyriaus, nuskaitytus duomenis dedi i dictionary. Jei kam kyla gudresniu ideju, prasom

sitas dalykas tai gal net daugiau sugaisties dadetu.

 

kaip profesionalai mano?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Radau pagaliau tą funkciją, kuri implementina Native Language Support ir yra naudojama Wordpresse. Blogis tame, kad reik kalbos failus sukompiliuot ten kažkaip prieš naudojant, taigi čia variantas ne iš paprastųjų..

 

Daugiau info:

http://lt.php.net/gettext

 

Deja, niekad nebandžiau su šia funkcija dirbti, tai pavyzdžio nepateiksiu, kiek suprantu tai tokia "outputinimo" funkcija, kurie pagal nustatytą lokalę išverčia tekstą. Tarkime parašai echo gettext("labas rytas"); ir jei lokalė nustatyta į anglišką, tai grąžinamas tekstas bus "good morning", jeigu taip yra išversta kalbiniuose failuose.

 

Ar kažkas tokio. :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kodel jus taip pries MySQL ? 100% cia naudociau MySQL, jeigu ijungtas koks query-cache, tai tiesiog karta uzqueriny ta kalbos lentele, o paskui visiems scriptams pateiktu duomenis is ramo. O kad su MySQL daug vargo, kaip kazkas minejo tai man nesuprantama.

 

Kadangi viename skripto praleidime tau tu duomenu reikia tik viena vieninteli karta - pacioj pradzioj - tai nera labai skirtumo programavimo atzvilgiu ar ten MySQL ar failas. Is failo skaityti netgi greiciau yra, jeigu skaitomi duomenys paeiliui. Jeigu reikia duomenis grupuoti pagal skyrius, tuomet taip - MySQL yra patogiau... bet ar apsimoka del to daryti uzklausa efektyvumo atzvilgiu - velgi klausimas. MySQL labai apkrauna serveri, tad i tai irgi reikia atsizvelgti. Aplamai, duomenu baze naudot saugoti duomenims, kurie yra statiniai ir visada paimami kartu, nera tikslo. Jei lentele neturi indeksu, tai ji tas pats failas, tik dar priedo sudetingesnes strukturos ir kad ja nuskaityt reikia kruvos papildomu funkciju.

 

Ir pabandyk tu duoti MySQL lentele zmogui kad sis padarytu vertima i nauja kalba... na zinoma... export... po to import... dar skripto rasymas visam tam padaryt normaliu formatu.. kitaip tariant - neteko susidurti su multilanguage supportu implementuotu ant DB. Jei turi pvz, visada mielai praplesiu savo akirati.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

hm.. Labai vilioja mane parse_ini_file savo paprastumu, bet gaila kad papildomos atminties uzimciau, nes nuskaitytu visa faila.

sitas dalykas tai gal net daugiau sugaisties dadetu.

 

kaip profesionalai mano?

 

na jo.. as neprofesionalas gi :) bet savo nuomone pasakysiu - niekada efektyvus kodas nedera su paprastu kodu. Tu nori iskviesti viena funkcija, ir nori kad ji uz tave viska padarytu. Bet vat beda, tokios funkcijos nera. Bet ar supranti, kad jei ji tokia ir butu, tai ji viduje darytu ta pati, ka as tau siulau pasidaryti paciam. Niekada nebijot parasyti keliom eilutem daugiau. Pirstai nuo to nenukris gi. Bandymas ismastyti "nauja dvirati" lavina mastyma, o aklas funkciju ieskojimas atlikti ta ar ana paprasta veiksma tik bukina :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

hm.. o kaip gautus su xml? kuris budas praktiskiausias? kodinu pats, tai sunkumas nesvarbu. :)

phpbb kaip padaryta?

 

XML... tai ispustas burbulas, daugumos naudojamas tik tam, kad eiti pagal mada. XML tai beveik tas pats kaip DB, tik kad tekstiniu rezimu. Ir siaip jo paskirtis saugoti ne duomenims kurie niekad nesikeicia ir niekur "nevaiksto".

 

Siaip vakar uzmeciau aki i Joomla sprendima, tai jie naudoja konstantas. Pvz.:

 

DEFINE('OK_Tekstas', 'Gerai');

 

tai irgi neblogas variantas, kadangi atmintis masyviai naudojama tik interpretavimo metu, o vykdymo metu ne, nes vietos kur randama OK_Tekstas ir kitos konstantos yra tiesiog pakeiciamos atitinkamomis tekstinemis reiksmemis.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

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

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...