Sdílet prostřednictvím


Použití třídy CultureInfo

Třída CultureInfo obsahuje informace specifické pro jazykovou verzi, jako je například jazyk, země/oblast, kalendář a kulturní konvence. Tato třída také poskytuje informace požadováné pro provádění jazykově specifických operací, jako je například práce s velkými a malými písmeny, formátování data a čísel, porovnávání řetězců.

Třída CultureInfo specifikuje jedinečný název pro každou jazykovou verzi. Seznam názvů jazykových verzí naleznete v popisu třídy CultureInfo. Vaše aplikace může použít metodu GetCultures pro získání úplného seznamu všech jazykových verzí. Následující příklad zobrazí seznam všech jazykových verzí.

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);
      }
   }
}

Použití CultureInfo s nespravovaným kódem

PoznámkaPoznámka

Aplikace rozhraní .NET framework mohou přistupovat k nespravovaným funkcím v dynamicky připojených knihovnách pomocí služby A Closer Look at Platform Invoke.

Pro inicializaci informace o zemi/regionu může vaše aplikace předat objekt CultureInfo objektu RegionInfo, který odpovídá zemi/oblasti. Alternativně může aplikace v nespravovaném kódu předat objekt CultureInfo Win32 funkci GetLocaleInfo.

Pro inicializaci objektu RegionInfo pomocí objektu CultureInfo musí vaše aplikace specifikovat objekt CultureInfo, který představuje určitou jazykovou verzi, jako je například arabština (Alžírsko) s názvem "ar-DZ". Při pokus o inicializaci objektu RegionInfo pomocí objektu CultureInfo, který představuje neutrální jazykovou verzi, jako je například arabština ("ar"), je vyvolána výjimka. Neutrální jazyková verze nespecifikuje informaci o zemi nebo oblasti nezbytnou pro mapování na zemi/oblast.

Metoda GetLocaleInfo se liší od konstruktoru RegionInfo v tom, že vrací zemi/oblast pro objekt CultureInfo, který představuje buď specifickou jazykovou verzi nebo neutrální jazykovou verzi. Například pokud aplikace předá objekt CultureInfo, který představuje neutrální jazykovou verzi arabština metodě GetLocaleInfo, tak metoda mapuje neutrální jazykovou verzi na výchozí zemi nebo oblast, se kterou je asociována. V tomto případě GetLocaleInfo získá Saudskou Arábii. Při použití metody GetLocaleInfo postupujte opatrně, výchozí mapování země/oblasti, které poskytuje, může být pro vaši aplikaci kulturně nevhodné. K odstranění této nesrovnalosti, má vaše aplikace používat pouze určité jazykové verze, když spolupracuje s funkcí API rozhraní.

Následující příklad ukazuje, jak konstruktor třídy RegionInfo a metoda GetLocaleInfo mohou získat různé hodnoty pro stejný objekt CultureInfo. Všimněte si, že když objekt CultureInfo představuje specifickou jazykovou verzi arabština (Alžírsko), obě metody získají Alžírsko jako zemi či oblast. Nicméně, když objekt CultureInfo představuje neutrální jazykovou verzi arabština, výsledky jsou jiné. Konstruktor RegionInfo selže při načtení země nebo oblasti, zatímco GetLocaleInfo načte Alžírsko.

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));
    }
   }
}

Tento příklad vytvoří následující výstup:

The .NET Region name:
The Win32 Region name: Saudi Arabia

The .NET Region name: Algeria
The Win32 Region name: Algeria

Viz také

Odkaz

CultureInfo

Koncepty

Použití vlastnosti CurrentUICulture

Použití vlastnosti CurrentCulture

Použití vlastnosti InvariantCulture

Názvy asociované s objektem CultureInfo

Další zdroje

Kódování a lokalizace