Jump to content
php.lv forumi

Recommended Posts

Posted

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š!

Posted

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.

Posted (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 by Psycke
Posted

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

Posted

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?

Posted (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 by Psycke
Posted

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));

Posted

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

Posted

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.

Posted

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.

Posted

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.

Posted

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.

×
×
  • Create New...