# Programmeren in ASP.NET/Globalisering

Bijvoorbeeld in België komt het dikwijls voor dat je meerdere talen (Nederlands/Frans) moet voorzien in je pagina's. In dit hoofdstuk leer je hoe je verschillende inhoud kan tonen afhankelijk van de cultuur, met behulp van globalisering in ASP.NET.
Webpagina's in ASP.NET hebben twee waarden die je kan instellen: Culture en UICulture. Beide instellingen moeten niet noodzakelijk overeenstemmen.
Culture wordt gebruikt om functies in te stellen die afhangen van de cultuur, zoals de datum of de munt. Bij het formatteren van deze waardes wordt de instelling van Culture gebruikt. UICulture wordt gebruikt om te bepalen welke inhoud moet getoond worden als er zogenaamde resources in meerdere talen bestaan.
Controls zoals de Calendar-control hebben globalisering al ingebouwd. Als de UICulture of Culture wijzigt, dan passen zij hun inhoud automatisch al aan.

## Culture en UICulture instellen

Met web.config (voor alle pagina's):
Je kan ook de instellingen van de browser van de gebruiker overnemen:
In het Page-directief (voor één pagina):
In code (tijdens het uitvoeren van een bepaalde functie):

## Resources

ASP.NET kan natuurlijk niet automatisch de inhoud van je site vertalen. Je moet zelf verschillende versies van de inhoud voorzien. Om niet elke pagina twee keer te moeten maken, maar alleen de inhoud ervan, kan je resource-bestanden gebruiken. Je moet voor elke taal die je wil ondersteunen en voor elke inhoud aparte resourcebestanden aanmaken. Deze kunnen zowel tekst (strings) als afbeeldingen bevatten. Ze kunnen als apart bestand opgeslagen worden, of als onderdeel van een assembly (dll).
Kies “Add new item” en kies als soort “Resource file”. Dit is een bestand met extensie resx, en zal resources bevatten in de vorm van XML. Noem het bestand GlobResource.resx. Dit wordt het standaardbestand voor Amerikaans Engels. Je krijgt een verwittiging dat dit bestand in de folder App_GlobalResources zal geplaatst worden, klik Yes. Voeg een string toe met de naam “Welkom” en de waarde “Welcome”.
Bewaar het bestand en maak nog twee andere bestanden: GlobResource.nl-BE.resx met een string “Welkom” met de waarde “Welkom”. GlobResource.fr-BE.resx met een string “Welkom” met de waarde “Bienvenu”.
Merk op dat de naam altijd dezelfde is, maar de waarde verschilt naargelang de cultuur. Het middelste deel van de bestandsnaam verwijst naar de UICulture-waarde.
Alle .resx-bestanden worden automatisch gecompileerd tot assembly’s (dll’s) tijdens het uitvoeren. Men noemt dit “satelliet-assembly’s”.
Maak nu een pagina waarmee je de verschillende resources kan laden: Voeg de volgende import toe aan de pagina:
Vanaf nu kan je in je code de volgende expressie gebruiken:
De naam “GlobResource” komt overeen met de bestandsnaam van het resx-bestand, en de naam “Welkom” komt overeen met de naam van de string in dat bestand.
Om de tekst in een label (of een andere control) te krijgen is er nog een eenvoudiger manier, zonder het gebruik van code (alleen in ASP.NET 2.0).
Je kan dit ook instellen vanuit Visual Web Developer. Selecteer het label, ga naar het Properties-paneel, kies (Expressions) en klik op de drie puntjes. In de dropdownlijst kies je Resources. Vul bij ClassKey het woord “GlobResource” in en bij ResourceKey de string “Welkom”.
Deze instelling werkt niet als je de UICulture dynamisch verandert (bijvoorbeeld na het klikken op een knop, of zoals hieronder, na het kiezen in een lijst), omdat de verwerking van UICulture gebeurt in het event InitializeCulture, dat uitgevoerd wordt vóór het verwerken van andere events. Zie http://www.codeproject.com/useritems/localization.asp voor een oplossing hiervoor.
Dit is de volledige code:
globalisering.aspx
Als je in het configuratiescherm van Windows de regionale instellingen verandert naar Frans (België), dan zal het tweede label (lblResultaat2) dit automatisch opvangen. Het eerste label (lblResultaat) past zich aan aan de keuze in de radiolijst.