Delen via


Resources in .NET-apps

Bijna elke app van productiekwaliteit moet resources gebruiken. Een resource is alle niet-uitvoerbare gegevens die logisch worden geïmplementeerd met een app. Een resource kan in een app worden weergegeven als foutberichten of als onderdeel van de gebruikersinterface. Resources kunnen gegevens bevatten in een aantal formulieren, waaronder tekenreeksen, afbeeldingen en persistente objecten. (Als u persistente objecten naar een resourcebestand wilt schrijven, moeten de objecten serialiseerbaar zijn.) Als u uw gegevens opslaat in een resourcebestand, kunt u de gegevens wijzigen zonder de hele app opnieuw te compileren. Hiermee kunt u ook gegevens opslaan op één locatie en hoeft u niet meer te vertrouwen op in code vastgelegde gegevens die op meerdere locaties zijn opgeslagen.

.NET biedt uitgebreide ondersteuning voor het maken en lokaliseren van resources. Daarnaast ondersteunt .NET een eenvoudig model voor het verpakken en implementeren van gelokaliseerde resources.

Resources maken en lokaliseren

In een niet-gelokaliseerde app kunt u resourcebestanden gebruiken als opslagplaats voor app-gegevens, met name voor tekenreeksen die anders in meerdere locaties in broncode zijn vastgelegd. Meestal maakt u resources als tekstbestanden (.txt) of XML-bestanden (.resx) en gebruikt u Resgen.exe (Resource File Generator) om ze te compileren in binaire .resources-bestanden. Deze bestanden kunnen vervolgens worden ingesloten in het uitvoerbare bestand van de app door een taalcompilator. Zie Resourcebestanden maken voor meer informatie over het maken van resources.

U kunt ook de resources van uw app lokaliseren voor specifieke culturen. Hiermee kunt u gelokaliseerde (vertaalde) versies van uw apps bouwen. Wanneer u een app ontwikkelt die gebruikmaakt van gelokaliseerde resources, wijst u een cultuur aan die fungeert als de neutrale cultuur of terugvalcultuur waarvan de resources worden gebruikt als er geen geschikte resources beschikbaar zijn. Normaal gesproken worden de resources van de neutrale cultuur opgeslagen in het uitvoerbare bestand van de app. De resterende resources voor afzonderlijke gelokaliseerde culturen worden opgeslagen in zelfstandige satellietassembly's. Zie Satellietassembly's maken voor meer informatie.

Resources verpakken en implementeren

U implementeert gelokaliseerde app-resources in satellietassembly's. Een satellietassembly bevat de hulpbronnen van één cultuur; het bevat geen app-code. In het implementatiemodel voor satellietassembly maakt u een app met één standaardassembly (meestal de hoofdassembly) en één satellietassembly voor elke cultuur die door de app wordt ondersteund. Omdat de satellietassembly's geen deel uitmaken van de hoofdassembly, kunt u eenvoudig resources vervangen of bijwerken die overeenkomen met een specifieke cultuur zonder de hoofdassembly van de app te vervangen.

Bepaal zorgvuldig welke resources de standaardresourceassembly van uw app vormen. Omdat het deel uitmaakt van de hoofdassemblage, moet u de hoofdassemblage vervangen door wijzigingen in de hoofdassembly. Als u geen standaardresource opgeeft, wordt er een uitzondering gegenereerd wanneer het terugvalproces van de resource deze probeert te vinden. In een goed ontworpen app mag het gebruik van resources nooit een uitzondering genereren.

Zie het artikel Verpakkings- en implementatieresources voor meer informatie.

Resources ophalen

Tijdens runtime laadt een app de juiste gelokaliseerde resources per thread op basis van de cultuur die is opgegeven door de CultureInfo.CurrentUICulture eigenschap. Deze eigenschapswaarde wordt als volgt afgeleid:

  • Door rechtstreeks een CultureInfo object toe te wijzen dat de gelokaliseerde cultuur aan de Thread.CurrentUICulture eigenschap vertegenwoordigt.

  • Als er niet expliciet een cultuur is toegewezen, wordt de standaard-thread-UI-cultuur opgehaald uit de CultureInfo.DefaultThreadCurrentUICulture eigenschap.

  • Als er niet expliciet een standaard-thread-UI-cultuur wordt toegewezen door de cultuur voor de huidige gebruiker op de lokale computer op te halen. .NET-implementaties die op Windows worden uitgevoerd, doen dit door de Windows-functie GetUserDefaultUILanguage aan te roepen.

Zie de CultureInfo pagina's en CultureInfo.CurrentUICulture referentiepagina's voor meer informatie over hoe de huidige UI-cultuur is ingesteld.

Vervolgens kunt u resources ophalen voor de huidige UI-cultuur of voor een specifieke cultuur met behulp van de System.Resources.ResourceManager klasse. Hoewel de klasse het ResourceManager meest wordt gebruikt voor het ophalen van resources, bevat de System.Resources naamruimte extra typen die u kunt gebruiken om resources op te halen. Deze omvatten:

  • De ResourceReader klasse, waarmee u resources kunt inventariseren die zijn ingesloten in een assembly of zijn opgeslagen in een zelfstandig binair .resources-bestand. Dit is handig wanneer u niet weet welke namen er precies zijn voor de resources die beschikbaar zijn tijdens de runtime.

  • De ResXResourceReader klasse, waarmee u resources kunt ophalen uit een XML-bestand (.resx).

  • De ResourceSet klasse, waarmee u de resources van een specifieke cultuur kunt ophalen zonder terugvalregels te observeren. De resources kunnen worden opgeslagen in een assembly of een zelfstandig binair .resources-bestand. U kunt ook een IResourceReader implementatie ontwikkelen waarmee u de ResourceSet klasse kunt gebruiken om resources op te halen uit een andere bron.

  • De ResXResourceSet klasse, waarmee u alle items in een XML-resourcebestand in het geheugen kunt ophalen.

Zie ook