07. 04. 2007. | #1 |
Miloš Vučić
Grand Master
|
Dva razlicita lang fajla - merge
Imam sledeci problem.
Imam dva language fajla za jednu skriptu (oko 2500 redova). Problem je u tome sto je srpska verzija fajla za stariju verziju skripte pa ima manje linija nego aktuelna verzija na engleskom. Da li postoji neki problem koji bi mi mogao pomoci u otkrivanju toga koje linije iz eng fajla nedostaju u sr verziji? Ukoliko ne postoji program (mad ami se mota po glavi da ljudi koji se bave lokalizovanjem softvera sigurno imaju neke cake za ovakve stvari) moze li mi neko pomoci da uradim sledece: fajl 1: srpska verzija fajla fajl 2: engleska verzija fajla falj 3: novokreidani prazni fajl odvotimo fajl 2 a zatim od cele linije uzmemo text koji je do prvog ' znaci od: var $_PHPSHOP_MENU = 'Menu'; pravi var $_PHPSHOP_MENU = ' - nazovimo promenjiva A celu liniju smestamo u promenjivu B koja ce nam trebati nakon uslova. Zatiom pretrazujemo fajl 1 za promenjivom A, ukoliko se nadje u fajlu 1, ne desava se nista, ukoliko se ne nadje u fajlu 1, iz fajla 2 se cela linija (promenjiva B) kopira u fajl 3. Na taj nacin bi u fajlu 3 dobio linije kojih nema u fajlu 1. No, moze li neko pomoci da resim ovo bilo imenom programa/alata, bilo pomoci oko izrade ovoga u phpu, ili bilo kom drugom programskom jeziku...?
__________________
Kotler je bio u pravu. Ko radi srcem nema konkurenciju. |
07. 04. 2007. | #2 |
Vladan Zirojević
Grand Master
|
Ne znam ni za jedan alat koji bi radio na fajlovima takve strukture, ali relativno lako mozes napisati program koji ce to parsirati i dati ti sta nedostaje.
Pogledaj i diskusiju na http://www.devprotalk.com/showthread.php?t=1168 |
07. 04. 2007. | #3 |
profesionalac
Professional
Datum učlanjenja: 15.06.2005
Lokacija: Chicago IL, USA
Poruke: 209
Hvala: 12
12 "Hvala" u 11 poruka
|
Ja sam to radio tako sto tekucu verziju (engleski fajl) ucitam u niz, ucitam srpski u niz, odradim array_diff() i zapisem engleske izraze koji fale na srpskom u srpski fajl.
Ali, ja sam imao nizove sa jezicima, a ti imas varijable. Mozes da ga ishakujes ako ti sve jezicke varijable pocinju sa $_PHPSHOP. Onda prvo protrcis kroz globalne varijable i potrpas ih u niz. Dakle, Kôd:
<?php // povuci engleski include('english.php'); $en = array(); $strings = array(); foreach ( $GLOBALS as $k => $v ) { if ( substr($k, 0, 8) == '_PHPSHOP' ) { $en[] = $k; unset($GLOBALS[$k]); // da se ne bi kasnije pojavila u sr $strings[$k] = $v; // stavljamo orig (en) u tmp array } } // povuci srpski include('srpski.php'); $sr = array(); foreach ( $GLOBALS as $k => $v ) { if ( substr($k, 0, 8) == '_PHPSHOP' ) { $sr[] = $k; unset($GLOBALS[$k]); // da se ne bi kasnije pojavila u trecem jeziku? } } // ovo fali u srpskom, a dobijamo array sa engleskim varijablama (da nista ne bude '') $diff = array_diff($en, $sr); // dodaj u srpski $fp = fopen('srpski.php', 'a'); foreach ( $diff as $var ) { $str = '$' . $var . " = '" . $strings[$var] . "';\n"; fwrite($fp, $str); } fclose($fp); ?> |
08. 04. 2007. | #4 | |
Miloš Vučić
Grand Master
|
Nesto je zaskripalo, zamalo da explodira, ali je medjutis samo ovo ostalo:
Citat:
__________________
Kotler je bio u pravu. Ko radi srcem nema konkurenciju. |
|
08. 04. 2007. | #5 |
profesionalac
Professional
Datum učlanjenja: 15.06.2005
Lokacija: Chicago IL, USA
Poruke: 209
Hvala: 12
12 "Hvala" u 11 poruka
|
Naravno da je zaskripalo kad ti u stvari imas propertije objekta, a ne globalne varijable.
Nista, onda samo moras na pocetku da inicijalizujes objekat, pa: $x = get_object_vars($obj); i onda koristi $x umesto $GLOBALS. ;-) |
08. 04. 2007. | #6 |
Miloš Vučić
Grand Master
|
Nisam se snasao
__________________
Kotler je bio u pravu. Ko radi srcem nema konkurenciju. |
09. 04. 2007. | #7 |
old school
Professional
Datum učlanjenja: 07.02.2006
Poruke: 340
Hvala: 32
44 "Hvala" u 20 poruka
|
ma pusti to...
Trebaju ti 3 programa: sort, sdiff i neki editor Ako teraš linux verovatno ih već imaš, a ako ne, pronađi portove za win(ima ih sigurno), ili instaliraj cygwin. TODO: 1. odaberi editor ako već nisi (vim, notepad, sta god) Kôd:
$ export EDITOR=vim Kôd:
$ sort xxx.xxx > eng.tmp $ sort yyy.yyy > srp.tmp Kôd:
$ sdiff eng.tmp srp.tmp -o zzz.zzz 4. obriši tmp fajlove Kôd:
$ rm eng.tmp srp.tmp Poslednja izmena od kaizen : 09. 04. 2007. u 01:07. |
09. 04. 2007. | #8 |
old school
Professional
Datum učlanjenja: 07.02.2006
Poruke: 340
Hvala: 32
44 "Hvala" u 20 poruka
|
hmm kad malo bolje pogledam, preskocio sam jedan bitan deo
trebace ti i sed korak 2 revisited 2. Kôd:
$ sort xxx.xxx | sed 's/=.*//' > eng.tmp $ sort yyy.yyy | sed 's/=.*//' > srp.tmp |
09. 04. 2007. | #9 |
хардвераш
Qualified
Datum učlanjenja: 04.01.2007
Lokacija: Маунтин Вју, САД
Poruke: 117
Hvala: 4
25 "Hvala" u 10 poruka
|
Најбоље решење за локализацију је употреба нгеттекста (GNU ngettext) и додатка за ПХП: http://savannah.nongnu.org/projects/php-gettext/
Усвајањем овог метода добија се гомила алата за прављење, анализу и одржавање превода, који подржавају све замисливе корисне манипулације. ф
__________________
Рад је створио човека. Рад ће га и уништити. |
|
|
Slične teme | ||||
Tema | Početna poruka teme | Forum | Odgovori | Poslednja poruka |
php f-ja za merge 2 niza | ivanhoe | PHP | 5 | 02. 11. 2009. 22:06 |
Parsiranje po lang atributu | Pedja | PHP | 7 | 18. 08. 2007. 01:52 |
Sinhronizacija (merge?) tabela | ivanhoe | SQL baze podataka - Sponzor: Baze-Podataka.net | 3 | 26. 02. 2007. 08:29 |
Ruby-Lang.org | crews_adder | Linkovi | 0 | 19. 09. 2006. 18:23 |