Március – Lokalizáció megtisztítása

Zolnai Tamás, 2013. április 5.

   Ez a hónap főleg háttérmunkálatokkal telt. Egyrészről az előzőleg bevezetett új adatbázis funkcióhoz (limit) kapcsolódóan jelent meg a rendszer által nyújtott osztályok néhány hiányossága, melyek kielégítő kiküszöböléséhez még olyan alapvető adatstruktúrához is hozzá kellett nyúlnom, mint a rendszerben használt string osztályok. Másrészről a lokalizáció átalakítása során sok helyen fennmaradtak olyan sajátosságok, melyek a már megszűnt SDF fájlformátumhoz kapcsolódnak és az új PO-s rendszerben teljesen feleslegesek.

   A limit megadására használható kombinált listával kapcsolatban két megemlítendő probléma jelent meg, mely problémák a LibreOffice-ban implementált funkciók alsóbb szintjeire vezettek el. Az első a kombinált listát megvalósító osztályhoz köthető (ComboBox). Ennek az osztálynak a tényleges megvalósítását nem kell ismerni a felhasználáshoz, csakis azt, hogy a hozzá tartozó interfész függvényei milyen inputra, milyen outputot adnak vissza. A CalcSize() függvénye karakterszám alapján kiszámolja a kombinált lista méretét. Az így kapott értékek mértékegységét (talán mm), illetve tényleges értékét szintén szükségtelen ismerni, hiszen ezt az értéket egyből tovább is lehet adni a megfelelő függvénynek, mely ez alapján megrajzolja a kombinált listát. Mindez a jól kialakított interfésznek, illetve az objektumorientált paradigmának köszönhető.

   A CalcSize() függvény azonban nem a jó szélesség értéket adta vissza, így a tényleges implementációt kellett felülvizsgálni. Szerencsére az implementációnak is több szintje van, így a mértékegység ismerete továbbra sem vált szükségessé. Ugyanis a függvény egyrészről kiszámolja az adott karakterszámnak megfelelő szélességet (egy karakter szélességét szintén egy függvény adja meg) és ezt korrigálja további értékekkel. Ilyen érték az aktuális stílusnak megfelelő szegély, illetve a legördülő lista lenyitásához használható nyíl mérete. Az előbbi korrekció volt az, ami hiányzott.

Eredmény:
http://cgit.freedesktop.org/libreoffice/core/commit/?id=3a31375528ad3d9fc49f5ab3982e96c9e46fa7af

   A másik probléma még mélyebb szintre vezetett. Nemcsak a felhasznált felhasználói felület elemeinek megfelelő osztályok implementációjába, hanem alapvető adatstruktúrák használatába is bele kellett mélyednem. A lekérdezésben elméletileg bármekkora limit érték megadható, mivel a visszatérési sorok száma is bármennyi lehet. Így a megadható érték korlátját csak az annak tárolására használt egészet megvalósító adattípus korlátjai jelentik (Int64). A probléma ott adódott, hogy a felhasznált osztály (NumericBox) az érték tárolásához használt egész típus maximumához közeli értékeket nem tudta lekezelni (Csak hogy milyen nagyságrendről van szó, ilyen szám például a 92 233 720 368 547 750).

    A probléma oka, hogy a NumericBox osztály belsőleg használ egy string → valós konverziót a túlcsordulás elkerülésére, mely string → egész konverzió esetén előfordulhat. A valós konverzió során azonban, túl nagy értékek esetén a konverzió kerekítéseket használ, és így az egész érték megváltozik. Ez pedig ahhoz vezet, hogy a beviteli mezőben más érték jelenik meg, mint amit a felhasználó begépelt. Ez azért nem okozott általában problémát, mivel a hasonló kombinált listák általában nagyságrendekkel alacsonyabb értékek begépelését engedik meg, ahol nem jelennek meg ezek a kerekítések.

    A megoldáshoz módosítani kellett a string osztályok részét képező string → egész konverziót, úgy hogy lekezelje a túlcsordulást. Majd az így módosított függvényt segítségével kellett lekezelni a viszonylag nagy egész értékeket. Ezzel a szélsőséges esetek helyes lekezelése mellett a hatékonyságot is sikerült némileg javítani, mivel a NumericBox a valós szám használatának köszönhetően rengeteg valós ↔ egész típuskonverziót is tartalmazott.

Túlcsordulás lekezelése:
http://cgit.freedesktop.org/libreoffice/core/commit/?id=bd60d41176da540b01d7583cfe00637431967f39
Valós konverzió kiküszöbölése:
http://cgit.freedesktop.org/libreoffice/core/commit/?id=84bac1799e528272ca808240508ca3f66272ee13

    A hónap további részében a lokalizáció területén végeztem néhány átalakítást. Elsőnek a lokalizáló programokban mintegy fantomként létező SDF formátum eltüntetése volt a cél. Ez a jelenlét főleg a kiemelés részfeladatára volt jellemző, ahol még ideiglenes SDF sorokat is generáltak a programok. Ez az ideiglenes SDF generálás azonban már olyan vékony köztes réteget képezett a lokalizáló programok és a PO fájlformátum között, hogy annak kiküszöbölése már egyszerűen megoldható volt. Ezzel sikerült a forrásfájlokban található összes SDF-re utaló elnevezést is eltüntetni.

Eredmény:
http://cgit.freedesktop.org/libreoffice/core/commit/?id=15a13bafccb96e6ab0cc5a23af6dd46715fa22c5

    Az SDF generálástól való megszabadulás során felszínre kerültek további olyan adatok és funkciók, melyek az SDF formátumhoz köthetők. Talán amit érdemes megemlíteni a lokalizációt végző programok parancssori paraméterei. Az SDF tárolási módjához kapcsolódott két olyan paraméter („project” és „projectroot”), melyek néhány string művelet megkönnyítését szolgálták. Ezek a műveletek azonban már az előző átalakítások során eltűntek, így ezt a két paramétert is lehet törölni.

Eredmény:
http://cgit.freedesktop.org/libreoffice/core/commit/?id=56a52889e65a17e324fc10cf341690385f5a9dd9

    Az átalakítások során sikerült jobban megismerni a lokalizációt végző osztályokat. Ezen információk rendszerezésére való törekvésem eredményeként, illetve az átláthatóság javításának érdekében némileg átalakítottam a lokalizációt tartalmazó modult (l10ntool). Ezek az átalakítások tartalmi változást nem jelentenek, alapvetően csak a forráskód átrendezését. Ez magában foglalja a több helyen használt azonos függvények kiemelését egy közös fájlba és a nem használt függvények törlését (ezek nem az SDF kiküszöbölésével váltak feleslegessé, hanem még régről maradtak meg).

Eredmény:
http://cgit.freedesktop.org/libreoffice/core/commit/?id=8e26b4783f1f47ff5d489e7df5869240eefd1071
és
http://cgit.freedesktop.org/libreoffice/core/commit/?id=9d64e7f2b723a7bc711c2acc8da99944b30761ef

  Az átláthatóság növelésének fő célja a mélyebb tartalmi változtatások kieszközölésének elősegítése, mely a következőkben a célom, hiszen a hatékonyságot ilyen módon lehet leginkább javítani. Az egyik ilyen tartalmi átalakítás a fájlformátumokhoz köthető string átalakításokhoz köthető. Ezek az átalakítások két részre bonthatók. Egyik részt jelentik a PO fájlformátum és a forráskódban található formátum közötti konverziók. Másik részét pedig az olyan átalakítások képezik, melyek a fordítók munkáját segítik elő, a PO fájlformátum megengedte kereteken belül. Ilyen például az XML karakterek átalakítása olvasható formába (<,> ,& ,",').

Jelenleg ezen dolgozom. Első ilyen tartalmú javításom a súgó fájlok lokalizációjához kapcsolódik:
http://cgit.freedesktop.org/libreoffice/core/commit/?id=ce51bf1a6ef36bbd1eea751add342cae6f1004d2

Címkék: , ,

Itt lehet hozzászólni !