ugrás a tartalomhoz

Függvény hívás helyének megállapítása

fchris82 · 2007. Dec. 10. (H), 22.32
Nos, a következő problémám akadt. Van egy t() fv-em, ami "fordít". Van hozzá egy gyűjtő, ami azt csinálja, hogy ha olyan szöveget talál (kap paraméterként), aminek nincs fordítása és még forrásként sem szerepel az adatbázisban, akkor azt beleteszi. Csakhogy én most szeretném ezt kibővíteni azzal, hogy elmentem, honnan került meghívásra. Van vkinek bármilyen ötlete erre?

Mondok egy példát, hátha így nem érthető egészen:
Van egy func.t.php fájl, ebben van definiálva a t() fv.
Van még egy index.php. Ez hívja meg a cikk.php-t, az URL-t "értelmezve".
A cikk.php 20. sora pedig ez: t('Ez a cikk címe').

Ez még nem szerepel az adatbázisban. Ekkor a program elmenti a fordítandók közé. Szeretném, ha azt is mellé mentené, hogy ezt a szöveget a cikk.php 20. sorában találta. De a __FILE__ a func.t.php-t adja vissza, a $_SERVER['PHP_SELF'] pedig az index.php-t :-/

Persze csinálhatnám, hogy minden t hívásnál paraméterként átadom a helyet is, de az eléggé munkaigényes, közel 1000 fájlról beszélek.
 
1

debug_backtrace

janoszen · 2007. Dec. 10. (H), 22.35
debug_backtrace függvény a barátod és egy jó fejlesztési módszertan.
3

Köszi!

fchris82 · 2007. Dec. 10. (H), 23.56
Ez pont jó lesz, köszönöm szépen! :)
6

Fejlesztés

janoszen · 2007. Dec. 11. (K), 08.16
Nem tudom, mit csinálsz, gondolom valami utólagos gyógyítás, de javaslom erőteljesen hogy gondold át, milyen módszerrel fejlesztesz hogy az ilyen szívásokat elkerüld.
8

:?

fchris82 · 2007. Dec. 14. (P), 17.45
Részben utólagos gyógyítás :-/ Van egy többnyelvű honlap. Eddig 5 nyelvre kellett lefordítani, folyamatosan változik a tartalom, minden nyelvre más-más ember fordítja, és jelenleg egészen pontosan 285 "oldalról" - web oldalról beszélek - van szó + hibaüzenetek és a többi.

3 helyen kerülhet hívásra a "fordítás" fv:
- php kódban
- Smarty sablonban
- FormML sablonban (saját fejlesztés)

Úgy csináltam, hogy van egy Translation osztály, és annak egy translate() metódusa. Ezt hívogatom más-más módszerekkel a különböző "környezetekben":
- php kódban: t('vmi') fv.
- Smarty sablonban: {t}vmi{/t}
- FormML: <t>vmi</t>

Nagyon leegyszerűsítve.

Automatikusan gyűjtöm az új "forrásokat", amik még nincsenek az adatbázisban. Amikor az illető emberke belép, az adminisztrációs oldalon ki tudja listázni, hogy mely forrásokhoz nincs még a saját nyelvén fordítás. Előfordulhat viszont, hogy egy már nem akuális forrás értelemszerűen benne marad az adatbázisban. A folyamatos "üzemnél" ez nem probléma, mert volt időszak, amikor annak volt létjogosultsága. De most jött a német, ami eddig nem volt, tehát egyszerre kell nagyon sokat lefordítania és nekiállt hisztizni, hogy minek kell olyat lefordítania, ami már úgyse kell. Ezért gondoltam, hogy elmentem azt is, melyik fájlban, melyik sorban található az adott forrás és vhogy, vmikor ellenőrzőm, megvan-e még, és ha nincs, akkor törlöm. De jobban belegondolva, annyira bonyolult lett és munkaigényes, hogy inkább mégse. Fordítsa le azt is, ami már nem aktuális, így is jóval kevesebb, mint 1%-ról lehet szó.

Egyébként jelenleg 2554 "szöveg blokk" van az adatbázisban, mint fordítandó.

Van jobb ötlet?

Chris :)
2

__FUNCTION__ ?

zila · 2007. Dec. 10. (H), 23.13
és még esetleg a __LINE__?
4

hívó

Hodicska Gergely · 2007. Dec. 11. (K), 00.53
Ezek értéke minden esetben ugyanaz lesz, neki a hívó helye kell.


Üdv,
Felhő
5

Debug...

Ronyn · 2007. Dec. 11. (K), 04.41
A__LINE__ csak az aktuális sort adja vissza,ahova beszurod(a __FUNCTION__ ugyanez a szisztéma),viszont a debug_backtrace altal viszadott tomb(assz'em) 3. eleme tartalmazni fogja a hivo fájl nevét,azt hogy hanyadik sorban lett meghivva,és a hivo fuggvénynek(ha fuggvény) átadott paramétereket....
7

Jogos

zila · 2007. Dec. 11. (K), 10.46
Valóban picit benéztem a problémát...