Programmeren in ASP.NET/Globalisering

Uit Wikibooks
Naar navigatie springen Naar zoeken springen

Programmeren in ASP.NET

  1. Wat is ASP.NET?
  2. Wat heb ik nodig voor ASP.NET?
  3. Een ASP.NET-server installeren
  4. Je eerste ASP.NET-pagina
  5. HTML-controls
  6. Foutzoeken
  7. Web-server-controls
  8. Webformulieren
  9. Veelgebruikte objecten
  10. Validering
  11. Master-pagina's
  12. Navigatie
  13. Gegevenstoegang
  14. Werken met databanken
  15. Databankgegevens wijzigen
  16. Werken met datacontrols
  17. GridView
  18. FormView en DetailsView
  19. User-controls
  20. Custom controls
  21. AJAX
  22. Viewstate
  23. Configuratiebestanden
  24. Webservices
  25. Beveiliging
  26. Personalisatie en profielen
  27. Thema's en skins
  28. WebParts
  29. Globalisering
  30. Caching
  31. Mail vanuit ASP.NET
  32. Reguliere expressies
  33. Server-side afbeeldingen
  34. Mobiele toepassingen
  35. Meer informatie
  36. Appendix: foutmeldingen

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[bewerken]

Met web.config (voor alle pagina's):

<configuration>
  <system.web>
    <globalization
      fileEncoding="utf-8"
      requestEncoding="utf-8"
      responseEncoding="utf-8"
      culture="en-US"
      uiCulture="fr-BE"
    />
  </system.web>
</configuration>

Je kan ook de instellingen van de browser van de gebruiker overnemen:

<globalization 
    culture="auto" 
    uiCulture="auto" 
    enableClientBasedCulture="true" />

In het Page-directief (voor één pagina):

<%@ Page UICulture="fr" Culture="en-US" ....%>

In code (tijdens het uitvoeren van een bepaalde functie):

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR")
Thread.CurrentThread.CurrentUICulture=new CultureInfo("fr-FR")

Resources[bewerken]

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:

<%@ Import Namespace="System.Resources" %>

Vanaf nu kan je in je code de volgende expressie gebruiken:

Dim strWelkom As String = Resources.GlobResource.Welkom

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).

<asp:Label id="lblResultaat2" Text="<%$Resources:GlobResource, Welkom %>" runat="server"></asp:Label>

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

<%@ Page Language="VB" %>
<%@ Import Namespace="System.Globalization" %>
<%@ Import Namespace="System.Resources" %>
<%@ Import Namespace="System.Threading" %>

<script runat="server">
    Protected Sub rblTaal_SelectedIndexChanged(s As Object,e As System.EventArgs)
        Dim objCI As New CultureInfo(rblTaal.SelectedValue.ToString())
        Thread.CurrentThread.CurrentCulture = objCI
        Thread.CurrentThread.CurrentUICulture = objCI
        Dim strWelkom As String = Resources.GlobResource.Welkom
        lblResultaat.Text = strWelkom
    End Sub
</script>

<html>
<head runat="server">
    <title>Globalisering</title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:RadioButtonList ID="rblTaal" runat="server" AutoPostBack="True" 
        OnSelectedIndexChanged="rblTaal_SelectedIndexChanged">
            <asp:ListItem Value="nl-BE">Nederlands</asp:ListItem>
            <asp:ListItem Value="fr-BE">Frans</asp:ListItem>
        </asp:RadioButtonList><br />
        <asp:Label ID="lblResultaat" runat="server"></asp:Label><br />
        <asp:Label ID="lblResultaat2" Text="<%$Resources:GlobResource, Welkom %>" 
            runat="server"></asp:Label>
    </form>
</body>
</html>

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.

Informatie afkomstig van http://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.