TOC

This article has been localized into Dutch by the community.

Werken met Cultuur & Regio's:

Applicatie Culture & UICulture

In het vorige artikel bespraken we dat het rekening houden met cultuur erg belangrijk is, vooral als je met data (datums) en getallen werkt. Om die reden moet jouw applicatie altijd een exemplaar van de CultureInfo class hebben, gedefinieerd als "CurrentCulture", een terugval exemplaar voor al die situaties waarbij je niet hebt aangegeven welke cultuur moet worden gebruikt, bv. voor het afdrukken van een getal. Tenzij je deze property in de CultureInfo class verandert, zal de output gelijk zijn aan de cultuur van jouw besturingssysteem. Zie hier een simpele manier om dat te controleren:

Console.WriteLine("Current culture: " + CultureInfo.CurrentCulture.Name);

In dit artikel zullen we de hele tijd de CultureInfo class gebruiken. Vergeet dus niet hem op te nemen bij het 'using' statement, zoals bovenaan in het voorbeeld.

Het voorbeeld zal de cultuur 'outputten' die door jouw applicatie wordt gebruikt, bv. "en-US" voor een computer met de Engelse taal in de Verenigde Staten. In Nederland is dat "nl-NL" als je computer de Nederlandse taal gebruikt. Met ander woorden, de eerste twee letters geven de taal aan, en de laatste twee letters geven het land aan.

Het kan zijn dat je controle wilt hebben met betrekking tot welke cultuur door jouw applicatie wordt gebruikt. Als jouw applicatie bv overal de Engelse taal gebruikt, heeft het dan zin om getallen in Duits of Zweeds formaat af te drukken omdat de computer van de gebruiker dat specificeert? Misschien doet die dat, maar zo niet dan kun je heel gemakkelijk een nieuwe 'cultuur' specificeren, waarbij je opnieuw de CurrentCulture 'property' gebruikt:

CultureInfo.CurrentCulture = new CultureInfo("en-US");
Console.WriteLine("Current culture: " + CultureInfo.CurrentCulture.Name);

float largeNumber = 12345.67f;
Console.WriteLine("Number format (Current culture): " + largeNumber.ToString());

CultureInfo germanCulture = new CultureInfo("de-DE");
Console.WriteLine("Number format (German): " + largeNumber.ToString(germanCulture));

We starten meteen met het 'overrulen' van de CurrentCulture property door er een en-US cultuur van te maken. Dan drukken we het af, met een groot floating point getal. Je ziet dan dat het resultaat een getal is dat geformatteerd is in het Engels (US). In de laatste paar regels laten we zien hoe je die cultuur kunt 'overrulen' door een ander CultureInfo exemplaar aan de ToString() methode toe te voegen. En in dat geval wordt het getal ook in het Nederlands format afgedrukt. De output van dit voorbeeld ziet er ongeveer zo uit:

Current culture: en-US
Number format (Current culture): 12345.67
Number format (German): 12345,67

CurrentCulture vs. CurrentUICulture

Misschien heb je gezien dat de CultureInfo een property heeft met de naam CurrentUICulture. Deze property is alleen maar relevant als je hulpbestanden gebruikt om een user interface te localiseren. In dat geval weet jouw applicatie welke versies van de hulpbestanden moeten worden geladen, gebaseerd op de CurrentCulture property. Voor elk ander doel, inclusief het formatten van getallen, data, enzovoorts, moet je de CurrentCulture property gebruiken.

CurrentCulture en Threads

We hebben nog niet echt gepraat over threads, maar ze zijn eigenlijk een concept waardoor jouw applicatie aan een aantal dingen tegelijk kan werken. Als een .Net applicatie wordt opgestart, wordt er één enkele thread gemaakt en wordt alleen deze thread gebruikt, tenzij je een nieuwe maakt met behulp van de vele multi-threading strategieën van het framework. Ik noem dat hier, omdat het ook erg relevant is als het aankomt op de 'terugval' cultuur van jouw applicatie. In feite is CultureInfo.CurrentCulture eigenlijk een sluipweg naar de Thread.CurrentThread.CurrentCulture property, hetgeen betekent dat wanneer ook maar je de CurrentCulture definieert, die alleen maar geldig is voor de huidige thread.

Vóór de verschijning van .Net framework versie 4.5, moest je zelf de cultuur van elke nieuwe thread specificeren. Maar in .Net 4.5 werd de CultureInfo.DefaultThreadCurrentCulture property geïntroduceerd. Als je die gebruikt, zal elke nieuwe thread eveneens deze cultuur gebruiken, en het is net zo gemakkelijk te gebruiken als de CurrentCulture property:

CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("de-DE");

Maar hoe zit het dan met de bestaande thread? Welnu, als je nog niet een andere cultuur hebt gedefinieerd voor de CurrentCulture property, dan kan het instellen van de DefaultThreadCurrentCulture ook kunnen worden toegepast op de CurrentCulture property. Met andere woorden, het is zinnig om de DefaultThreadCurrentCulture te gebruiken in plaats van CurrentCulture als je multiple threads wil gaan gebruiken in je applicatie, dat houdt namelijk rekening met alle scenario's.

Samenvatting

Door de CultureInfo.CurrentCulture en/of de CultureInfo.DefaultThreadCurrentCulture properties te gebruiken, kun je een terugval cultuur definiëren voor je applicatie. Die zal altijd gebruikt worden als een getal of een datum moet worden afgedrukt, tenzij je dit specifiek in elke situatie afwijst ('overrulet').


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!