مشاركة عبر


استخدام الفئة CultureInfo

تحتوي الفئة CultureInfo على المعلومات الخاصة بالثقافة مثل اللغة ، و البلد/المنطقة، و التقويم، و الاصطلاحات الثقافية. توفر هذه الفئة أيضاً المعلومات المطلوبة لتنفيذ العمليات الخاصة بالثقافة مثل تغيير حالة الأحرف و تنسيق الأرقام و التواريخ و مقارنة السلاسل.

الفئة CultureInfo تحدد اسم فريد لا نظير له لكل ثقافة. للحصول على قائمة بأسماء الثقافات راجع وصف الفئة CultureInfo. يمكن للتطبيق الخاص بك استخدام الأسلوب GetCultures لاسترداد قائمة كاملة بكل الثقافات. يعرض المثال التالي قائمة بكل الثقافات.

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

استخدام CultureInfo مع تعليمات برمجية غير مدارة

ملاحظةملاحظة

يمكن لتطبيقات .NET framework الوصول إلى الدوال الغير المدارة في مكتبات الارتباط الحيوي باستخدام الخدمة استدعاء نظرة دقيقة على النظام الأساسي.

إلى صواب البلد/المنطقة المعلومات، يمكن للتطبيق الخاص بك تمرير كائن CultureInfo إلى كائن RegionInfo الذي يوافق البلد / المنطقة. بدلاً من ذلك، في التعليمات البرمجية الغير المُدارة، يمكن للتطبيق تمرير كائن CultureInfo لدالة Win32 GetLocaleInfo.

لتهيئة كائن RegionInfo باستخدام الكائن CultureInfo، يجب أن يحدد التطبيق الخاص بك كائن CultureInfo الذي يمثل ثقافة معينة مثل العربية (الجزائر) التي تسمى "ar - DZ". محاولة تهيئة الكائن RegionInfo بالكائن CultureInfo الذي يمثل ثقافة محايدة مثل العربية ("ar")، تطرح الاستثناء. الثقافات المحايدة لا تحدد معلومات البلد أو المنطقة اللازمة للتعيين إلى بلد/منطقة.

الأسلوب GetLocaleInfo يختلف عن المنشئ RegionInfo مُنشئ في أنه يقوم بإرجاع بلد/منطقة للكائن CultureInfo الذي يمثل إما ثقافة معينة أو ثقافة محايدة. على سبيل المثال، إذا قام التطبيق بتمرير الكائن CultureInfo الذي يمثل الثقافة المحايدة "العربية" إلى GetLocaleInfo، يعيّن الأسلوب الثقافة المحايدة إلى البلد/المنطقة الافتراضية المقترنة بها. في هذه الحالة، يقوم GetLocaleInfo باسترداد "السعودية". كن حذراً عند استخدام الأسلوب GetLocaleInfo لأن التعيين الافتراضي للبلد/ المنطقة الذي يوفره قد يكون غير مناسب ثقافياً للتطبيق الخاص بك. لإزالة هذا التعارض، اجعل التطبيق الخاص بك يستخدم فقط الثقافات المعينة عند التداخل مع دالة API.

يوضح المثال التالي كيف يمكن لمنشئ الفئة RegionInfo و الأسلوب GetLocaleInfo باسترداد قيم مختلفة لنفس الكائن CultureInfo. لاحظ أنه عندما يمثل الكائن CultureInfo الثقافة المعينة "العربية" (الجزائر)، كلا الأسلوبين يقوم باسترداد الجزائر كالبلد / المنطقة. و لكن عندما يمثل الكائن CultureInfo الثقافة المحايدة "العربية", تختلف النتائج. يفشل المنشئ RegionInfo في استرداد البلد/المنطقة، في حين أن GetLocaleInfo يسترد الجزائر.

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

ينتج هذا المثال الإخراج التالي:

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

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

راجع أيضًا:

المرجع

CultureInfo

المبادئ

استخدام الخاصية CurrentUICulture

استخدام الخاصية CurrentCulture

استخدام خاصية: InvariantCulture

الأسماء المقترنة بالكائن CultureInfo

موارد أخرى

الترميز و الترجمة