[python] पायथन लोकेल त्रुटि: असमर्थित लोकेल सेटिंग



Answers

आपके पास शायद कोई de_DE लोकेल उपलब्ध नहीं है।

आप locale -a कमांड के साथ उपलब्ध locale -a की एक सूची देख सकते हैं। उदाहरण के लिए, मेरी मशीन पर:

$ locale -a
C
C.UTF-8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
it_CH.utf8
it_IT.utf8
POSIX

ध्यान दें कि यदि आप locale को it_IT पर सेट करना चाहते हैं तो आपको it_IT भी निर्दिष्ट करना होगा:

>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'it_IT')   # error!
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/locale.py", line 539, in setlocale
    return _setlocale(category, locale)
locale.Error: unsupported locale setting
>>> locale.setlocale(locale.LC_ALL, 'it_IT.utf8')
'it_IT.utf8'

एक नया लोकेल उपयोग स्थापित करने के लिए:

sudo apt-get install language-pack-id

जहां id भाषा कोड है ( here से लिया गया)

लोकेल स्थापित करने के बाद आपको जूलियन पालार्ड सलाह का पालन करना चाहिए और स्थानीय लोगों को फिर से कॉन्फ़िगर करना चाहिए:

sudo dpkg-reconfigure locales
Question

पायथन में ऐसा करते समय मुझे निम्न त्रुटि क्यों मिलती है:

>>> import locale
>>> print str( locale.getlocale() )
(None, None)
>>> locale.setlocale(locale.LC_ALL, 'de_DE')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/locale.py", line 531, in setlocale
    return _setlocale(category, locale)
locale.Error: unsupported locale setting

यह अन्य स्थानीय लोगों जैसे फ्रैंक या एनएल के साथ भी काम करता है। मैं उबंटू 11.04 का उपयोग कर रहा हूं।

अद्यतन: निम्नलिखित करने से कुछ भी नहीं मिला:

dpkg-reconfigure locales
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LC_CTYPE = "UTF-8",
    LANG = (unset)
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory



अगर मैं आप थे, तो मैं बैबेल का उपयोग करूंगा: http://babel.pocoo.org/en/latest/index.html

मुझे डॉकर का उपयोग करके यहां एक ही समस्या मिली है, मैंने हर एक कदम की कोशिश की है और अच्छी तरह से काम नहीं किया है, हमेशा लोकेल त्रुटि प्राप्त कर रहा है, इसलिए मैंने बैबेल का उपयोग करने का फैसला किया, और सब कुछ ठीक से काम किया।




यदि आप डेबियन (या डेबियन फोर्क) पर हैं, तो आप इसका उपयोग करके स्थानीय जोड़ सकते हैं:

dpkg-reconfigure locales



इसे Dockerfile ऊपर Dockerfile में रखें।

# make the "en_US.UTF-8" locale so postgres will be utf-8 enabled by default
RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* \
    && localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8

ENV LANG en_US.UTF-8



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

जवाब देने में, चीजें मुझे थोड़ा रहस्यमय मिला।

मैंने पाइथन कोड पाया।

import locale
print locale.getdefaultlocale()
>> ('en_DK', 'UTF-8')

और वास्तव में locale.setlocale(locale.LC_TIME, 'en_DK.UTF-8') काम करता है

यहां युक्तियों का उपयोग करके मैंने पाइथन कोड का उपयोग करके क्या उपलब्ध है यह देखने के लिए आगे परीक्षण किया

import locale
loc_list = [(a,b) for a,b in locale.locale_alias.items() ]
loc_size = len(loc_list)
print loc_size,'entries'

for loc in loc_list:
    try:
        locale.setlocale(locale.LC_TIME, loc[1])
        print 'SUCCES set {:12} ({})'.format(loc[1],loc[0])
    except:
        pass

कौन सी पैदावार

858 entries
SUCCES set en_US.UTF-8  (univ)
SUCCES set C            (c.ascii)
SUCCES set C            (c.en)
SUCCES set C            (posix-utf2)
SUCCES set C            (c)
SUCCES set C            (c_c)
SUCCES set C            (c_c.c)
SUCCES set en_IE.UTF-8  (en_ie.utf8@euro)
SUCCES set en_US.UTF-8  (universal.utf8@ucs4)
SUCCES set C            (posix)
SUCCES set C            (english_united-states.437)
SUCCES set en_US.UTF-8  (universal)

जिनमें से केवल ऊपर काम कर रहा है! लेकिन en_DK.UTF-8 इस सूची में नहीं है, हालांकि यह काम करता है!?! क्या?? और पाइथन जेनरेट की गई लोकेल सूची में दा और डीके के बहुत सारे संयोजन होते हैं, जिन्हें मैं ढूंढ रहा हूं, लेकिन दा / डीके के लिए फिर से कोई यूटीएफ -8 नहीं है ...

मैं प्वाइंट लिनक्स डिस्ट्रो (डेबियन आधारित) पर हूं, और यहां locale अन्य LC_TIME="en_DK.UTF-8" बीच कहता है, जिसे मैं जानता हूं, लेकिन मुझे आवश्यक लोकेल नहीं है।

locale -a कहते हैं

C
C.UTF-8
en_DK.utf8
en_US.utf8
POSIX

इसलिए निश्चित रूप से अन्य लोकेल स्थापित करने की आवश्यकता है, जिसे मैंने संपादन /etc/locale.gen द्वारा किया था, /etc/locale.gen आवश्यक लाइन da_DK.UTF-8 UTF-8 और रन कमांड locale-gen

अब locale.setlocale(locale.LC_TIME, 'da_DK.UTF-8') भी काम करता है, और मैं अपना स्थानीय दिन और महीना नाम प्राप्त कर सकता हूं।

मेरा सम्मेलन:

पायथन: locale.locale_alias उपलब्ध लोकेशंस खोजने में सभी सहायक नहीं है !!!

लिनक्स: लोकेल सूची प्राप्त करना और नया लोकेल इंस्टॉल करना काफी आसान है। बहुत सारी मदद उपलब्ध है।

विंडोज़: मैं थोड़ी जांच कर रहा हूं, लेकिन कुछ भी निर्णायक नहीं है। हालांकि पदों के उत्तर में अग्रणी हैं, लेकिन मुझे इसे आगे बढ़ाने का आग्रह नहीं हुआ है।




उपर्युक्त उत्तर में से एक समाधान प्रदान करता है:

export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales

उपरोक्त समाधान के साथ समस्या यह है कि इसे लिनक्स खोल पर किया जाना है। हालांकि, अगर आप क्लाइंट मशीन पर काम करने के लिए अपना कोड प्रदान कर रहे हैं तो यह एक खराब दृष्टिकोण है। मैंने os.system () का उपयोग कर उपरोक्त आदेशों को निष्पादित करने का भी प्रयास किया, लेकिन फिर भी यह काम नहीं करता है।

समाधान जो मेरे लिए काम करता है

locale.setlocale(locale.LC_ALL,'en_US.UTF-8')



रिकॉर्ड के लिए, मुझे भी यही समस्या थी, लेकिन समाधानों में से कोई भी काम नहीं करता था। मैंने अपने कंप्यूटर को अपग्रेड कर लिया और मेरे पीसी को माइग्रेट कर दिया। मेरे पास मिश्रित लोकेल अंग्रेजी और स्पेनिश था:

$ locale
LANG=en_US.utf8
LANGUAGE=
LC_CTYPE="en_US.utf8"
LC_NUMERIC=es_ES.utf8
LC_TIME=es_ES.utf8
LC_COLLATE="en_US.utf8"
LC_MONETARY=es_ES.utf8
LC_MESSAGES="en_US.utf8"
LC_PAPER=es_ES.utf8
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT=es_ES.utf8
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=

लेकिन, मेरी नई डेबियन स्थापना पर, मैंने अभी अंग्रेजी को लोकेल के रूप में चुना है। आखिर में काम करने के लिए स्थानीय पैकेज को फिर से जोड़ने और स्पैनिश उत्पन्न करने के लिए पुन: कॉन्फ़िगर करना था।

$ grep -v "#" /etc/locale.gen 
en_US.UTF-8 UTF-8
es_ES.UTF-8 UTF-8



Related