فهم الأرقام الدولية والعملات
شرح النقود المحلية!
المال: التوطين (L10n) والتدويل (i18n)
ليست مجرد كلمات للتفوق في لعبة سكرابل، بل يشير التوطين و التدويل إلى عملية جعل المنتج يشعر وكأنه في وطنه في بلد مختلف.
عرض عملة بتنسيق محلي خاطئ هو دليل قاطع: لم تبذل أي جهد.
إذا كنت لا تستطيع تنسيق سعر، فكيف ستتعامل مع الشحن؟
التدويل موضوع كبير، يغطي كل شيء من ترجمة النصوص إلى تنسيق التواريخ. في هذه المقالة سنركز على موضوع فرعي معين، تنسيق الأرقام والعملات.
دعنا نستكشف التنسيق بين 3 دول من منطقة اليورو، والولايات المتحدة والهند:
€1,234,567.89أيرلندا 🇮🇪1.234.567,89 €ألمانيا 🇩🇪1 234 567,89 €فرنسا 🇫🇷$1,234,567.89الولايات المتحدة 🇺🇸₹12,34,567.89الهند 🇮🇳
فوضى! أليس كذلك؟ رموز ومسافات وعلامات ترقيم تتطاير في كل مكان! من المذهل أن يتمكن الاتحاد الأوروبي من الاتفاق على أي شيء! 😅
مفاهيم أساسية
قبل أن نتعمق في الحلول، ماذا نعني بـ “الأرقام محلية”؟
الأرقام محلية 🏘️
كل إعداد محلي (الدولة حسب ISO 3166) يحدد قواعد تنسيق الأرقام.
تتضمن قواعد تنسيق الأرقام:
- الفاصل العشري: فاصلة، نقطة.
- فاصل الآلاف: فاصلة، نقطة، مسافة.
- موضع رمز العملة والتباعد.
العملة عالمية 🌎
العملة تشير إلى وحدة نقدية محددة. (انظر ISO 4217 للقائمة.)
- تحدد رمزًا:
$،€،£،¥. (غالبًا ما يُعاد استخدامه.) - دائمًا ما يكون لها رمز مكون من 3 أحرف:
USD،EUR،GBP،JPY. - يمكن استخدامها/تبادلها في “أي” دولة. نظريًا.
- التحويل بين العملات يتطلب بيانات سعر الصرف.
- القيمة لا تتغير بناءً على الإعداد المحلي.
متى يكون الإعداد المحلي مهمًا
معظم واجهات برمجة تطبيقات REST للتجارة الإلكترونية/الدفع تتعامل مع price + currencyCode. لماذا لا توجد إعدادات محلية؟
الإعدادات المحلية تُضبط (عادةً) على مستوى نظام التشغيل/الجهاز، وتجعلها المتصفحات متاحة عبر navigator.language. نظرًا لأن كل مستخدم من مستخدميك قد يكون لديه إعداد محلي مختلف، فمن المنطقي فقط تنسيق الأرقام والعملة على جانب العميل.
حل
حسنًا، أخبار سارة! لغات البرمجة الحديثة تدعم هذا بشكل مدمج. في جافا سكريبت، لدينا الفئة Intl و Intl.NumberFormat!
لنلقِ نظرة على بعض الأكواد:
const number = 1_234_567.89;
/** * Format a number in local currency. * @param {number} amount - The amount to format. * @param {string} currency - The 3-letter currency code. * @param {string} [locale] - The users locale string. */const formatMoney = (amount, currency, locale = navigator.language) => new Intl.NumberFormat(locale, { currency, style: 'currency' }) .format(amount);
console.log('🇩🇪 ' + formatMoney(number, 'EUR', 'de-DE'));console.log('🇮🇪 ' + formatMoney(number, 'EUR', 'ga-IE'));console.log('🇫🇷 ' + formatMoney(number, 'EUR', 'fr-FR'));إذا كنت بحاجة إلى إجراء عمليات أكثر تعقيدًا، مثل حساب الضرائب، أو تطبيق الخصومات، أو التحويل بين العملات، فستحتاج إلى استخدام مكتبة مثل dinero.js.
الخطوات التالية
اعتمادًا على احتياجاتك الخاصة، قد ترغب في استكشاف مفاهيم ذات صلة:
- أفضل الممارسات مع الإعداد المحلي للمستخدم. الكشف + السماح بالتجاوزات. (مثل قائمة منسدلة للدولة.)
- تخزين الأعداد الصحيحة كاملة (خزّن السنتات، وليس الدولارات.)
- حسابات المال. (مثل تطبيق كوبون خصم
20%، حسابsubTotal + الضرائب، إلخ.) - أسعار الصرف الحية. (للمشتريات بالتجزئة، صرف العملات الأجنبية.)
أخبرني إذا كنت ترغب في رؤية مقال مستقبلي حول هذه المواضيع!
جافا سكريبت / تايب سكريبت
- dinero.js تدعم العمليات الحسابية على المال، أسعار الصرف، التنسيق، والتحليل!
Rust
- rusty_money هي مكتبتي المفضلة في Rust.
Go
- currency هو اختياري الحالي في Golang. */