This article is currently in the process of being translated into Italian (~99% done).
The RegionInfo class
Nell'articolo precedente sulla classe CultureInfo, abbiamo discusso un po' la parte relativa ai Paesi e alle regioni, ma in realtà possiamo fare molte più cose basate sulle regioni con una delle altre classi del namespace System.Globalization: La classe RegionInfo. Essa conterrà molte informazioni utili su una regione specifica (di solito un paese), ad esempio il nome e il simbolo della valuta, l'uso o meno del sistema metrico decimale e così via.
Ottenere un'istanza di RegionInfo
Per accedere alle informazioni regionali, occorre un'istanza della classe RegionInfo. Essa ha un costruttore che può accettare un codice ISO 3166 o il codice della lingua/regione/paese della regione (ad esempio, "en-US"). Ecco un esempio:
RegionInfo regionInfo = new RegionInfo("en-US");
Console.WriteLine(regionInfo.EnglishName);
Questo significa anche che se si ha già un riferimento a una classe CultureInfo, si può facilmente usare per assicurarsi di ottenere il RegionInfo corrispondente. Come abbiamo appreso in un articolo precedente, l'applicazione ha sempre un'istanza di CultureInfo di riserva a cui fare riferimento:
RegionInfo regionInfo = new RegionInfo(CultureInfo.CurrentCulture.Name);
Console.WriteLine(regionInfo.EnglishName);
Fatte queste premesse, diamo un'occhiata ad alcune utili funzioni della classe RegionInfo.
Proprietà importanti della classe RegionInfo
Abbiamo già controllato la proprietà EnglishName, che restituisce semplicemente il nome della regione, in inglese. Ma naturalmente ci sono altre cose interessanti, ad esempio diverse proprietà relative alla valuta:
RegionInfo regionInfo = new RegionInfo("sv-SE");
Console.WriteLine(regionInfo.CurrencySymbol);
Console.WriteLine(regionInfo.ISOCurrencySymbol);
Console.WriteLine(regionInfo.CurrencyEnglishName);
Console.WriteLine(regionInfo.CurrencyNativeName);
Utilizzando CurrencySymbol, ISOCurrencySymbol, CurrencyEnglishName e/o CurrencyNativeName, si ottengono le informazioni necessarie per produrre messaggi di tipo monetario. Il risultato sarà simile a questo (in questo caso per lo svedese):
kr
SEK
Swedish Krona
Svensk krona
È anche possibile verificare facilmente se la regione data utilizza il sistema metrico, utilizzando la proprietà IsMetric:
RegionInfo regionInfo = new RegionInfo(CultureInfo.CurrentCulture.Name);
Console.WriteLine("Is the metric system used in " + regionInfo.EnglishName + "? " + (regionInfo.IsMetric ? "Yes" : "No"));
Restano le proprietà legate all'identità:
- Name indica il codice ISO 3166 che identifica la lingua e il paese/regione, ad esempio "en-US"_ per inglese/Stati Uniti.
- DisplayName consente di ottenere il nome completo del paese/regione nella versione localizzata del framework .NET.
- EnglishName fornisce il nome completo del paese/regione in inglese.
- NativeName fornisce il nome completo del paese/regione nella lingua indicata, ad esempio "United States" per en-US o "Deutschland" per de-DE.
- TwoLetterISORegionName fornisce il codice ISO 3166 a due lettere del paese/regione, ad esempio "US" per gli Stati Uniti o "DE" per la Germania.
- ThreeLetterISORegionName fornisce il codice ISO 3166 a tre lettere del paese/regione, ad esempio "USA" per gli Stati Uniti o "DEU" per la Germania.
Ovviamente, queste proprietà saranno utili quando si dovranno visualizzare informazioni su un Paese o una regione, come vedremo nel prossimo esempio.
Ottenere un elenco di paesi con RegionInfo
In un articolo precedente, vi ho mostrato come ottenere un elenco di tutte le culture definite nel framework .NET, che in pratica ci lascia un elenco di combinazioni lingua-paese-regione. Possiamo usarlo in combinazione con la classe RegionInfo per ottenere un elenco di paesi/regioni:
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
namespace RegionInfoCountries
{
class Program
{
static void Main(string[] args)
{
CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures);
List<RegionInfo> countries = new List<RegionInfo>();
foreach (CultureInfo ci in cultures)
{
RegionInfo regionInfo = new RegionInfo(ci.Name);
if (countries.Count(x => x.EnglishName == regionInfo.EnglishName) <= 0)
countries.Add(regionInfo);
}
foreach (RegionInfo regionInfo in countries.OrderBy(x => x.EnglishName))
Console.WriteLine(regionInfo.EnglishName);
}
}
}
Questo esempio è un po' più lungo degli altri in questo articolo, ma lascia che lo spieghi in dettaglio. Iniziamo ottenendo un elenco di tutte le culture specifiche disponibili - come abbiamo imparato in un articolo precedente, le culture specifiche sono quelle che definiscono una lingua E una regione/paese. Scorriamo questo elenco e, a ogni iterazione, usiamo l'istanza CultureInfo per creare un'istanza RegionInfo corrispondente. Controlliamo se un paese con quel nome è già stato aggiunto all'elenco e, in caso contrario, lo aggiungiamo. Al termine del ciclo, disponiamo di un elenco completo dei paesi definiti dal framework .NET, che possiamo scorrere in loop e inviare alla console, o fare praticamente qualsiasi altra cosa ci possa essere utile.
Questo è un ottimo esempio di ciò che si può ottenere con la combinazione di CultureInfo e RegionInfo, ma permettetemi di sottolineare che non si tratta di un elenco completo e accurato di paesi. Si tratta invece di un elenco completo di Paesi definito nella versione del framework .NET in uso, il che significa che alcuni Paesi potrebbero mancare o aver cambiato nome da quando è stata rilasciata la versione. Quindi, se avete bisogno di un elenco di paesi che sia accurato e aggiornato al 100%, dovrete probabilmente crearlo e mantenerlo da soli.
Riepilogo
La classe RegionInfo è fondamentalmente un'estensione della classe CultureInfo con informazioni ancora più utili su uno specifico Paese/regione. Permette di conoscere meglio l'identità e la valuta di una specifica regione e può aiutare a ottenere un elenco di Paesi/regioni.