Python 3.7 - locale

लोकेल - अंतर्राष्ट्रीयकरण सेवाएं




python

लोकेल - अंतर्राष्ट्रीयकरण सेवाएं

स्रोत कोड: Lib/locale.py

locale मॉड्यूल, POSIX लोकेल डेटाबेस और कार्यक्षमता तक पहुँच खोलता है। POSIX लोकेल मैकेनिज्म प्रोग्रामर को एक एप्लिकेशन में कुछ सांस्कृतिक मुद्दों से निपटने की अनुमति देता है, बिना प्रोग्रामर को प्रत्येक देश की सभी बारीकियों को जानने की आवश्यकता होती है जहां सॉफ्टवेयर निष्पादित होता है।

locale मॉड्यूल _locale मॉड्यूल के शीर्ष पर लागू किया जाता है, जो बदले में उपलब्ध होने पर ANSI C लोकेल कार्यान्वयन का उपयोग करता है।

locale मॉड्यूल निम्नलिखित अपवाद और कार्यों को परिभाषित करता है:

exception locale.Error

अपवाद को तब उठाया गया जब लोकल setlocale() पारित हो गया है।

locale.setlocale(category, locale=None)

यदि लोकेल दिया जाता है और कोई None , तो setlocale() श्रेणी के लिए लोकेल सेटिंग को संशोधित करता है। उपलब्ध श्रेणियां नीचे दिए गए डेटा विवरण में सूचीबद्ध हैं। लोकेल एक स्ट्रिंग, या दो तार (भाषा कोड और एन्कोडिंग) का पुनरावृत्ति हो सकती है। यदि यह एक चलने योग्य है, तो यह लोकेल एलियासिंग इंजन का उपयोग करके एक स्थानीय नाम में परिवर्तित हो जाता है। एक खाली स्ट्रिंग उपयोगकर्ता की डिफ़ॉल्ट सेटिंग्स को निर्दिष्ट करती है। यदि लोकेल का संशोधन विफल हो जाता है, तो अपवाद Error को उठाया जाता है। सफल होने पर, नया लोकल सेटिंग लौटाया जाता है।

यदि लोकेल को छोड़ दिया गया है या None , तो श्रेणी के लिए वर्तमान सेटिंग वापस आ जाती है

setlocale() अधिकांश सिस्टम पर थ्रेड-सुरक्षित नहीं है। आमतौर पर एप्लिकेशन कॉल के साथ शुरू होते हैं

import locale
locale.setlocale(locale.LC_ALL, '')

यह उपयोगकर्ता की डिफ़ॉल्ट सेटिंग (आमतौर पर LANG पर्यावरण चर में निर्दिष्ट) के लिए सभी श्रेणियों के लिए स्थान निर्धारित करता है। यदि उसके बाद लोकेल नहीं बदली जाती है, तो मल्टीथ्रेडिंग का उपयोग करने से समस्या नहीं होनी चाहिए।

locale.localeconv()

शब्दकोश के रूप में स्थानीय सम्मेलनों का डेटाबेस लौटाता है। इस शब्द की कुंजी के रूप में निम्नलिखित तार हैं:

वर्ग कुंजी अर्थ
LC_NUMERIC 'decimal_point' दशांश बिंदु वर्ण।
'grouping' संख्याओं का अनुक्रम निर्दिष्ट करता है कि कौन सा सापेक्ष स्थिति 'thousands_sep' की उम्मीद है। यदि अनुक्रम CHAR_MAX साथ समाप्त हो CHAR_MAX , तो आगे कोई समूहीकरण नहीं किया जाता है। यदि अनुक्रम 0 समाप्त होता है, तो अंतिम समूह आकार का बार-बार उपयोग किया जाता है।
'thousands_sep' समूहों के बीच प्रयुक्त वर्ण।
LC_MONETARY 'int_curr_symbol' अंतर्राष्ट्रीय मुद्रा प्रतीक।
'currency_symbol' स्थानीय मुद्रा प्रतीक।
'p_cs_precedes/n_cs_precedes' चाहे मुद्रा प्रतीक मूल्य से पहले (सकारात्मक सम्मान के लिए। नकारात्मक मूल्य)।
'p_sep_by_space/n_sep_by_space' चाहे मुद्रा प्रतीक एक स्थान से मूल्य से अलग हो (सकारात्मक सम्मान के लिए। नकारात्मक मूल्य)।
'mon_decimal_point' मौद्रिक मूल्यों के लिए उपयोग किया जाने वाला दशमलव बिंदु।
'frac_digits' मौद्रिक मूल्यों के स्थानीय स्वरूपण में उपयोग किए जाने वाले भिन्नात्मक अंकों की संख्या।
'int_frac_digits' मौद्रिक मूल्यों के अंतर्राष्ट्रीय स्वरूपण में उपयोग किए जाने वाले भिन्नात्मक अंकों की संख्या।
'mon_thousands_sep' मौद्रिक मूल्यों के लिए समूह विभाजक का उपयोग किया जाता है।
'mon_grouping' मौद्रिक मूल्यों के लिए प्रयुक्त 'grouping' समतुल्य।
'positive_sign' प्रतीक एक सकारात्मक मौद्रिक मूल्य को एनोटेट करने के लिए उपयोग किया जाता है।
'negative_sign' एक नकारात्मक मौद्रिक मूल्य को एनोटेट करने के लिए प्रतीक का उपयोग किया जाता है।
'p_sign_posn/n_sign_posn' संकेत की स्थिति (सकारात्मक सम्मान के लिए। नकारात्मक मूल्य), नीचे देखें।

सभी सांख्यिक मान CHAR_MAX यह इंगित करने के लिए सेट किए जा सकते हैं कि इस स्थान में कोई मान निर्दिष्ट नहीं है।

'p_sign_posn' और 'n_sign_posn' संभावित मूल्य नीचे दिए गए हैं।

मूल्य व्याख्या
0 मुद्रा और मूल्य कोष्ठक से घिरा हुआ है।
1 चिह्न को मूल्य और मुद्रा प्रतीक से पहले होना चाहिए।
2 संकेत को मूल्य और मुद्रा प्रतीक का पालन करना चाहिए।
3 संकेत को तुरंत मूल्य से पहले होना चाहिए।
4 संकेत को तुरंत मान का पालन करना चाहिए।
CHAR_MAX इस स्थान में कुछ भी निर्दिष्ट नहीं है।

फ़ंक्शन अस्थायी रूप से LC_CTYPE लोकेल को LC_NUMERIC लोकेल में decimal_point और decimal_point बाइट स्ट्रिंग्स को सेट करने के लिए सेट करता है, यदि वे गैर-ASCII या 1 बाइट से अधिक लंबे हों, और LC_NUMERIC लोकेल, LC_NUMERIC लोकेल से भिन्न हो। यह अस्थायी परिवर्तन अन्य थ्रेड्स को प्रभावित करता है।

संस्करण 3.7 में परिवर्तित: फ़ंक्शन अब कुछ मामलों में LC_CTYPE लोकेल को अस्थायी रूप से LC_CTYPE स्थान पर सेट करता है।

locale.nl_langinfo(option)

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

nl_langinfo() फ़ंक्शन निम्न कुंजियों में से एक को स्वीकार करता है। अधिकांश विवरण GNU C लाइब्रेरी में संबंधित विवरण से लिए गए हैं।

locale.CODESET

चयनित लोकेल में उपयोग किए गए वर्ण एन्कोडिंग के नाम के साथ एक स्ट्रिंग प्राप्त करें।

locale.D_T_FMT

एक स्ट्रिंग प्राप्त करें जिसे स्थानीय-विशिष्ट तरीके से दिनांक और समय का प्रतिनिधित्व करने के लिए time.strftime() लिए प्रारूप स्ट्रिंग के रूप में उपयोग किया जा सकता है।

locale.D_FMT

एक स्ट्रिंग प्राप्त करें जिसे स्थानीय-विशिष्ट तरीके से दिनांक का प्रतिनिधित्व करने के लिए time.strftime() लिए प्रारूप स्ट्रिंग के रूप में उपयोग किया जा सकता है।

locale.T_FMT

एक स्ट्रिंग प्राप्त करें जिसे स्थानीय-विशिष्ट तरीके से समय का प्रतिनिधित्व करने के लिए time.strftime() लिए प्रारूप स्ट्रिंग के रूप में उपयोग किया जा सकता है।

locale.T_FMT_AMPM

Am / pm प्रारूप में समय का प्रतिनिधित्व करने के लिए time.strftime() लिए एक प्रारूप स्ट्रिंग प्राप्त करें।

DAY_1 ... DAY_7

सप्ताह के n-वें दिन का नाम प्राप्त करें।

ध्यान दें

यह DAY_1 का अमेरिकी सम्मेलन रविवार को हो रहा है, न कि अंतर्राष्ट्रीय सम्मेलन (आईएसओ 8601) जो सोमवार को सप्ताह का पहला दिन है।

ABDAY_1 ... ABDAY_7

सप्ताह के n-वें दिन का संक्षिप्त नाम प्राप्त करें।

MON_1 ... MON_12

एन-वें महीने का नाम प्राप्त करें।

ABMON_1 ... ABMON_12

एन-वें महीने का संक्षिप्त नाम प्राप्त करें।

locale.RADIXCHAR

मूलांक वर्ण (दशमलव डॉट, दशमलव अल्पविराम, आदि) प्राप्त करें।

locale.THOUSEP

हजारों (तीन अंकों के समूह) के लिए विभाजक चरित्र प्राप्त करें।

locale.YESEXPR

एक रेगुलर एक्सप्रेशन प्राप्त करें जिसका उपयोग रेक्सक्स फ़ंक्शन के साथ हां / ना प्रश्न के सकारात्मक जवाब को पहचानने के लिए किया जा सकता है।

ध्यान दें

अभिव्यक्ति सी लाइब्रेरी से regex() फ़ंक्शन के लिए उपयुक्त सिंटैक्स में है, जो re उपयोग किए गए सिंटैक्स से भिन्न हो सकती है।

locale.NOEXPR

एक रेगुलर एक्सप्रेशन प्राप्त करें जिसका उपयोग रेगेक्स (3) फ़ंक्शन के साथ एक हां / ना प्रश्न के नकारात्मक जवाब को पहचानने के लिए किया जा सकता है।

locale.CRNCYSTR

करेंसी प्रतीक प्राप्त करें, "-" से पहले यदि प्रतीक मूल्य से पहले दिखाई दे, तो "+" यदि प्रतीक मान के बाद दिखाई दे, या "।" यदि प्रतीक को मूलांक वर्ण से बदलना चाहिए।

locale.ERA

एक स्ट्रिंग प्राप्त करें जो वर्तमान लोकेल में उपयोग किए गए युग का प्रतिनिधित्व करता है।

अधिकांश स्थान इस मान को परिभाषित नहीं करते हैं। इस मूल्य को परिभाषित करने वाले एक लोकेल का एक उदाहरण जापानी है। जापान में, तिथियों के पारंपरिक प्रतिनिधित्व में तत्कालीन सम्राट के शासन के अनुरूप युग का नाम शामिल है।

आम तौर पर इस मूल्य का सीधे उपयोग करना आवश्यक नहीं होना चाहिए। E time.strftime() को उनके प्रारूप स्ट्रिंग्स में निर्दिष्ट करना इस जानकारी का उपयोग करने के लिए time.strftime() फ़ंक्शन का कारण बनता है। लौटी हुई स्ट्रिंग का प्रारूप निर्दिष्ट नहीं है, और इसलिए आपको विभिन्न प्रणालियों पर इसका ज्ञान ग्रहण नहीं करना चाहिए।

locale.ERA_D_T_FMT

स्थानीय-विशिष्ट युग-आधारित तरीके से दिनांक और समय का प्रतिनिधित्व करने के लिए time.strftime() लिए एक प्रारूप स्ट्रिंग प्राप्त करें।

locale.ERA_D_FMT

स्थानीय-विशिष्ट युग-आधारित तरीके से दिनांक का प्रतिनिधित्व करने के लिए time.strftime() लिए एक प्रारूप स्ट्रिंग प्राप्त करें।

locale.ERA_T_FMT

स्थानीय-विशिष्ट युग-आधारित तरीके से समय का प्रतिनिधित्व करने के लिए time.strftime() लिए एक प्रारूप स्ट्रिंग प्राप्त करें।

locale.ALT_DIGITS

0 से 99 तक के मूल्यों का प्रतिनिधित्व करने के लिए उपयोग किए जाने वाले 100 मानों का प्रतिनिधित्व प्राप्त करें।

locale.getdefaultlocale([envvars])

डिफ़ॉल्ट लोकेल सेटिंग्स को निर्धारित करने की कोशिश करता है और उन्हें फॉर्म (language code, encoding) टपल के रूप में वापस करता है।

POSIX के अनुसार, एक प्रोग्राम जिसे setlocale(LC_ALL, '') नहीं कहा जाता है setlocale(LC_ALL, '') पोर्टेबल 'C' लोकेल का उपयोग करके चलता है। setlocale(LC_ALL, '') कॉल करने से यह LANG चर द्वारा परिभाषित डिफ़ॉल्ट लोकेल का उपयोग कर सकता है। चूंकि हम वर्तमान स्थानीय सेटिंग में हस्तक्षेप नहीं करना चाहते हैं, इसलिए हम ऊपर वर्णित तरीके से व्यवहार का अनुकरण करते हैं।

अन्य प्लेटफार्मों के साथ संगतता बनाए रखने के लिए, न केवल LANG चर का परीक्षण किया जाता है, बल्कि envvars पैरामीटर के रूप में दिए गए चर की सूची। पहले पाया जाने वाला परिभाषित उपयोग किया जाएगा। जीएनयू गेटटेक्स्ट में इस्तेमाल किए गए खोज पथ के लिए एन्वारर्स चूक; इसमें हमेशा परिवर्तनशील नाम 'LANG' होना चाहिए। GNU गेटटेक्स्ट सर्च पथ में 'LC_ALL' , 'LC_CTYPE' , 'LANG' और 'LANGUAGE' , इसी क्रम में।

'C' कोड को छोड़कर, भाषा कोड RFC 1766 से मेल खाती है। यदि उनका मान निर्धारित नहीं किया जा सकता है तो भाषा कोड और एन्कोडिंग None नहीं हो सकता है।

locale.getlocale(category=LC_CTYPE)

दिए गए स्थानीय श्रेणी के लिए वर्तमान सेटिंग को अनुक्रम के रूप में देता है जिसमें भाषा कोड , एन्कोडिंग है श्रेणी LC_* मानों में से एक हो सकती है सिवाय LC_ALL । यह LC_CTYPE को LC_CTYPE

'C' कोड को छोड़कर, भाषा कोड RFC 1766 से मेल खाती है। यदि उनका मान निर्धारित नहीं किया जा सकता है तो भाषा कोड और एन्कोडिंग None नहीं हो सकता है।

locale.getpreferredencoding(do_setlocale=True)

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

कुछ प्रणालियों पर, उपयोगकर्ता वरीयताओं को प्राप्त करने के लिए setlocale() को लागू करना आवश्यक है, इसलिए यह फ़ंक्शन थ्रेड-सुरक्षित नहीं है। यदि सेटलोकेले को लागू करना आवश्यक या वांछित नहीं है, तो do_setlocale को False सेट किया जाना चाहिए।

Android पर या UTF-8 मोड ( -X utf8 विकल्प) में, हमेशा 'UTF-8' लौटाएं , लोकेल और do_setlocale तर्क की अनदेखी की जाती है।

संस्करण 3.7 में परिवर्तित: फ़ंक्शन अब हमेशा Android पर UTF-8 देता है या यदि UTF-8 मोड सक्षम है।

locale.normalize(localename)

दिए गए स्थानीय नाम के लिए एक सामान्यीकृत लोकल कोड देता है। लौटे हुए लोकल कोड को setlocale() साथ उपयोग के लिए स्वरूपित किया गया है। यदि सामान्यीकरण विफल रहता है, तो मूल नाम अपरिवर्तित लौटाया जाता है।

यदि दी गई एन्कोडिंग ज्ञात नहीं है, तो फ़ंक्शन setlocale() तरह ही लोकल कोड के लिए डिफ़ॉल्ट एन्कोडिंग के लिए डिफॉल्ट करता है।

locale.resetlocale(category=LC_ALL)

डिफ़ॉल्ट सेटिंग के लिए श्रेणी के लिए स्थान निर्धारित करता है।

डिफ़ॉल्ट सेटिंग getdefaultlocale() को कॉल करके निर्धारित की जाती है। श्रेणी चूक LC_ALL

locale.strcoll(string1, string2)

मौजूदा LC_COLLATE सेटिंग के अनुसार दो स्ट्रिंग्स की तुलना करें। किसी भी अन्य फ़ंक्शन की तुलना के रूप में, string1 से पहले या बाद में string1 से बराबर होता है या नहीं इसके आधार पर, एक नकारात्मक या एक सकारात्मक मान या 0 देता है।

locale.strxfrm(string)

एक स्ट्रिंग को स्थानीय-जागरूक तुलना में इस्तेमाल किया जा सकता है। उदाहरण के लिए, strxfrm(s1) < strxfrm(s2) strcoll(s1, s2) < 0 बराबर है। जब एक ही तार की तुलना बार-बार की जाती है, तो इस फ़ंक्शन का उपयोग किया जा सकता है, जैसे कि स्ट्रिंग्स के अनुक्रम का मिलान करना।

locale.format_string(format, val, grouping=False, monetary=False)

वर्तमान LC_NUMERIC सेटिंग के अनुसार एक नंबर वैल का प्रारूप। प्रारूप % ऑपरेटर के सम्मेलनों का अनुसरण करता है। फ़्लोटिंग पॉइंट मानों के लिए, दशमलव बिंदु को संशोधित किया जाता है यदि उपयुक्त हो। यदि ग्रुपिंग सही है, तो ग्रुपिंग को भी ध्यान में रखता है।

यदि मौद्रिक सत्य है, तो रूपांतरण मौद्रिक हजारों विभाजक और समूहन तार का उपयोग करता है।

स्वरूपण format % val रूप में निर्दिष्ट स्वरूपण प्रक्रियाएँ, लेकिन वर्तमान स्थानीय सेटिंग्स को ध्यान में रखती हैं।

संस्करण 3.7 में परिवर्तित: मौद्रिक कीवर्ड पैरामीटर जोड़ा गया था।

locale.format(format, val, grouping=False, monetary=False)

कृपया ध्यान दें कि यह फ़ंक्शन format_string() तरह काम करता है, लेकिन केवल एक %char format_string() लिए काम करेगा। उदाहरण के लिए, '%f' और '%.0f' दोनों ही मान्य विनिर्देशक हैं, लेकिन '%f KiB' नहीं है।

पूरे प्रारूप स्ट्रिंग्स के लिए, format_string() उपयोग करें।

संस्करण 3.7 के बाद से पदावनत: इसके बजाय format_string() उपयोग करें।

locale.currency(val, symbol=True, grouping=False, international=False)

वर्तमान LC_MONETARY सेटिंग्स के अनुसार एक नंबर वैल का प्रारूप।

लौटे स्ट्रिंग में मुद्रा प्रतीक शामिल है यदि प्रतीक सत्य है, जो डिफ़ॉल्ट है। यदि समूहन सही है (जो डिफ़ॉल्ट नहीं है), तो मान के साथ समूहीकरण किया जाता है। यदि अंतर्राष्ट्रीय सत्य है (जो डिफ़ॉल्ट नहीं है), अंतर्राष्ट्रीय मुद्रा प्रतीक का उपयोग किया जाता है।

ध्यान दें कि यह फ़ंक्शन 'C' लोकेल के साथ काम नहीं करेगा, इसलिए आपको पहले setlocale() माध्यम से एक लोकेल सेट करना होगा।

locale.str(float)

अंतर्निहित फ़ंक्शन str(float) के समान प्रारूप का उपयोग करके एक फ़्लोटिंग पॉइंट नंबर str(float) , लेकिन दशमलव बिंदु को ध्यान में रखता है।

locale.delocalize(string)

LC_NUMERIC सेटिंग का अनुसरण करते LC_NUMERIC एक स्ट्रिंग को एक सामान्यीकृत संख्या स्ट्रिंग में परिवर्तित करता है।

संस्करण 3.5 में नया।

locale.atof(string)

LC_NUMERIC सेटिंग्स का पालन करते LC_NUMERIC , एक स्ट्रिंग को एक फ्लोटिंग पॉइंट नंबर में LC_NUMERIC

locale.atoi(string)

LC_NUMERIC सम्मेलनों के बाद, एक स्ट्रिंग को एक पूर्णांक में LC_NUMERIC है।

locale.LC_CTYPE

वर्ण प्रकार के कार्यों के लिए स्थान श्रेणी। इस श्रेणी की सेटिंग्स के आधार पर, मामले से निपटने वाले मॉड्यूल string के कार्य उनके व्यवहार को बदलते हैं।

locale.LC_COLLATE

तार छांटने के लिए स्थान श्रेणी। locale मॉड्यूल के कार्य strcoll() और strxfrm() प्रभावित होते हैं।

locale.LC_TIME

समय के प्रारूपण के लिए स्थानीय श्रेणी। फ़ंक्शन time.strftime() इन सम्मेलनों का अनुसरण करता है।

locale.LC_MONETARY

मौद्रिक मूल्यों के प्रारूपण के लिए स्थानीय श्रेणी। उपलब्ध विकल्प localeconv() फ़ंक्शन से उपलब्ध हैं।

locale.LC_MESSAGES

संदेश प्रदर्शन के लिए स्थान श्रेणी। पायथन वर्तमान में एप्लिकेशन विशिष्ट स्थानीय-जागरूक संदेशों का समर्थन नहीं करता है। ऑपरेटिंग सिस्टम द्वारा प्रदर्शित संदेश, जैसे कि os.strerror() द्वारा लौटाए गए लोग इस श्रेणी से प्रभावित हो सकते हैं।

locale.LC_NUMERIC

प्रारूपण संख्याओं के लिए स्थान श्रेणी। locale श्रेणी के फ़ंक्शन format() , atof() atoi() , atof() और atof() उस श्रेणी से प्रभावित होते हैं। अन्य सभी संख्यात्मक स्वरूपण कार्य प्रभावित नहीं होते हैं।

locale.LC_ALL

सभी स्थानीय सेटिंग्स का संयोजन। यदि इस ध्वज का उपयोग स्थान बदलने पर किया जाता है, तो सभी श्रेणियों के लिए स्थान निर्धारित करने का प्रयास किया जाता है। यदि वह किसी भी श्रेणी के लिए विफल रहता है, तो कोई भी श्रेणी बिल्कुल नहीं बदली जाती है। जब इस ध्वज का उपयोग करके लोकेल को पुनर्प्राप्त किया जाता है, तो सभी श्रेणियों के लिए सेटिंग का संकेत करने वाला एक स्ट्रिंग वापस आ जाता है। बाद में सेटिंग्स को पुनर्स्थापित करने के लिए इस स्ट्रिंग का उपयोग किया जा सकता है।

locale.CHAR_MAX

यह एक प्रतीकात्मक स्थिरांक है जिसका उपयोग localeconv() द्वारा लौटाए गए विभिन्न मूल्यों के लिए किया जाता है।

उदाहरण:

>>> import locale
>>> loc = locale.getlocale()  # get current locale
# use German locale; name might vary with platform
>>> locale.setlocale(locale.LC_ALL, 'de_DE')
>>> locale.strcoll('f\xe4n', 'foo')  # compare a string containing an umlaut
>>> locale.setlocale(locale.LC_ALL, '')   # use user's preferred locale
>>> locale.setlocale(locale.LC_ALL, 'C')  # use default (C) locale
>>> locale.setlocale(locale.LC_ALL, loc)  # restore saved locale

पृष्ठभूमि, विवरण, संकेत, सुझाव और चेतावनी

C मानक प्रोग्राम-व्यापी गुण के रूप में लोकेल को परिभाषित करता है जिसे बदलना अपेक्षाकृत महंगा हो सकता है। उसके ऊपर, कुछ कार्यान्वयन इस तरह से टूट जाते हैं कि बार-बार स्थानीय परिवर्तन से कोर डंप हो सकता है। यह सही तरीके से उपयोग करने के लिए स्थान को कुछ दर्दनाक बनाता है।

प्रारंभ में, जब कोई प्रोग्राम शुरू किया जाता है, तो लोकेल C लोकेल होता है, फिर चाहे वह उपयोगकर्ता का पसंदीदा स्थान क्यों न हो। एक अपवाद है: उपयोगकर्ता के पसंदीदा स्थानीय एन्कोडिंग के लिए वर्तमान स्थानीय एन्कोडिंग सेट करने के लिए LC_CTYPE श्रेणी को स्टार्टअप में बदल दिया जाता है। कार्यक्रम को स्पष्ट रूप से कहना चाहिए कि यह setlocale(LC_ALL, '') कहकर अन्य श्रेणियों के लिए उपयोगकर्ता की पसंदीदा स्थानीय सेटिंग्स चाहता है।

आमतौर पर कुछ लाइब्रेरी रूटीन में setlocale() को कॉल करना एक बुरा विचार है, क्योंकि साइड इफेक्ट के रूप में यह पूरे कार्यक्रम को प्रभावित करता है। इसे सहेजना और पुनर्स्थापित करना लगभग उतना ही बुरा है: यह महंगा है और अन्य थ्रेड्स को प्रभावित करता है जो सेटिंग्स को पुनर्स्थापित करने से पहले चलने के लिए होते हैं।

यदि, सामान्य उपयोग के लिए एक मॉड्यूल कोडिंग करते समय, आपको एक ऑपरेशन के स्थानीय स्वतंत्र संस्करण की आवश्यकता होती है जो लोकेल से प्रभावित होता है (जैसे कि time.strftime() साथ उपयोग किए जाने वाले कुछ प्रारूप), तो आपको इसके बिना करने का एक तरीका खोजना होगा मानक पुस्तकालय दिनचर्या का उपयोग करना। इससे भी बेहतर यह है कि आप खुद को समझाएं कि लोकेल सेटिंग का इस्तेमाल करना ठीक है। केवल अंतिम उपाय के रूप में आपको यह दस्तावेज करना चाहिए कि आपका मॉड्यूल गैर- C लोकेल सेटिंग्स के अनुकूल नहीं है।

लोकल के अनुसार संख्यात्मक संचालन करने का एकमात्र तरीका इस मॉड्यूल द्वारा परिभाषित विशेष कार्यों का उपयोग करना है: atof() , atoi() , format() , str()

स्थान के अनुसार केस रूपांतरण और चरित्र वर्गीकरण करने का कोई तरीका नहीं है। (यूनिकोड) टेक्स्ट स्ट्रिंग्स के लिए ये केवल वर्ण मान के अनुसार किए जाते हैं, जबकि बाइट स्ट्रिंग्स के लिए, बाइट्स के ASCII मान के अनुसार रूपांतरण और वर्गीकरण किए जाते हैं, और बाइट्स जिनकी उच्च बिट सेट होती है (यानी, गैर- ASCII बाइट्स ) कभी भी वर्ण या व्हाट्सएप जैसे चरित्र वर्ग का हिस्सा नहीं माना जाता है।

विस्तार लेखकों और कार्यक्रमों के लिए जो पायथन को एम्बेड करते हैं

एक्सटेंशन मॉड्यूल को setlocale() को कभी भी कॉल नहीं करना चाहिए, सिवाय यह जानने के कि वर्तमान लोकेल क्या है। लेकिन चूंकि वापसी मूल्य का उपयोग केवल इसे पुनर्स्थापित करने के लिए ही किया जा सकता है, इसलिए यह बहुत उपयोगी नहीं है (शायद यह पता लगाने के लिए कि क्या लोकेल C है या नहीं)।

जब पायथन कोड locale को बदलने के लिए locale मॉड्यूल का उपयोग करता है, तो यह एम्बेडिंग एप्लिकेशन को भी प्रभावित करता है। यदि एम्बेडिंग अनुप्रयोग ऐसा नहीं चाहता है, तो उसे _locale फ़ाइल में अंतर्निहित मॉड्यूल की तालिका से _locale एक्सटेंशन मॉड्यूल (जो सभी काम करता है) को हटा देना चाहिए और सुनिश्चित करें कि _locale मॉड्यूल नहीं है एक साझा पुस्तकालय के रूप में सुलभ।

संदेश कैटलॉग तक पहुंच

locale.gettext(msg)
locale.dgettext(domain, msg)
locale.dcgettext(domain, msg, category)
locale.textdomain(domain)
locale.bindtextdomain(domain, dir)

लोकल मॉड्यूल सिस्टम पर सी लाइब्रेरी के गेटटेक्स्ट इंटरफ़ेस को उजागर करता है जो इस इंटरफ़ेस को प्रदान करता है। इसमें dgettext() , dcgettext() , textdomain() , bindtextdomain() , bind_textdomain_codeset() और bind_textdomain_codeset() । ये gettext मॉड्यूल में समान फ़ंक्शन के समान हैं, लेकिन संदेश कैटलॉग के लिए सी लाइब्रेरी के बाइनरी प्रारूप और संदेश कैटलॉग का पता लगाने के लिए सी लाइब्रेरी के खोज एल्गोरिदम का उपयोग करते हैं।

पायथन अनुप्रयोगों को आम तौर पर इन कार्यों को लागू करने की कोई आवश्यकता नहीं होनी चाहिए, और इसके बजाय gettext उपयोग करना चाहिए। इस नियम का एक ज्ञात अपवाद ऐसे अनुप्रयोग हैं जो अतिरिक्त C पुस्तकालयों के साथ लिंक करते हैं जो आंतरिक रूप से dcgettext() या dcgettext() । इन अनुप्रयोगों के लिए, पाठ डोमेन को बांधना आवश्यक हो सकता है, ताकि पुस्तकालयों को उनके संदेश कैटलॉग का ठीक से पता चल सके।