مشاركة عبر


تنسيق البيانات الرقمية لثقافة محددة

الفئة: NumberFormatInfo تعرّف كيفية تنسيق العملة، الفواصل العشرية و رموز رقمية أخرى و كيفية عرضها استناداً إلى الثقافة. على سبيل المثال، يتم تنسيق الرقم العشري 10000.50 كـ 10,000.50 للثقافة الإنجليزية (الولايات المتحدة) ، "en - US" و 10.000,50 للثقافة الألمانية (ألمانيا) "de-DE".

يمكن إنشاء الكائن: NumberFormatInfo لثقافة محددة أو ثقافة ثابتة و لكن ليس لثقافة محايدة. الثقافة المحايدة لا توفر معلومات كافية لعرض التنسيق الرقمي الصحيح. يتم طرح استثناء إذا حاول التطبيق إنشاء كائن NumberFormatInfo باستخدام ثقافة محايدة.

يعرض مثال التعليمات البرمجية التالي عدداً صحيحاً باستخدام تنسيق العملة القياسية ("c") NumberFormatInfo للثقافة الحالي.

Imports System
Imports System.Globalization

Public Class TestClass

   Public Shared Sub Main()
      Dim i As Integer = 100
      
      ' Creates a CultureInfo for English in Belize.
      Dim bz As New CultureInfo("en-BZ")
      ' Displays i formatted as currency for the bz.
      Console.WriteLine(i.ToString("c", bz))
      
      ' Creates a CultureInfo for English in the U.S.
      Dim us As New CultureInfo("en-US")
      ' Displays i formatted as currency for us.
      Console.WriteLine(i.ToString("c", us))
      
      ' Creates a CultureInfo for Danish in Denmark.
      Dim dk As New CultureInfo("da-DK")
      ' Displays i formatted as currency for dk.
      Console.WriteLine(i.ToString("c", dk))
   End Sub
End Class
using System;
using System.Globalization;

public class TestClass
{
   public static void Main()
   {
      int i = 100;
      
      // Creates a CultureInfo for English in Belize.
      CultureInfo bz = new CultureInfo("en-BZ");
      // Displays i formatted as currency for the bz.
      Console.WriteLine(i.ToString("c", bz));
      
      // Creates a CultureInfo for English in the U.S.
      CultureInfo us = new CultureInfo("en-US");
      // Display i formatted as currency for us.
      Console.WriteLine(i.ToString("c", us));
      
      // Creates a CultureInfo for Danish in Denmark.
      CultureInfo dk = new CultureInfo("da-DK");
      // Displays i formatted as currency for dk.
      Console.WriteLine(i.ToString("c", dk));
   }
}

تنتج هذه التعليمات البرمجية المخرج التالي:

BZ$100.00
$100.00
kr100,00

تنسيق العملة لأمم اليورو

الفئات CultureInfo و RegionInfo كلتاهما تتضمن معلومات عن العملة. يتم تحديد عملة واحدة فقط لكل ثقافة. اليورو هو العملة الرسمية في بلجيكا، و ألمانيا، و إسبانيا، و فرنسا، و أيرلندا، و إيطاليا، و لوكسمبورج، و هولندا, و النمسا، و البرتغال، و فنلندا، و اليونان. في 1 يناير, 2002 ، بدأت هذه الأمم باستخدام النقود المعدنية و الورقية الخاصة ببنك اليورو. لذلك، تقوم .NET Framework و Windows XP بتعيين رمز العملة الافتراضي لليورو لهذه الأمم الاثنتي عشر. الإصدارات الأقدم لـ Windows مازالت تقوم بتعيين رمز العملة الافتراضي للعملة المحلية الخاصة بهذه الأمم.

يجب أن تكون على علم باختلافات أنظمة التشغيل بين رموز العملة الافتراضية. في نظام التشغيل Windows، يمكن للمستخدمين منع بعض القيم المقترنة بالثقافة الافتراضية لنظام التشغيل من خلال الخيارات الإقليمية وخيارات اللغة في لوحة التحكم. على سبيل المثال، يمكن للمستخدم اختيار رمز لعرض العملة غير الرمز الافتراضي للثقافة. تستخدم كلاً من Windows Forms و تطبيقات وحدة التحكم، العملة الافتراضي المحدد فى نظام التشغيل. إذا كان هناك مستخدم، في بلد أو منطقة تستخدم اليورو، يعمل بإصدار أقدم من Windows، و لم يقم بتحديث إعداد العملة إلى اليورو من خلال الخيارات الإقليمية و خيارات اللغة في "لوحة التحكم"، سيكون إعداد العملة الافتراضية لديه غير صحيح. تطبيقات ASP.NET و تطبيقات خدمة الويب XML التي تم إنشاؤها في ASP.NET يتم تشغيلها كخدمات النظام، و ليس لمستخدمين محددين. لذلك، قد تختلف النتائج الافتراضية التي يقوموا بإرجاعها عن تلك التي يتم إرجاعها من قبل Windows Forms و تطبيقات وحدة التحكم.

و يُفضل كتابة التعليمات البرمجية التي تستخدم إعدادات العملة الافتراضية الخاصة بـ .NET Framework لثقافة ما لعزل التطبيق عن اختلافات نظم التشغيل و التأكد من اتساق تنسيق العملة. يجب على التطبيق إنشاء كائن CultureInfo باستخدام أحد التحميلات الزائدة الخاصة بالمُنشئ التي تقبل معامل useUserOverride ، و قم بتعيين هذا المعامل إلى false. يؤدي هذا الإعداد إلى منع إعداد العملة الافتراضية في نظام التشغيل الخاص بالمستخدم بواسطة الإعداد الافتراضي الصحيح لـ .NET Framework.

في التعليمات البرمجية لخدمة الويب XML التالية يقوم أسلوب خدمة الويب XML: UserLocalSetting بتعيين خاصية: CurrentCulture إلى الفرنسية (فرنسا) "fr - FR" و استرداد عدد صحيح بتنسيق العملة. بسبب الاختلافات بين نظم التشغيل، لا يمكنك التأكد ما إذا كان سيتم استخدام رمز اليورو أم رمز "F". يقوم أسلوب خادم الويب: OverrideUserSetting بتعيين خاصية: CurrentCulture إلى "fr - FR" باستخدام المنشئ: CultureInfo الذي يقبل معلمة: useUserOverride بإعداد false. يسترد هذا الأسلوب عدد صحيح بتنسيق العملة. في هذه الحالة، يمكنك التأكد أنه سيتم استخدام رمز اليورو لأنه الرمز الافتراضي لـ .NET Framework.

 [Visual Basic]
<%@ WebService Language="VB" Class="userOverrideSample" %>

Imports System
Imports System.Web.Services
Imports System.Globalization
Imports System.Threading

Public Class userOverrideSample

   <WebMethod> _
   Public Function UserLocalSetting() As String
      Dim i As Integer = 100

      ' Sets the CurrentCulture to French in France.
      Thread.CurrentThread.CurrentCulture = New CultureInfo("fr-FR")
      ' Displays i formatted as currency for the CurrentCulture.
      ' Due to operating system differences, you cannot be sure what currency
      ' symbol will be used.
      return (i.ToString("c"))
   End Function

   <WebMethod> _
   Public Function OverrideUserSetting() As String
      Dim i As Integer = 100

      ' Sets the CurrentCulture to French in France.
      ' Uses the CultureInfo constructor that takes a 
      ' useUserOverride parameter.
      ' Sets the useUserOverride value to false.
      Thread.CurrentThread.CurrentCulture = New CultureInfo("fr-FR", _
         false)
      ' Displays i formatted as currency for the CurrentCulture.
      ' This will override any user settings and display the euro symbol.
      return (i.ToString("c"))
   End Function 
End Class
<%@ WebService Language="c#" Class="userOverrideSample" %>

using System;
using System.Web.Services;
using System.Globalization;
using System.Threading;

public class userOverrideSample
{
   [WebMethod]
   public String UserLocalSetting()
   {
      int i = 100;

      // Sets the CurrentCulture to French in France.
      Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");
      // Displays i formatted as currency for the CurrentCulture.
      // Due to operating system differences, you cannot be sure what currency
      // symbol will be used.
      return (i.ToString("c"));
   }   
   
   [WebMethod]
   public String OverrideUserSetting()
   {
      int i = 100;

      // Sets the CurrentCulture to French in France.
      // Uses the CultureInfo constructor that takes a 
      // useUserOverride parameter.
      // Sets the useUserOverride value to false.
      Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR", _
         false);
      // Displays i formatted as currency for the CurrentCulture.
      // This will override any user settings and display the euro symbol.
      return (i.ToString("c"));
   }
}

تقوم Windows Forms و تطبيقات وحدة التحكم التي تعمل على كافة إصدارات أنظمة التشغيل Windows بتعيين رمز العملة الافتراضي من الإعدادات الموجودة على جهاز الكمبيوتر الخاص بالمستخدم. كما ذُكر سابقاً، قد يكون هذا الإعداد غير صحيح. لضمان استخدام الإعدادات الافتراضية .NET Framework، يجب على التطبيق الخاص بك إنشاء كائن CultureInfo ، عن طريق تمرير معامل useUserOverride تم تعيينه إلى false.

يستخدم المثال التالي تعليمات برمجية مشابهة للمثال السابق. يقوم بتعيين الثقافة الحالية إلى "fr - FR" و يعرض عدد صحيح لوحدة التحكم التي تمت تهيئتها كعملة. يتم استخدام إعدادات العملة المحلية الخاصة بالمستخدم لتنسيق العملة. بعد ذلك، يتم تعيين الثقافة إلى "fr - FR" باستخدام المنشئ: CultureInfo الذي يقبل معامل useUserOverride الذي تم تعيينه إلى false. ثم يتم تنسيق الرقم باستخدام الإعدادات الافتراضية الخاصة بـ .NET Framework، و يتم عرض رمز عملة اليورو.

 [Visual Basic]
Imports System
Imports System.Globalization
Imports System.Threading

Public Class EuroSymbolSample
   Public Shared Sub Main()
      Dim i As Integer = 100
      
      ' Sets the CurrentCulture to French in France.
      Thread.CurrentThread.CurrentCulture = New CultureInfo("fr-FR")
      ' Displays i formatted as currency for the CurrentCulture.
      ' On a version of Windows prior to Windows XP, where the user
      ' has not changed the default currency to euro through the
      ' Control Panel, this will default to "F".
      Console.WriteLine(i.ToString("c"))
      
      
      ' Sets the CurrentCulture to French in France, using the
      ' CultureInfo constructor that takes a useUserOverride parameter.
      ' Sets the useUserOverride value to false. 
      Thread.CurrentThread.CurrentCulture = New CultureInfo("fr-FR", _ 
         False)
      ' Displays i formatted as default currency for the CurrentCulture.
      ' On a version of Windows prior to Windows XP, this will override an
      ' incorrect default setting of "F" and display the euro symbol ().
      Console.WriteLine(i.ToString("c"))
   End Sub
End Class
using System;
using System.Globalization;
using System.Threading;

public class EuroSymbolSample
{
   public static void Main()
   {
      int i = 100;

      // Sets the CurrentCulture to French in France.
      Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");
      // Displays i formatted as default currency for the CurrentCulture.
      // On a version of Windows prior to Windows XP, where the user
      // has not changed the default currency to euro through the
      // Control Panel, this will default to "F".
      Console.WriteLine(i.ToString("c"));

      // Sets the CurrentCulture to French in France, using the
      // CultureInfo constructor that takes a useUserOverride parameter.
      // Sets the useUserOverride value to false. 
      Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR", 
            false);
      // Displays i formatted as default currency for the CurrentCulture.
      // On a version of Windows prior to Windows XP, this will override an
      // incorrect default setting of "F" and display the euro symbol ().
      Console.WriteLine(i.ToString("c"));      
   }
} 

لاحظ أن بيئة وحدة التحكم لا تدعم حرف اليورو. في حالة تنفيذ التعليمات البرمجية في تطبيق Windows Forms ، يظهر المخرج كما يلي:

100,00 F
100,00 €

تقوم العديد من البلاد الأوروبية باستخدام عملتين: عملة اليورو و العملة المحلية. قد يكون هناك حالات حيث يكون من الضروري عرض كلا العملتين في أحد التطبيقات. يقوم مثال التعليمات البرمجية التالي بإنشاء كائن CultureInfo للثقافة "fr - FR" حيث العملة الافتراضية هي اليورو. لعرض رمز العملة للعملة المحلية، يجب استخدام أسلوب: NumberFormatInfo.Clone لاستنساخ NumberFormatInfo جديد للـ CultureInfo و استبدال رمز العملة المحلية برمز العملة الافتراضي.

Imports System
Imports System.Globalization
Imports System.Threading

Public Class EuroLocalSample
   Public Shared Sub Main()
      ' Creates a CultureInfo for French in France.
      Dim FrCulture As New CultureInfo("fr-FR")
      ' Sets the CurrentCulture to fr-FR.
      Thread.CurrentThread.CurrentCulture = FrCulture
      
      ' Clones the NumberFormatInfo and creates
      ' a new object for the local currency of France.
      Dim LocalFormat As NumberFormatInfo =_
         CType(NumberFormatInfo.CurrentInfo.Clone(), NumberFormatInfo)
      ' Replaces the default currency symbol 
      ' with the local currency symbol.
      LocalFormat.CurrencySymbol = "F"
      
      Dim i As Integer = 100
      ' Displays i formatted as the local currency.
      Console.WriteLine(i.ToString("c", LocalFormat))
      
      ' Displays i formatted as the default currency.
      Console.WriteLine(i.ToString("c", NumberFormatInfo.CurrentInfo))
   End Sub
End Class 
using System;
using System.Globalization;
using System.Threading;

public class EuroLocalSample
{
   public static void Main()
   {             
      // Creates a CultureInfo for French in France.
      CultureInfo FrCulture = new CultureInfo("fr-FR");
      // Sets the CurrentCulture to fr-FR.
      Thread.CurrentThread.CurrentCulture = FrCulture;

      // Clones the NumberFormatInfo and creates
      // a new object for the local currency of France.
      NumberFormatInfo LocalFormat = 
         (NumberFormatInfo)NumberFormatInfo.CurrentInfo.Clone();
      // Replaces the default currency symbol with the 
      // local currency symbol.
      LocalFormat.CurrencySymbol = "F";

      int i = 100;

      // Displays i formatted as the local currency.
      Console.WriteLine(i.ToString("c", LocalFormat));

      // Displays i formatted as the default currency.
      Console.WriteLine(i.ToString("c", NumberFormatInfo.CurrentInfo));
   }
}

للإطلاع على مثال، راجع العينة MultiCurrency في المهام العامة لـ QuickStart.

راجع أيضًا:

موارد أخرى

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

أنواع التنسيق

تنسيق Cultures مختلفة