‘sdf’ címkével ellátott bejegyzések

Októberi beszámoló

Zolnai Tamás, 2012. november 7. szerda

    Mivel ez az első beszámolóm az Alapítvány felé, így talán jobb lesz ha a hónapban elért konkrét eredmények ismertetése előtt egy pár szóban kifejtem, hogy miről is szól ez a projekt, melyen az utóbbi hónapokban dolgoztam, illetve dolgozom még most is.

  A LibreOffice lokalizációjában valamikor a múltban fontos szerepe volt az sdf fájloknak, de ez a fájlformátum az idők folyamán elavult, illetve maga az az óriásfájlos koncepció, mely egyetlen sdf fájlba gyűjtötte ki az összes fordításra kiemelt szöveget, nehezen kezelhetővé vált. Ezt váltották fel a po fájlok, melyeket egy jól meghatározott könyvtárszerkezeten belül szór szét a megfelelő lokalizációs program. Így egyrészről könnyebben kezelhető kisebb egységeket kapunk, másrészről egy ma is sok helyen használt fájlformátummal dolgozhatunk.
    A po fájlokra való áttérés során azonban nem iktatták ki magát az sdf fájlformátumot, belsőleg még mindig használja a rendszer, sőt a lokalizációt végző eszközök többsége ezt használja. Ezért is lesz lassabb a lokalizáció, hiszen a po fájlok használatához konvertálnunk kell azokat sdf-be illetve fordítva. A projekt célja pontosan az, hogy a lokalizáció közvetlenül használja a po fájlokat, és az sdf fájlok teljesen eltűnjenek. Ezzel a konverziók elhagyásával járó teljesítménynövekedés mellett megnyílik annak a lehetősége is, hogy a lokalizáció során jobban kihasználjuk a po koncepció nyújtotta lehetőségeket.
    Az első feladat a megfelelő po osztályok implementálása volt, melyek lehetővé teszik a po fájlok jól ellenőrzött és mindenekelőtt objektumorientált kezelését. A hónap elejére sikerült ezen osztályok segítségével átírni a lokalizáció alapvető eszközeit olyanra, hogy azok már po-t használjanak, és a tesztek folyamán látszottak is ennek áldásos hatásai. A leginkább szembetűnő változás a translations modul használatában állt be. Eddig ezt a modult build-elni kellett, ami valójában csak a po fájlok átkonvertálásából állt. Az áttéréssel ez megszűnt, és a po-k közvetlenül használhatókká váltak.

    Tehát a hónap elején alapjában véve a megoldás magja már készen állt és már csak az utolsó simítások maradtak hátra. Miután ez volt az az időpont, amikor átláthatóvá vált a po fájlok használatának összes aspektusa, ezért első dolgom a po osztályok végleges formára hozása volt. Alapvetően jól működtek ezen osztályok, de kevéssé voltak hibatűrők, és a fájlműveletek sem voltak elég jól elkülönítve. Továbbá több helyen az elnevezések sem illeszkedtek a LibreOffice coding standard-jához.
    Miután a po osztályok elnyerték végleges formájukat, áttértem azon problémákra, melyek a lokalizáció megújítása során bukkantak elő az egyes lokalizációt végző programokban. Ezek közvetlenül nem okoztak számottevő hibát a rendszerben. Egy részük felesleges számolásokat jelentet, másik részük felesleges sorokat az adott po fájlokban. Például az egyik fájlfeldolgozó program (ulfex) nem volt felkészítve arra, hogy a forrásfájlban lehet komment is, így az újonnan létrehozott és felkommentezett forráskódok esetén hibásan működött, még ha az outputja helyes is volt. Egy másik program (xrmex) pedig némi fogalomzavar miatt kétszer írt ki egy információt az outputjára, így az xml és xrm típusú fájlokhoz tartozó po-k redundáns információt tartalmaztak.
    Az előbb említett két program és még további 6 alkotja a lokalizáció magját. Ezen programok rengeteg közös tulajdonsággal rendelkeznek, és több közösen használt függvényük is van. Struktúrája és feladata alapvetően mindegyiknek ugyanaz, csak a feldolgozandó fájl formátuma különbözteti meg őket. Éppen ezért a paraméterezés is teljesen azonos. Ennek ellenére a paraméterek feldolgozása mindegyik forráskódjában külön-külön meg volt írva, valahol copy-paste módszerrel, valahol némi változtatásokkal. Ezen felül több olyan paraméter is szerepelt a programokban, melyek az idők folyamán kikoptak a használatból, így időszerűvé vált az inputkezelés átírása, illetve kiemelése egy közös függvénybe. Annál is inkább, mivel ezt a következőkben ki is szeretnénk használni.
    Az említett 8 bináris közül kettő nem C++ nyelven íródott, így az egységes kezelés érdekében és a C++-ban megírt po osztályok használatához ezeket is át kellett írnom. Az egyik a propex, ami perl nyelven íródott és a properties fájlok feldolgozásáért felelős. Átírásakor egy dologra kellett figyelni, hogy a helyesség megtartása mellett olyan programot írjak, mely felhasználja a közös használatra szánt függvényeket a későbbi fejleszthetőség érdekében. Éppen ezért az inputkezeléshez is az immáron egységes metódust használtam fel.
    A másik amit át kellett írni a súgóhoz tartozó tree fájlok feldolgozásáért felelős treex (azelőtt update_tree.pl). A tree fájlok tartalmazzák a súgófájlok kapcsolatát leíró fastruktúrákat. Ezek a fastruktúrák egyrészről tartalmaznak önálló, az eligazodást segítő címeket/alcímeket (belső csúcsok), másrészről az általa összefogott és hivatkozott súgófájlok címét (levelek). Ezért ez a program amellett, hogy a lokalizációt elvégzi az egyes belső csúcsokon, ellenőrzi a megfelelő súgófájlok létezését, és azok alapján frissíti az egyes levelek feliratát. A propex-szel ellentétben itt sokkal kevesebbet merítettem az eredeti forráskódból. Egyrészről az eredeti megoldás használt olyan fájlt is, ami valójában csak egy hack, és az új megoldással teljesen kiküszöbölhető, másrészről a tree fájlt reguláris kifejezésekkel dolgozta fel, míg C++-ban ennél jobb megoldás a libxml2 könyvtár használata.
    Tehát a kódolásnak a nagy része már megtörtént. A következő hónap feladata egyrészről a megfelelő makefile-ok átírása, másrészről a teljes körű tesztelés. Ezen felül a projekt futása során némileg változott a po fájlok szerkezete, a redundancia elkerülése, illetve az sdf fájl megszüntetése végett, így szükségessé vált a po fájlok új formájukra konvertálása is.