Jump to content
php.lv forumi

Gettext un mājas lapas tulkojums.


Maris-S

Recommended Posts

  • Replies 53
  • Created
  • Last Reply

Top Posters In This Topic

Ja nav templeiti, tad PHP visdrīzāk, es darītu tā:

Būtu tulkošanas objekts, kurš tulko, piem.,

$t = new Translator($lang);
echo $t('login'); 

 

$t() ņemtu skatītos, ka atbilstošai $lang un 'login' kombinācijai ir tulkojums APC kešā, ja nav, ielādē no db un iemet kešā. $t objekts būtu pieejam vai nu konteksta objetkā, vai globāls singletons, atkarībā no kopējās aplikācijas arhitektūras.

Link to comment
Share on other sites

Kāpēc tulkošana ir problēma?

 

@codez - skaidrs, tātad tavs risinājums ir APC. It kā kaut kas tāds man uz servera ir uzlikts, jāskatās. Vienīgais, vai ir vērts, ja man visi tulkojumi patreiz sver tikai 12kb...

Edited by jurchiks
Link to comment
Share on other sites

Interesants temats, paldies par padalīšanos.

 

PHP laikā darīju tā, ka katru templeitu prekompilēju katrai valodai ar jau no db paņemtiem tulkojumiem. Respektīvi, ja ir index.tpl.php templeits, tad, to prekopilēju index.en.tpl.php, index.lv.tpl.php, utt. Ja izmainu templeitu, tulkotie templeiti tiek prekompilēti, ja izmainu tulkojumus db, tad jāpārkompilē visi templeiti. Parkompilēšana protams notika uz pirmo requestu uz šo templeitu.

Vai veici benchmarkus, kāds bija ieguvums?

Link to comment
Share on other sites

Vai veici benchmarkus, kāds bija ieguvums?

 

Benchmark-us neveicu, bet galvenā mana vēlme bija, lai tulkojumi glabātos db. Un tas nozīmē, ka tulkojumi ir jākešo, jo pieprasīt katru reizi tos no db būtu pārāk neefektīvi. Principā ir divi kaut cik derīgi varianti:

1)glabāt tulkojumu operatīvajā atmiņā, piemēram, APC. 

2)tulkot visu templeitu.

Tā kā 1. variants ietver visas tās pašas darbības, kuras 2. un vēl papildus, tad 2. izvēlējos kā efektīvāko.

Link to comment
Share on other sites

1. Kā tu atseko, kādi tulkojumi ir izmantoti kados templeitos?

2. Cik miljonus gadu aizņem viss tas error-proof pārbaudes kods, erm, vai viss ir up to date? 

3. Kāpēc tu pie katra requesta pieprasi atjaunošanas laiku tulkojumiem db? Kur un kā tu nodrošini šo atjaunošanas laiku un tā ieguvi?

4. Kas notiks, ja APC nebūs stat? 

 

Erm, mana implementācija: tulkojumi db, pie izmaiņām tiek ielādēti kešā - atkarībā no kastes: failu sistēma, memcache, memory tabula, apc user store. Templeits pie tulkojuma maiņām netiek aiztikts, jo, imho tas ir lieki. Ielādēti tiek tikai tie tulkojumi, kas ir konkrētajā aplikācijas skoupā vai tiek atsevišķi pieprasīti - eg. nav milzīgs masīvs ar 10k teksta biksītēm. Translācija notiek caur statisku metodi kura pieņem tulkojuma atslēgu, skoupu un kontekstu, saņem tulkojumu, ja eksistē, ja neeksistē paņem defaultu, pēc tam pārbauda, vai tekstā ir ievietoti kādi mainīgie, kuri būtu aizstājami, ja ir, tie tiek aizstāti un tulkotais teksts atgriezts. Tulkošanas metode tiek kompilēta no templeita tega templeita kešā. Closures un anonīmās funkcijas tulkojuma tekstā ir very welcome. Sintakse šādi 

 

{% translate "hello_user" "Hello, %user%, how is your day? You have %array.has.dot.notation% something." %}

 

Puslīdz tā. Ja neko nepiemirsu. 

Link to comment
Share on other sites

1. Kā tu atseko, kādi tulkojumi ir izmantoti kados templeitos?

Pie templeita kompilācijas, tiek veikti attiecīgo tulkojumu ieraksti db.

2. Cik miljonus gadu aizņem viss tas error-proof pārbaudes kods, erm, vai viss ir up to date?

Ir komanda, pārkompilēt visus templeitus.

3. Kāpēc tu pie katra requesta pieprasi atjaunošanas laiku tulkojumiem db? Kur un kā tu nodrošini šo atjaunošanas laiku un tā ieguvi?

Ir tulkojumu CMS, kurā var tulkot, pie tam ar lietotāju privilēģijām, gan tulkot konkrētu valodu. Kad tulkotājs iztulko, admins piespiež komandu - pārkompilēt templeitus.

Bet tieši šī pati problēma pastāv kešojot katru tulkojumu atsevišķi.

4. Kas notiks, ja APC nebūs stat?

A, kas notiks, ja admins izraus servera vadu?

Un būs tas pats, kas tavā variantā, kurā arī templeita fails ir jānolasa no diska.

Link to comment
Share on other sites

Ja jau piep*ies pie produkcijas, tad arī produkcijā tulkojumi nebūtu jāmaina :D

Mh, tulkojumu maiņa ar web ui pamatā paredzēta lai end jūzers varētu kaut ko pamainīt pēc savām velmēm neraustot supportu. Tik pat labi jau var arī vispār nekam tulkojumus neturēt. 

 

Arī lapām kas ir tikai latviski lieku tulkojumu moduli, lai pilsoņi paši var tekstus uz saviem pamainīt. 

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