Utilisation de la classe CultureInfo

La CultureInfo contient des informations spécifiques à la culture, telles que la langue, le pays/la région, le calendrier et les conventions culturelles associées à une culture spécifique. Cette classe fournit aussi les informations requises pour effectuer des opérations spécifiques à la culture, par exemple le choix de la casse, la mise en forme des dates et des nombres ou la comparaison des chaînes.

La classe CultureInfo indique un nom unique pour chaque culture. Pour plus d'informations sur les noms de cultures, consultez la description de la classe CultureInfo. Votre application peut utiliser la méthode CultureInfo.GetCultures pour récupérer la liste complète de toutes les cultures. L'exemple suivant affiche la liste de toutes les cultures.

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

Utilisation de CultureInfo avec du code non managé

Les applications .NET Framework peuvent accéder à des fonctions non managées dans des bibliothèques de liens dynamiques à l'aide du service d'appel de plateforme. Toutefois, lorsque votre application passe un objet CultureInfo à la fonction Win32 GetLocaleInfo, souvenez-vous que le retour de la fonction n'est pas toujours cohérent avec le retour du constructeur de classe RegionInfo.

Un objet RegionInfo .NET Framework correspond à un pays ou une région. Pour initialiser un objet RegionInfo à l'aide d'un objet CultureInfo, votre application doit spécifier un objet CultureInfo qui représente une culture spécifique, telle que ar-DZ pour Arabe (Algérie). Si vous tentez d'initialiser un objet RegionInfo avec un objet CultureInfo représentant une culture neutre (tel que "ar" pour Arabe), une exception est levée. La culture neutre n'indique pas les informations de région ou de pays nécessaires au mappage sur un pays ou une région.

La fonction API GetLocaleInfo est différente du constructeur RegionInfo, car elle retourne un pays ou une région pour un objet CultureInfo qui représente une culture spécifique ou une culture neutre. Par exemple, si l'application passe un objet CultureInfo qui représente la culture neutre "ar" (Arabe) à GetLocaleInfo, la fonction mappe la culture neutre sur le pays ou la région par défaut auquel ou à laquelle elle est associée. Dans ce cas, GetLocaleInfo retourne Arabie saoudite. Soyez prudent lorsque vous utilisez la fonction GetLocaleInfo, car le mappage par défaut du pays ou la région proposé peut être culturellement inadéquat pour votre application. Pour éviter cette différence, votre application doit uniquement utiliser des cultures spécifiques lors de l'interopérabilité avec une fonction API.

L'exemple suivant montre comment le constructeur de classe RegionInfo et la fonction GetLocaleInfo peuvent retourner des valeurs différentes en cas de passage du même objet CultureInfo. Remarquez que lorsque l'objet CultureInfo représente la culture spécifique ar-DZ pour Arabe (Algérie), les deux méthodes retournent Algérie comme nom de pays ou de région. Cependant, lorsque l'objet CultureInfo représente la culture neutre ar (Arabe), les résultats sont différents. Le constructeur RegionInfo ne retourne pas de pays ou de région alors que GetLocaleInfo retourne Algérie.

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

Cet exemple produit la sortie suivante :

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

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

Voir aussi

Référence

CultureInfo Class

Concepts

Utilisation de la propriété CurrentUICulture
Utilisation de la propriété CurrentCulture
Utilisation de la propriété InvariantCulture
Noms associés à un objet CultureInfo

Autres ressources

Codage et localisation