HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Erőforrás generálása az Intézőből, néhány kattintással


Példaprogram letöltése

29555 bájt

Ha olyan alkalmazást készítünk, mely mondjuk 29 különböző nyelven tartalmaz feliratokat, amelyek tárolásához erőforrásokat használunk, amit a RESGEN.EXE segédprogrammal készítünk és az erőforrások tartalma sokszor változik a fejlesztés folyamán, vagy csak sok van belőlük akkor elég fárasztó állandóan egy parancssorból e segédprogram használata. Mennyivel egyszerűbb is lenne, ha mondjuk a Intézőben jobb gombbal kattintanánk azon az állományon, melyből erőforrást szeretnénk készíteni és kiválasztva egy menüpontot a RESGEN-t futtathatnánk, mely elkészíti az adott állományból a szükséges erőforrás állományt.
Mellékelt példában ezt valósítjuk meg, egy olyan teszt alkalmazás keretében, mely képes a hét napjainak megnevezését 29 különböző nyelven megjeleníteni.

Cikkünk a 2. évfolyam 7. számában bemutatott „Többnyelvű web site készítése” című cikkre épül. Ennek ismerete elengedhetetlen a mostani leírás teljes megértéséhez, mivel az ottani ismereteket nem ismételjük meg.
Az előbb említett cikkhez hasonlóan most is TXT állományokra lesz szükségünk, melyek tartalmazzák az adott nyelven a hét napjait:
[strings]
1=Monday
2=Tuesday
3=Wednesday
4=Thursday
5=Friday
6=Saturday
7=Sunday
Fontos, hogy ezek a TXT állományok Unicode kódolásúak legyenek, különben az erőforrásba nem kerül bele sok lényeges karakter, így például néhány magyar ékezetes betű is elveszne. Amikor az Intézőben létrehozunk egy TXT-t, akkor az alapesetben ANSI kódolású lesz, ami most nem felel meg számunkra. Ennek megoldásaként nyissuk meg az állományt, mondjuk Notepad-al és válasszuk a File - Save as menüpontot, itt mentsük az állományt azonos névvel, de a kódolásnál válasszuk az Unicode értékét. Ettől kezdve akár kínai karaktereket is használhatunk, nem csak magyar ékezetes betűket.
Ha már adottak ezek a TXT állományok, akkor jönne az a lépés, hogy fordítsuk le ezeket RESOURCES kiterjesztésű erőforrás állományokká a RESGEN alkalmazás segítségével. Ehhez kellene egy parancssort indítanunk és egyesével begépelni az összes TXT állományunk nevét. 29 nyelven ez egy kicsit lassú megoldás lenne, nem is beszélve arról, ha változnak a TXT állományok és újra kellene fordítani az erőforrásokat.
Valósítsuk meg inkább azt, hogy ha egy TXT-n jobb gombbal kattintunk, akkor legyen egy ResGen nevű menüpont és ezt választva az adott TXT-ből a RESGEN segítségével jöjjön létre a szükséges erőforrás állomány.
Erre a megoldást a Windows regisztrációs adatbázisában kell keresnünk, ahol a TXT kiterjesztéshez egy új parancsot adhatunk meg.


A registry módosításához futtassa a mellékelt resgen.reg nevű állományt, melynek hatására a TXT kiterjesztéshez hozzá lesz rendelve egy ResGen nevű menüpont is. A resgen.reg futtatása előtt annak tartalmát módosítani kell, ha a Visual Studio.NET nem az alapértelmezett könyvtárba lett telepítve és így a ResGen.exe nem a C:\Program Files\Microsoft Visual Studio.NET\FrameworkSDK\Bin\ könyvtárba került.
A registry módosítása egyszerű, a HKEY_CLASSES_ROOT főkulcson belül a txtfile\shell kulcsnál létre kell hoznunk egy újat, melyet ResGen névvel tettünk meg. Ez alá egy command nevű kulcs értékénél megadható, hogy mely alkalmazás legyen elindítva akkor, ha ezt a menüpontot választjuk az intézőben. Itt természetesen a resgen.exe lesz megadva. A %1 helyére pedig annak az állománynak a neve kerül automatikusan, amelyiken jobb gombbal kattintottunk.
A példaprogram
Az erőforrások használata ugyanúgy történik, mint a fent hivatkozott példában tettük, így ennek ismertetését most nem ismételnénk meg.
Ahhoz, hogy az aktuális napot ki tudjuk írni a választott nyelven, szükséges tudnunk, hogy melyik is az. Az erőforrás állományokban az egyes napokat számmal jelöltük. Az 1 a hétfő és így tovább vasárnapig, mely a 7-es számot kapta.
A DateTime osztály DayOfWeek property-je megadja számunkra a hét napjának sorszámát, ezzel csak az a kis problémánk van, hogy itt a számozás másképp megy mint az erőforrás állományunkban. A DayOfWeek nullát ad, ha vasárnap van, 1-et ha hétfő, 2-t ha kedd és így tovább szombatig, mely a 6-os sorszámot kapta.
      int w = (int)DateTime.Now.DayOfWeek;
E probléma leküzdésére a kiolvasott értéket némileg módosítanunk kell az alábbi módon:
      w=w==0?7:w;
Mostantól a w változó már az erőforrásban lévő számozásnak megfelelő értéken adja meg a hét napját, így azt csak ki kell olvasnunk a megjelenítéshez.
      Label1.Text += " " + rm.GetString(w.ToString());

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2002 évkönyv 224. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |