TOC

This article is currently in the process of being translated into Italian (~99% done).

Working with Culture & Regions:

Introduction

I tempi in cui si creava un software da eseguire solo su un paio di computer locali sono praticamente finiti. Grazie alla globalizzazione e a Internet in particolare, oggi il software viene generalmente utilizzato in tutto il mondo, su un'ampia gamma di dispositivi. Ciò significa che il codice deve gestire molti casi specifici di una cultura, come la gestione di numeri e date in un formato diverso da quello previsto. Ad esempio, sapevate che in molti Paesi un numero con frazioni (ad esempio 1,42) non usa un punto ma una virgola come separatore decimale (ad esempio 1,42)? E sapete che in molti Paesi il giorno si scrive prima del mese in una data, mentre in altri si scrive prima l'anno?

Gestire tutto questo può essere una grande seccatura, ma fortunatamente il framework .NET offre diverse classi che possono aiutarci a gestire queste situazioni. La più utilizzata è la classe CultureInfo, di cui parleremo nel prossimo articolo, ma .NET offre anche classi per lavorare con le regioni e persino con calendari specifici (sapete che anche il calendario non è uguale in tutto il mondo, vero?).

Questo argomento è particolarmente importante se si sta lavorando a un'applicazione che deve supportare più lingue, ma anche se non è questo il caso, bisogna comunque fare i conti con il fatto che potrebbe essere utilizzata su un dispositivo che non usa le stesse notazioni, ad esempio per le date e i numeri. Per illustrare l'importanza di questo aspetto, si consideri questo esempio:

string inputNumber = "1.425";
double usNumber = double.Parse(inputNumber, CultureInfo.GetCultureInfo("en-US"));
double germanNumber = double.Parse(inputNumber, CultureInfo.GetCultureInfo("de-DE"));
Console.WriteLine(usNumber.ToString() + " is not the same as " + germanNumber);

Si pensi alla variabile inputNumber come a qualcosa che abbiamo appena ricevuto dall'utente dell'applicazione, ad esempio qualcosa digitato in un campo di testo di un modulo web. Utilizziamo il metodo double.Parse() per trasformarla in un float, ma inseriamo un secondo parametro di tipo CultureInfo: se non inserissimo questo parametro, verrebbero utilizzate le impostazioni di sistema, che potrebbero essere inglese, tedesco o qualcosa di completamente diverso. Si noti ora l'output:

1,425 is not the same as 1425

È vero! Il valore del nostro numero è appena diventato mille volte più grande, perché in Germania si usa la virgola come separatore dei decimali, mentre il punto funge da separatore delle migliaia. Questo sarebbe un grosso problema nella maggior parte delle applicazioni, ma la buona notizia è che l'esempio illustra il problema, ma anche la soluzione: Come si può vedere, grazie alla classe CultureInfo, .NET è in grado di analizzare un numero (e anche le date!) in uno qualsiasi dei formati possibili, a patto che gli si dica cosa aspettarsi.

Riepilogo

Gestire le differenze culturali e regionali è forse ancora più importante nella programmazione che nella vita reale. Fortunatamente, il framework .NET può essere di grande aiuto in questo senso, a patto che si sappia dove guardare. Nei prossimi articoli parleremo degli strumenti offerti dal framework .NET per affrontare queste differenze.


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!