Django 2.1 - Format localization

स्थानीयकरण प्रारूपित करें




django

स्थानीयकरण प्रारूपित करें

अवलोकन

Django का फ़ॉर्मेटिंग सिस्टम वर्तमान locale लिए निर्दिष्ट प्रारूप का उपयोग करके टेम्प्लेट में दिनांक, समय और संख्या प्रदर्शित करने में सक्षम है। यह रूपों में स्थानीयकृत इनपुट को भी संभालता है।

जब यह सक्षम हो जाता है, तो एक ही सामग्री को एक्सेस करने वाले दो उपयोगकर्ता दिनांक, समय और संख्याओं को विभिन्न तरीकों से स्वरूपित करके देख सकते हैं, जो कि उनके वर्तमान स्थान के स्वरूपों पर निर्भर करता है।

स्वरूपण प्रणाली डिफ़ॉल्ट रूप से अक्षम है। इसे सक्षम करने के लिए, अपनी सेटिंग फ़ाइल में USE_L10N = True सेट करना आवश्यक है।

ध्यान दें

django-admin startproject द्वारा बनाई गई डिफ़ॉल्ट django-admin startproject फ़ाइल में USE_L10N = True सुविधा के लिए सही शामिल है। हालाँकि, ध्यान दें कि हजार विभाजकों के साथ संख्या स्वरूपण को सक्षम करने के लिए आपकी सेटिंग फ़ाइल में USE_THOUSAND_SEPARATOR = True सेट करना आवश्यक है। वैकल्पिक रूप से, आप अपने टेम्पलेट में संख्याओं को intcomma करने के लिए intcomma का उपयोग कर सकते हैं।

ध्यान दें

एक स्वतंत्र लेकिन संबंधित USE_I18N सेटिंग है जो नियंत्रित करता है कि क्या Django अनुवाद को सक्रिय करे। अधिक विवरण के लिए Translation देखें।

रूपों में लोकेल अवगत इनपुट

जब स्वरूपण सक्षम हो जाता है, तो रूपों में दिनांक, समय और संख्याओं को पार्स करते समय, Django स्थानीय स्वरूपों का उपयोग कर सकता है। इसका मतलब है कि यह विभिन्न लोकेशन के लिए अलग-अलग फॉर्मेट की कोशिश करता है, जब फॉर्म में डेटा इनपुट करते समय उपयोगकर्ता द्वारा उपयोग किए जाने वाले फॉर्मेट का अनुमान लगाया जाता है।

ध्यान दें

Django डेटा को प्रदर्शित करने के लिए विभिन्न स्वरूपों का उपयोग करता है जो इसे पार्सिंग डेटा के लिए उपयोग करता है। विशेष रूप से, पार्सिंग तिथियों के प्रारूप %a (संक्षिप्त सप्ताह का नाम), %A (पूर्ण कार्यदिवस का नाम), %b (संक्षिप्त माह का नाम), %B (पूर्ण माह का नाम), या %p (AM) का उपयोग नहीं कर सकते हैं / PM)।

इनपुट और आउटपुट डेटा को स्थानीयकृत करने के लिए फ़ॉर्म फ़ील्ड को सक्षम करने के लिए बस इसके localize तर्क का उपयोग करें:

class CashRegisterForm(forms.Form):
   product = forms.CharField()
   revenue = forms.DecimalField(max_digits=4, decimal_places=2, localize=True)

टेम्पलेट्स में स्थानीयकरण को नियंत्रित करना

जब आपने USE_L10N साथ फ़ॉर्मेटिंग को सक्षम किया है, तो जब भी टेम्प्लेट में कोई मान USE_L10N , तो Django एक स्थानीय विशिष्ट प्रारूप का उपयोग करने का प्रयास करेगा।

हालाँकि, यह हमेशा स्थानीय मानों का उपयोग करने के लिए उपयुक्त नहीं हो सकता है - उदाहरण के लिए, यदि आप जावास्क्रिप्ट या एक्सएमएल आउटपुट कर रहे हैं जो मशीन-पठनीय होने के लिए डिज़ाइन किया गया है, तो आप हमेशा गैर-मान्यता प्राप्त मान चाहते हैं। आप हर जगह स्थानीयकरण का उपयोग करने के बजाय, चयनित टेम्प्लेट में स्थानीयकरण का उपयोग करना चाह सकते हैं।

स्थानीयकरण के उपयोग पर ठीक नियंत्रण की अनुमति देने के लिए, Django l10n टेम्पलेट लाइब्रेरी प्रदान करता है जिसमें निम्नलिखित टैग और फ़िल्टर होते हैं।

टेम्प्लेट टैग

localize

निहित ब्लॉक में टेम्पलेट चर के स्थानीयकरण को सक्षम या अक्षम करता है।

यह टैग USE_L10N तुलना में स्थानीयकरण के अधिक महीन दानेदार नियंत्रण की अनुमति देता है।

टेम्पलेट ब्लॉक के लिए स्थानीयकरण को सक्रिय या निष्क्रिय करना, उपयोग करें:

{% load l10n %}

{% localize on %}
    {{ value }}
{% endlocalize %}

{% localize off %}
    {{ value }}
{% endlocalize %}

ध्यान दें

USE_L10N का मान {% localize %} ब्लॉक के अंदर सम्मानित नहीं है।

टेम्प्लेट फ़िल्टर के लिए localize और unlocalize देखें जो प्रति-चर आधार पर समान कार्य करेगा।

खाका फिल्टर

localize

एक मूल्य का स्थानीयकरण मजबूर करता है।

उदाहरण के लिए:

{% load l10n %}

{{ value|localize }}

एकल मान पर स्थानीयकरण को अक्षम करने के लिए, unlocalize उपयोग unlocalize । किसी खाके के बड़े हिस्से पर स्थानीयकरण को नियंत्रित करने के लिए, localize खाके का उपयोग करें।

unlocalize

स्थानीयकरण के बिना एक ही मूल्य मुद्रित करने के लिए मजबूर करता है।

उदाहरण के लिए:

{% load l10n %}

{{ value|unlocalize }}

किसी एकल मान के स्थानीयकरण को बाध्य करने के लिए, स्थानीयकरण का उपयोग करें। किसी खाके के बड़े हिस्से पर स्थानीयकरण को नियंत्रित करने के लिए, localize खाके का उपयोग करें।

कस्टम प्रारूप फ़ाइलें बनाना

Django कई स्थानों के लिए प्रारूप परिभाषा प्रदान करता है, लेकिन कभी-कभी आप अपना स्वयं का निर्माण करना चाह सकते हैं, क्योंकि एक प्रारूप फ़ाइलें आपके स्थान के लिए मौजूद नहीं होती हैं, या क्योंकि आप कुछ मानों को अधिलेखित करना चाहते हैं।

कस्टम स्वरूपों का उपयोग करने के लिए, उस पथ को निर्दिष्ट करें जहाँ आप प्रारूप फ़ाइलों को पहले रखेंगे। ऐसा करने के लिए, बस अपनी FORMAT_MODULE_PATH सेटिंग को उस पैकेज पर सेट करें जहाँ प्रारूप फाइलें मौजूद होंगी, उदाहरण के लिए:

FORMAT_MODULE_PATH = [
    'mysite.formats',
    'some_app.formats',
]

फ़ाइलों को सीधे इस निर्देशिका में नहीं रखा जाता है, लेकिन एक निर्देशिका में जिसे लोकेल नाम दिया गया है, और उन्हें formats.py नाम दिया जाना चाहिए। इन फ़ाइलों में संवेदनशील जानकारी न रखने के लिए सावधान रहें क्योंकि यदि आप स्ट्रिंग को django.utils.formats.get_format() ( date टेम्पलेट फ़िल्टर द्वारा उपयोग किया जाता है django.utils.formats.get_format() अंदर मान उजागर कर सकते हैं।

अंग्रेजी प्रारूपों को अनुकूलित करने के लिए, इस तरह की संरचना की आवश्यकता होगी:

mysite/
    formats/
        __init__.py
        en/
            __init__.py
            formats.py

जहाँ formats.py में कस्टम प्रारूप परिभाषाएँ होती हैं। उदाहरण के लिए:

THOUSAND_SEPARATOR = '\xa0'

अंग्रेजी के लिए डिफ़ॉल्ट के बजाय एक हजार विभाजक के रूप में एक गैर-ब्रेकिंग स्पेस (यूनिकोड 00A0 ) का उपयोग करना।

प्रदान किए गए स्थानीय स्वरूपों की सीमाएं

कुछ स्थान संख्याओं के लिए संदर्भ-संवेदनशील स्वरूपों का उपयोग करते हैं, जिन्हें Django का स्थानीयकरण सिस्टम स्वचालित रूप से संभाल नहीं सकता है।

स्विट्जरलैंड (जर्मन)

स्विस संख्या प्रारूपण उस संख्या के प्रकार पर निर्भर करता है जिसे स्वरूपित किया जा रहा है। मौद्रिक मूल्यों के लिए, कॉमा को हजार विभाजक और दशमलव विभाजक के लिए दशमलव बिंदु के रूप में उपयोग किया जाता है। अन्य सभी नंबरों के लिए, कॉमा को दशमलव विभाजक और हजार विभाजक के रूप में एक स्थान के रूप में उपयोग किया जाता है। Django द्वारा प्रदान किए गए स्थानीय प्रारूप में सामान्य विभाजक, दशमलव के लिए एक अल्पविराम और हजार विभाजकों के लिए एक स्थान का उपयोग किया जाता है।