Uso della classe CultureInfo
La classe CultureInfo contiene informazioni specifiche delle impostazioni cultura quali la lingua, il paese, il calendario e le convenzioni. Questa classe fornisce inoltre le informazioni necessarie per l'esecuzione di operazioni specifiche delle impostazioni cultura, come ad esempio l'uso di maiuscole/minuscole, la formattazione di date e numeri e il confronto di stringhe.
La classe CultureInfo specifica un nome univoco per le diverse impostazioni cultura. Per un elenco dei nomi delle impostazioni cultura, vedere la descrizione della classe CultureInfo class. L'applicazione può utilizzare il metodo GetCultures per recuperare un elenco completo di tutte le impostazioni cultura. Nell'esempio seguente viene visualizzato un elenco di tutte le impostazioni cultura.
Imports System
Imports System.Globalization
public class printClass
Public Shared Sub Main()
Dim ci As CultureInfo
For Each ci in _
CultureInfo.GetCultures(CultureTypes.AllCultures)
Console.WriteLine(ci)
Next ci
End Sub
End Class
using System;
using System.Globalization;
public class printClass
{
public static void Main()
{
foreach (CultureInfo ci in
CultureInfo.GetCultures(CultureTypes.AllCultures))
{
Console.WriteLine(ci);
}
}
}
Utilizzo di CultureInfo con codice non gestito
Nota |
---|
Le applicazioni .NET Framework sono in grado di accedere a funzioni non gestite di librerie a collegamento dinamico mediante il servizio Informazioni dettagliate su platform invoke. |
Per inizializzare le informazioni relative a un paese, l'applicazione può passare un oggetto CultureInfo a un oggetto RegionInfo corrispondente a tale paese. In alternativa, nel codice non gestito l'applicazione può passare un oggetto CultureInfo alla funzione Win32 GetLocaleInfo.
Per inizializzare un oggetto RegionInfo mediante un oggetto CultureInfo, è necessario indicare un oggetto CultureInfo che rappresenti impostazioni cultura specifiche, ad esempio la lingua araba parlata in Algeria, designata "ar-DZ". Se si tenta di inizializzare un oggetto RegionInfo con un oggetto CultureInfo che rappresenta impostazioni cultura non associate ad alcun paese, ad esempio la lingua araba ("ar"), viene generata un'eccezione. Le impostazioni cultura non associate ad alcun paese non specificano le informazioni necessarie per eseguire il mapping a un paese.
Il metodo GetLocaleInfo differisce dal costruttore RegionInfo in quanto restituisce un paese per un oggetto CultureInfo che rappresenta impostazioni cultura specifiche o non associate ad alcun paese. Se ad esempio l'applicazione passa a GetLocaleInfo un oggetto CultureInfo che rappresenta le impostazioni cultura relative alla lingua araba non associate ad alcun paese, il metodo esegue il mapping delle impostazioni cultura al paese predefinito a cui tali impostazioni sono associate. In questo caso, GetLocaleInfo recupera Arabia Saudita. Il mapping predefinito del paese fornito dal metodo GetLocaleInfo può non essere appropriato per l'applicazione in termini di impostazioni cultura. Per eliminare questa discrepanza, in caso di interazione con una funzione di un'API, fare in modo che l'applicazione utilizzi solo impostazioni cultura specifiche.
Nell'esempio riportato di seguito viene illustrato come il costruttore della classe RegionInfo e il metodo GetLocaleInfo possono recuperare valori diversi per lo stesso oggetto CultureInfo. Quando l'oggetto CultureInfo rappresenta le impostazioni cultura specifiche relative alla lingua araba parlata in Algeria, il nome di paese recuperato da entrambi i metodi è Algeria. I risultati differiscono invece quando l'oggetto CultureInfo rappresenta le impostazioni cultura relative alla lingua araba non associate ad alcun paese. Il costruttore RegionInfo non recupera alcun paese, mentre GetLocaleInfo recupera Algeria.
Imports System
Imports System.Globalization
Imports System.Runtime.InteropServices
Imports Microsoft.VisualBasic
Namespace CountryRegionName
Class CountryRegionName
' The name of a country or region in English.
Private LOCALE_SENGCOUNTRY As Integer = &H1002
' Use COM interop to call the Win32 API GetLocalInfo.
Declare Unicode Function GetLocaleInfoW Lib "Kernel32.dll" _
(Locale As Integer, LCType As Integer,<[In](), _
MarshalAs(UnmanagedType.LPWStr)> lpLCData As String, _
cchData As Integer) As Integer
' A method to retrieve the .NET Framework Country/Region
' that maps to the specified CultureInfo.
Public Function GetNetCountryRegionName(ci As CultureInfo) As String
' If the specified CultureInfo represents a specific culture,
' the attempt to create a RegionInfo succeeds.
Try
Dim ri As New RegionInfo(ci.LCID)
Return ri.EnglishName
' Otherwise, the specified CultureInfo represents a neutral
'culture, and the attempt to create a RegionInfo fails.
Catch
Return String.Empty
End Try
End Function
' A method to retrieve the Win32 API Country/Region
' that maps to the specified CultureInfo.
Public Function GetWinCountryRegionName(ci As CultureInfo) As String
Dim size As Integer = GetLocaleInfoW(ci.LCID, _
LOCALE_SENGCOUNTRY, Nothing, 0)
Dim str As New String(" "c, size)
Dim err As Integer = GetLocaleInfoW(ci.LCID, _
LOCALE_SENGCOUNTRY, str, size)
' If the string is not empty, GetLocaleInfoW succeeded.
' It will succeed regardless of whether ci represents
' a neutral or specific culture.
If err <> 0 Then
Return str
Else
Return String.Empty
End If
End Function
<STAThread()> _
Public Shared Sub Main(args() As String)
Dim crn As New CountryRegionName()
' Create a CultureInfo initialized to the neutral Arabic culture.
Dim ci1 As New CultureInfo(&H1)
Console.WriteLine(ControlChars.NewLine + _
"The .NET Region name: {0}", _
crn.GetNetCountryRegionName(ci1))
Console.WriteLine("The Win32 Region name: {0}", _
crn.GetWinCountryRegionName(ci1))
' Create a CultureInfo initialized to the specific
' culture Arabic in Algeria.
Dim ci2 As New CultureInfo(&H1401)
Console.WriteLine(ControlChars.NewLine + _
"The .NET Region name: {0}", _
crn.GetNetCountryRegionName(ci2))
Console.WriteLine("The Win32 Region name: {0}", _
crn.GetWinCountryRegionName(ci2))
End Sub
End Class
End Namespace
using System;
using System.Globalization;
using System.Runtime.InteropServices;
namespace CountryRegionName
{
class CountryRegionName
{
// The name of a country or region in English
int LOCALE_SENGCOUNTRY = 0x1002;
// Use COM interop to call the Win32 API GetLocalInfo.
[DllImport("kernel32.dll", CharSet=CharSet.Unicode)]
public static extern int GetLocaleInfo(
// The locale identifier.
int Locale,
// The information type.
int LCType,
// The buffer size.
[In, MarshalAs(UnmanagedType.LPWStr)] string lpLCData,int cchData
);
// A method to retrieve the .NET Framework Country/Region
// that maps to the specified CultureInfo.
public String GetNetCountryRegionName(CultureInfo ci)
{
// If the specified CultureInfo represents a specific culture,
// the attempt to create a RegionInfo succeeds.
try
{
RegionInfo ri = new RegionInfo(ci.LCID);
return ri.EnglishName;
}
// Otherwise, the specified CultureInfo represents a neutral
// culture, and the attempt to create a RegionInfo fails.
catch
{
return String.Empty;
}
}
// A method to retrieve the Win32 API Country/Region
// that maps to the specified CultureInfo.
public String GetWinCountryRegionName(CultureInfo ci)
{
int size = GetLocaleInfo(ci.LCID, LOCALE_SENGCOUNTRY, null, 0);
String str = new String(' ', size);
int err = GetLocaleInfo(ci.LCID, LOCALE_SENGCOUNTRY, str, size);
// If the string is not empty, GetLocaleInfo succeeded.
// It will succeed regardless of whether ci represents
// a neutral or specific culture.
if(err != 0)
return str;
else
return String.Empty;
}
[STAThread]
static void Main(string[] args)
{
CountryRegionName crn = new CountryRegionName();
// Create a CultureInfo initialized to the neutral Arabic culture.
CultureInfo ci1 = new CultureInfo(0x1);
Console.WriteLine("\nThe .NET Region name: {0}",
crn.GetNetCountryRegionName(ci1));
Console.WriteLine("The Win32 Region name: {0}",
crn.GetWinCountryRegionName(ci1));
// Create a CultureInfo initialized to the specific
// culture Arabic in Algeria.
CultureInfo ci2 = new CultureInfo(0x1401);
Console.WriteLine("\nThe .NET Region name: {0}",
crn.GetNetCountryRegionName(ci2));
Console.WriteLine("The Win32 Region name:
{0}",crn.GetWinCountryRegionName(ci2));
}
}
}
Il risultato prodotto nell'esempio è il seguente:
The .NET Region name:
The Win32 Region name: Saudi Arabia
The .NET Region name: Algeria
The Win32 Region name: Algeria
Vedere anche
Riferimenti
Concetti
Uso della proprietà CurrentUICulture
Uso della proprietà CurrentCulture
Uso della proprietà InvariantCulture
Nomi associati a un oggetto CultureInfo