Jump to content
php.lv forumi

Valodas


Psycke

Recommended Posts

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

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

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

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

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

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

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

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

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

×
×
  • Create New...