Usando a classe CultureInfo
O CultureInfo classe contém informações específicas de cultura, como o idioma, país/região, calendário e convenções culturais. Essa classe também fornece as informações necessárias para executar operações específicas de cultura, como casing, formatação de datas e números e comparação de seqüências de caracteres.
O CultureInfo classe especifica um nome exclusivo para cada cultura. Para obter uma lista de nomes de cultura, consulte a descrição do CultureInfo classe. Seu aplicativo pode usar o GetCultures método para recuperar uma lista completa de todas as culturas. O exemplo a seguir exibe uma lista de todas as culturas.
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);
}
}
}
Usando CultureInfo com código não gerenciado
Observação
.Aplicativos do NET Framework podem acessar as funções não gerenciadas em bibliotecas de vínculo dinâmico usando o Uma análise detalhada da plataforma Invoke service.
Para inicializar as informações do país/região, o aplicativo pode passar um CultureInfo o objeto para um RegionInfo o objeto que corresponde ao país / região. Como alternativa, em código não gerenciado, o aplicativo pode passar um CultureInfo o objeto para a função Win32 GetLocaleInfo.
Para inicializar um RegionInfo objeto usando um CultureInfo o objeto, seu aplicativo deve especificar um CultureInfo objeto que representa uma cultura específica, como, por exemplo, árabe (Argélia), chamado "DZ do ar". Uma tentativa de inicializar um RegionInfo de objeto com um CultureInfo objeto que representa uma cultura neutra, como o árabe ("ar"), lança uma exceção. A cultura neutra não especifica as informações do país ou região necessárias para mapear um país/região.
O GetLocaleInfo método difere do RegionInfo construtor no que ele retorna um país/região para um CultureInfo objeto que representa uma cultura específica ou uma cultura neutra. Por exemplo, se o aplicativo passa um CultureInfo objeto que representa o neutro de cultura árabe para GetLocaleInfo, o método mapeia a cultura neutra para o país/região do padrão ao qual está associado. Nesse caso, GetLocaleInfo recupera Arábia Saudita. Tenha cuidado ao usar o GetLocaleInfo método, conforme o país/região do padrão mapeando-fornece pode ser culturalmente inadequado para seu aplicativo. Para eliminar essa discrepância, que seu aplicativo usar apenas as culturas específicas quando interoperar com uma função de API.
O exemplo a seguir demonstra como o RegionInfo o construtor de classe e o GetLocaleInfo método pode recuperar valores diferentes para o mesmo CultureInfo objeto. Observe que quando o CultureInfo objeto representa a cultura específica árabe (Argélia), ambos os métodos recuperar Argélia como o país / região. No entanto, quando o CultureInfo objeto representa a cultura neutra, árabe, os resultados diferem. O RegionInfo construtor falha ao recuperar um país/região, enquanto GetLocaleInfo recupera Argélia.
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));
}
}
}
Esse exemplo produz a seguinte saída.
The .NET Region name:
The Win32 Region name: Saudi Arabia
The .NET Region name: Algeria
The Win32 Region name: Algeria
Consulte também
Referência
Conceitos
Usando a propriedade CurrentUICulture
Usando a propriedade CurrentCulture
Usando a propriedade InvariantCulture
Nomes associados a um objeto CultureInfo