अंतर्राष्ट्रीय संख्याओं और मुद्रा को समझना
स्थानीयकृत धन समझाया गया!
धन: स्थानीयकरण (L10n) और अंतर्राष्ट्रीयकरण (i18n)
वे सिर्फ स्क्रेबल के खेल में जीतने के लिए नहीं हैं, स्थानीयकरण और अंतर्राष्ट्रीयकरण किसी उत्पाद को किसी अलग देश में घर जैसा महसूस कराने की प्रक्रिया को संदर्भित करते हैं।
गलत स्थानीय प्रारूप में मुद्रा दिखाना एक स्पष्ट संकेत है: आपने कोई प्रयास नहीं किया है।
यदि आप कीमत प्रारूपित नहीं कर सकते, तो शिपिंग कैसे संभालेंगे?
अंतर्राष्ट्रीयकरण एक बड़ा विषय है, जो पाठ अनुवाद से लेकर दिनांक प्रारूपण तक सब कुछ कवर करता है। इस पोस्ट में हम एक विशेष उपविषय पर ध्यान केंद्रित करेंगे, संख्याओं और मुद्रा को प्रारूपित करना।
आइए 3 यूरोज़ोन देशों, USA और भारत के बीच प्रारूपण का पता लगाएं:
€1,234,567.89आयरलैंड 🇮🇪1.234.567,89 €जर्मनी 🇩🇪1 234 567,89 €फ्रांस 🇫🇷$1,234,567.89USA 🇺🇸₹12,34,567.89भारत 🇮🇳
अराजकता! है न? प्रतीक, रिक्त स्थान और विराम चिह्न सब जगह उड़ रहे हैं! यह अद्भुत है कि EU किसी भी चीज़ पर सहमत कैसे हो पाता है! 😅
महत्वपूर्ण अवधारणाएँ
समाधानों में गोता लगाने से पहले, “संख्याएँ स्थानीय होती हैं” से हमारा क्या तात्पर्य है?
संख्याएँ स्थानीय होती हैं 🏘️
प्रत्येक लोकेल (ISO 3166 प्रति देश) संख्याओं को प्रारूपित करने के नियमों को परिभाषित करता है।
संख्या प्रारूपण नियमों में शामिल हैं:
- दशमलव: अल्पविराम, पूर्ण विराम।
- हज़ार: अल्पविराम, पूर्ण विराम, रिक्त स्थान।
- मुद्रा प्रतीक स्थिति और रिक्त स्थान।
मुद्रा वैश्विक होती है 🌎
एक currency धन की एक विशिष्ट इकाई को संदर्भित करती है। (सूची के लिए ISO 4217 देखें।)
- एक प्रतीक निर्दिष्ट करता है:
$,€,£,¥। (अक्सर पुन: उपयोग किया जाता है।) - हमेशा 3-अक्षरीय कोड होता है:
USD,EUR,GBP,JPY। - किसी भी देश में उपयोग/विनिमय किया जा सकता है। सैद्धांतिक रूप से।
- मुद्राओं के बीच रूपांतरण के लिए विनिमय दर डेटा की आवश्यकता होती है।
- मूल्य लोकेल के आधार पर नहीं बदलता है।
जब लोकेल मायने रखता है
अधिकांश ईकॉमर्स/पेमेंट REST APIs price + currencyCode से निपटते हैं। लोकेल क्यों नहीं?
लोकेल आमतौर पर OS/डिवाइस स्तर पर सेट किए जाते हैं, और ब्राउज़र उन्हें navigator.language के माध्यम से उपलब्ध कराते हैं। चूंकि आपके प्रत्येक उपयोगकर्ता का लोकेल अलग हो सकता है, इसलिए क्लाइंट साइड पर संख्याओं और मुद्रा को प्रारूपित करना ही समझदारी है।
एक समाधान
ठीक है, अच्छी खबर! आधुनिक प्रोग्रामिंग भाषाओं में इसके लिए अंतर्निहित समर्थन है। JavaScript में, हमारे पास 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% offकूपन लागू करना,subTotal + taxesकी गणना करना, आदि।) - लाइव विनिमय दरें। (खुदरा खरीद, फॉरेक्स/मुद्रा विनिमय के लिए।)
मुझे बताएं यदि आप इन विषयों पर भविष्य का लेख देखना चाहेंगे!