Psycke Posted November 18, 2008 Report Share Posted November 18, 2008 Labdien! Šeku reku mans "language" fails, kurš satur kaut kādus tekstu mainīgos and stuff. <?php define(MAIN_LINK, 'Galvenā'); define(NEWS_LINK, 'Jaunumi'); define(VAC_LINK, 'Vakances'); define(CONTACT_LINK, 'Kontakti'); define(NEXT_PIC, 'Aplūkot nākamo attēlu'); define(PREV_PIC, 'Aplūkot iepriekšējo attēlu'); define(DISCLAIMER, 'SAISTĪBU ATRUNA'); ?> Viss ir baigi forši, katrai valodai savs fails utt., bet tagad strādāju pie projekta, kur cilvēks grib salikt bezgalīgi daudz valodas un ir bez iemaņām PHP vai HTML. Un viņam pateikt, ka lai pievienotu jaunu vaolodu 'uztaisi to un to, tad tur saraksti tulkojumus un tur ieraksti to un to' neizdosies, jo priekš iesācēja viņš tak nekā nesaprot. Mana problēma ir tā, ka izmeklējot cauri Google un HotScripts.com es neatradu nekādu klasi or something, kas varētu izdarīt man vēlamo, proti, katru "define" pārvērst par inputbox'u, un saglabājot formu, viņš saglabātu failu. Tātad, vai kāds no jums varētu vismaz mājienu pasviest, kas, ko un kā? Paldies jau iepriekš! Link to comment Share on other sites More sharing options...
andrisp Posted November 18, 2008 Report Share Posted November 18, 2008 Pirmkārt jau man neliekas pārāk laba doma tulkojumus glabāt konstantēs. Drīzāk tad jau parastā masīvā. Piem.: $_T['main_link'] = 'Galvenā'; $_T['news_link'] = 'Jaunumi'; // utt Bet par jaunu valodu pievienošanu: 1. Izveidotu atsevišķu masīvu, kur glabāt visu tulkojumu stringu nosaukumus (tikai nosaukumus). 2. Veidojot jaunu valodu, ņemt šo masīvu un katram itemam uzģenerēt savu inputu. 3. Pie saglabāšanas uzģenerēt php failu ar tulkojumiem. Labojot esošu valodas failu. 1. un 2. solis tas pats, tikai papildus katram itemam vēl pārbaudam vai jau neeksistē vērtība no valodas faila. To arī ieliek inputa vērtībā. 3. Pārraksta esoši php failu ar jaunu ģenerētu. Link to comment Share on other sites More sharing options...
Psycke Posted November 18, 2008 Author Report Share Posted November 18, 2008 (edited) Nu jā, tik es saprastu, man vajag hintu par to ģenerēšanu. Kā to sadabūt gatavu? Un pieņemsim, ka strādājam ar parastu masīvu. Ā... Pēc neilgas apdomāšanās, viss ir bumbās :) Izdomāju kā saģenerēt, viss ir kārtībā :) Edited November 18, 2008 by Psycke Link to comment Share on other sites More sharing options...
Вячеслав Posted November 18, 2008 Report Share Posted November 18, 2008 Man izdarits ta: template.tpl: <table>{$text}</table> language.php: <?php $lng['home']['text'] = 'texts'; ?> adminka: <?php $content = file_get_contents('template.tpl'); preg_match_all('/\{\$(.*)\}/Usi', $content, $strings, PREG_SET_ORDER); for ($i = 0; $i < count($strings); $i++) { $content = str_replace('{$' . $strings[$i][1] . '}', "<input name='" . $strings[$i][1] . "' value='" . $lng[$_GET['pageID']][$strings[$i][1]] . "'>", $content); } echo $content; ?> Viegli u natri Link to comment Share on other sites More sharing options...
marcis Posted November 19, 2008 Report Share Posted November 19, 2008 lang_lv.php <? $lxv=array( "one"=>"viens", "two"=>"divi", ); ?> admins <? foreach($lxv as $key=>$value){ echo '{'.$key.'}: <input type="text" name="lang['.$key.']" value="'.$value.'" />'; } ?> Вячеслав, nebūs vēl vieglāk un ātrāk? Link to comment Share on other sites More sharing options...
Вячеслав Posted November 19, 2008 Report Share Posted November 19, 2008 Topika autoram var but man ne Link to comment Share on other sites More sharing options...
Psycke Posted November 19, 2008 Author Report Share Posted November 19, 2008 (edited) Hmm, viss ir jauki, un ir identiski manai idejai. Jo izlaboju iepriekšējo postu un pateicu, ka viss izdevās. Tagad ir otra problēma... Par cik es strādāju tikai ar SQL tipa datubāzēm, tad man nav ne mazākās sajēgas kā saglabāt input'a vērtību attiecīgajai masīva atslēgai failā atpakaļ. Kāds varbūt varētu izpalīdzēt? Edited November 19, 2008 by Psycke Link to comment Share on other sites More sharing options...
marcis Posted November 20, 2008 Report Share Posted November 20, 2008 Palasi par fwrite() funkciju, piemēri arī tur ir. Link to comment Share on other sites More sharing options...
Kaklz Posted November 20, 2008 Report Share Posted November 20, 2008 neviens tev neliedz arī tulkojumus glabāt datubāzē un eksportēt uz statiskiem failiem reizi pa reizei: $qry = 'select * from lang_data where lang="lv"'; $res = mysql_query($qry); while ($row =mysql_fetch_assoc($res)){ $langdata[$row['key']] = $row['value']; } file_put_contents('/path/to/lang/lv/filename.php', '<?php $langdata=' . var_export($langdata, 1)); Link to comment Share on other sites More sharing options...
Kavacky Posted November 20, 2008 Report Share Posted November 20, 2008 Neaizmirsti tikai pēc var_export pielikt vēl .'?>'. Link to comment Share on other sites More sharing options...
codez Posted November 20, 2008 Report Share Posted November 20, 2008 Es zimantoju šādu principu. Ir templets main.tpl , kurā ir frāžu tagi, piemēram, <t>email</t>, <t>username</t>, utt. Tad ir iztulkotie templeiti main.tpl.en, main.tpl.lv, utt. Pirms ielādēt en templeitu salīdzinu, vai main.tpl un main.tpl.en modification_time ir vienādi. Ja atšķiras, tad no db iztulkoju main.tpl <t></t> tagos esošās frāzes uz tās valodas tekstu. Ja neatšķiras, tad lādēju uzreiz iztulkoto. Tāpat ir skripts, kurš iziet cauri visiem templeitiem un iztulko tos citās valodās, gadījumā, ja tiek izmainīts tulkojumu db saturs, bet tpl faili netiek mainīti. plusi: - Nav katreiz jātulko templetis - Visi tulkojumi ērti glabājas db Link to comment Share on other sites More sharing options...
Kaklz Posted November 20, 2008 Report Share Posted November 20, 2008 Kavacky, '?>' starp citu php failu beigās nav obligāts un atsevišķos PHP kodēšanas standartos (piem Zend Framework) to pat iesaka nelietot failos, kuros nav nekā cita izņemot PHP kodu. Link to comment Share on other sites More sharing options...
codez Posted November 20, 2008 Report Share Posted November 20, 2008 Kaklz-am taisnība. Labāk php only failos, kuri parasti parādās dažādos MVC un kā inklūdējamas klases, labāk ?> nelikt, jo var netišām ielikties viena atstarpe un tad dabūsi pa visiem failiem meklēt, kāpēc rāda Headers already sent. Link to comment Share on other sites More sharing options...
andrisp Posted November 20, 2008 Report Share Posted November 20, 2008 Parasti jau pārseris pasaka priekšā, kur tad īsti Headers already sent. Papildus vēl tam pārseris ignorē vienu ņulainu uzreiz pēc noslēgošā taga (tb nenosūta pārlūkam). Tā kā man liekas diezgan nejēdzīgs ieteikums. Link to comment Share on other sites More sharing options...
codez Posted November 20, 2008 Report Share Posted November 20, 2008 andri, viņš parādīs tajā vietā, kur ir Header(), bet kļūda jālabo tajā vietā, kur ir spaces, kas var atrasties pavisam citā vietā un sarežķītākā MVC, nāksies daudzus failus pārskatīt. Link to comment Share on other sites More sharing options...
Recommended Posts