Net, resurse de aplicații localizate

Resurse precum imaginile și tabelele de șir pot fi plasate în fișierele de resurse sau în ansamblurile subordonate. Aceste resurse pot fi foarte utile atunci când localizează aplicații, iar .NET oferă suport încorporat pentru localizarea resurselor localizate.







Înainte de a examina modul de aplicare a resurselor pentru a localiza aplicațiile, citiți mai întâi metodele de creare și citire a resurselor, fără a lua în considerare aspectele legate de limbă.

Crearea fișierelor de resurse

Fișierele de resurse pot stoca elemente similare cu imaginile și tabelele de rang. Fișierul de resurse poate fi un fișier text simplu sau un fișier cu extensia .resX, care utilizează XML. În acest articol, analizăm mai întâi o variantă a unui fișier text simplu.

O resursă care include o tabelă de rânduri poate fi creată într-un fișier text normal. În acest fișier, pur și simplu atribuiți șiruri de caractere cheilor. O cheie este un nume care poate fi folosit în program pentru a obține valoarea corespunzătoare. Cheile și valorile sunt permise să utilizeze spații.

Următorul este un exemplu de creare a unei tabele simple de șiruri de caractere:

Resgen.exe utilitate

Pentru a crea o resursă din fișierul *** .Txt, puteți utiliza utilitarul special pentru generarea fișierelor de resurse Resgen.exe. De exemplu, introduceți următoarea comandă:

va duce la crearea fișierului MyResources.resources. Fișierul de resurse generat de acest utilitar poate fi adăugat la ansamblu ca fișier extern sau introdus în ansamblul DLL sau EXE. Instrumentul Resgen sprijină, de asemenea, capacitatea de a crea fișiere de resurse în format XML cu extensia .resX. Este foarte simplu:

Rularea acestei comenzi va crea un fișier de resurse XML numit MyResources.resX.

Utilitarul Resgen susține resurse puternic tipizate. O resursă puternic tastată este reprezentată ca o clasă care accesează resurse. Pentru a crea o astfel de clasă în utilitarul Resgen oferă opțiunea / str:

După opțiunea / str, limbajul, spațiul de nume, numele clasei și numele fișierului sursă trebuie să fie specificate și în această ordine.

Utilitarul Resgen nu acceptă posibilitatea de a adăuga imagini. Printre exemplele SDK-ului .NET Framework există un exemplu ResXGen cu manuale de instruire. În ResXGen, puteți să trimiteți imagini în fișierul .resX. De asemenea, puteți adăuga imagini în mod programatic utilizând clasele ResourceWriter sau ResXResourceWriter, după cum va fi prezentat mai târziu.

Sursă de resurse pentru clasă

În loc să utilizați utilitarele Resgen pentru a crea fișiere de resurse, puteți scrie un program special care vă permite să faceți acest lucru. Clasa ResourceWriter din spațiul de nume System.Resources este utilizată pentru a crea fișiere de resurse binare, iar clasa ResXResourceWriter este utilizată pentru a crea fișiere de resurse bazate pe XML. Ambele clase acceptă posibilitatea de a adăuga imagini și orice alte obiecte serializabile. Dacă utilizați clasa ResXResourceWriter, va trebui să consultați ansamblul System.Windows.Forms.

Următorul exemplu de cod demonstrează modul de creare a unui obiect ResXResourceWriter numit rw în fișierul Demo.resx. După ce creați o instanță utilizând metoda ResourceResourceWriter (metoda AddResource (), puteți începe să adăugați un set de resurse de până la 2 GB în total. Primul argument din AddResource () vă permite să specificați numele resursei, iar al doilea argument este valoarea. Puteți adăuga o resursă de imagine utilizând o instanță a clasei Imagine. Pentru a utiliza clasa imagine, trebuie să vă referiți la ansamblul System.Drawing și să adăugați directiva de utilizare pentru a deschide spațiul de nume System.Drawing.







Aici, obiectul Imagine este creat prin deschiderea fișierului logo.gif, deci va trebui fie să copiați acest fișier de imagine în directorul programului executabil, fie să specificați calea completă spre el în argumentul metodei ImageToFile (). Operatorul de utilizare specifică faptul că resursa de imagine trebuie șters automat la sfârșitul blocului de utilizare.

În plus, resurselor simple de șir sunt adăugate la obiectul ResXResourceWriter. În final, metoda Close () a clasei ResXResourceWriter apelează automat ResXResourceWriter.Generate () pentru a scrie resursele fișierului Demo.resx:

Rularea acestui mic program va crea un fișier de resurse Demo.resx cu imaginea logo.gif înăuntru.

Utilizarea fișierelor de resurse

Adăugați la proiectul fișierul de resurse creat anterior Demo.resx, deschis în meniul contextual Solution Explorer și selectați elementul Adăugare -> Add Existing Item (Add -> Adăugare element existent). Implicit Build proprietatea de acțiune (Acțiune pentru layout) al acestei resurse este setat la Resource Embedded (resursă Embedded), care indică faptul că resursa ar trebui să fie integrate în ansamblul de ieșire.

Apoi, în parametrii proiectului (prin selectarea aplicației -> Informații despre ansamblu), setați Limba Neutră ca limbă principală:

Net, resurse de aplicații localizate

Modificarea valorii acestui parametru va adăuga atributul [NeutralResourceLanguageAttribute] în fișierul assemblyinfо.cs. după cum urmează:

Stabilirea unei valori pentru acest atribut va îmbunătăți performanța ResourceManager, deoarece îi va permite să găsească mai rapid resurse pentru SUA și să le utilizeze și ca opțiune implicită. În acest atribut, puteți specifica locația resursei implicite utilizând al doilea parametru din constructor. Folosind enumerarea UltimateResourceFallbackLocation, puteți specifica că trebuie localizat în ansamblul principal (valoarea MainAssembly) sau în ansamblul subordonat (valoarea satelitului).

Pentru a accesa resursele încorporate, utilizați clasa ResourceManager, care se află în spațiul de nume System.Resources. Pentru constructorul din această clasă, puteți trece numele grupului care conține resursele ca argument.

În acest exemplu, resursele sunt construite în ansamblul executabil, deci în al doilea argument, constructorul trebuie să fi trecut rezultatul metodei Assembly.GetExecutingAssembly (). Primul argument este numele resursei rădăcină, constând din numele spațiului de nume și din numele fișierului de resurse, dar fără extensia de resurse. Așa cum sa arătat mai devreme, acest nume poate fi afișat folosind utilitarul ildasm și pur și simplu șterge extensia de resurse din el. Numele poate fi obținut și în mod programatic folosind metoda GetManifestResourceNames () a clasei System.Reflection.Assembly:

Spațiul de nume System.Resources

Să examinăm pe scurt toate clasele care sunt conținute în spațiul de nume System.Resources și vă permit să lucrați cu resurse.

Poate fi folosit pentru a recupera resursele care aparțin culturii actuale, din ansambluri sau fișiere de resurse. Folosind ResourceManager, puteți primi instantaneu un întreg set de resurse pentru o anumită cultură ca o instanță ResourceSet.

Vă permite să reprezentați un set de resurse pentru o anumită cultură. Când creați o instanță a unui ResourceSet, el enumeră după clasă, implementează interfața IResourceReader și stochează toate resursele din HashTable.

Folosit în ResourceSet pentru a enumera resursele. Clasa ResourceReader implementează această interfață.

Acesta este folosit pentru a crea un fișier de resurse și implementează interfața IResourceWriter.

Clasele ResXResourceSet, ResXResourceReader și ResXResourceWriter

Ele sunt similare cu clasele ResourceSet, ResourceReader și ResourceWriter, dar ele sunt folosite pentru a crea un fișier de resurse non-binare, nu un fișier .resx XML. În loc să încorporați o resursă într-un fișier XML, ele vă permit să adăugați o legătură într-un fișier folosind ResXFileRef.

Spațiul de nume System.Resources.Tools

Conține clasa StronglyTypedResourceBuilder, pe care o puteți folosi pentru a crea o clasă dintr-o resursă.







Articole similare

Trimiteți-le prietenilor: