পাইথন স্থানীয় ত্রুটি: অসমর্থিত লোকেল সেটিং


317

পাইথনে এটি করার সময় কেন আমি নিম্নলিখিত ত্রুটিটি পাই:

>>> 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

8
আপনি কি একটি de_DEতালিকাবদ্ধ আছে locale -a? যদি না হয় আপনি এটি ইনস্টল করা আবশ্যক ।
বাকুরিউ

1
সম্পর্কিত: উবুন্টুতে সমস্ত লোকাল ইনস্টল করতে বাশ স্ক্রিপ্ট
rkrzr

12
locale.setlocale(locale.LC_ALL, 'de_DE')ভূল. আপনি প্রয়োজন locale.setlocale(locale.LC_ALL, 'de_DE.utf8')
মার্টিন থোমা

2
আপনি কখনও কখনও ব্যবহার ভাষা / দেশের জন্য একটি উপলব্ধ এনকোডিং যদি আপনি চান আবিষ্কার করতে পারেন বিল্ট-ইন alias লেখা: locale.setlocale(locale.LC_ALL, locale.locale_aliases['de_DE'])
14:32 এ জাগ্রয়ে

উত্তর:


647

নিম্নলিখিত আদেশগুলি চালান

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

এটি এটিকে সমাধান করবে।

কিছু সিস্টেমের উদাহরণস্বরূপ .UTF-8আউটপুটে পাওয়া প্রকৃত সিনট্যাক্সের সাথে অংশটি মিলানোর বিষয়টি নিশ্চিত করুন ।locale -a.utf8


8
আমাকে dpkg কমান্ড ব্যবহার করতে হবে না। সর্বোপরি, যদি সমস্যাটি স্থানীয়ভাবে ঘটে থাকে তবে আসল সমাধানটি হ'ল আপনার প্রারম্ভিক অ্যাপ্লিকেশনগুলিতে প্রথম দুটি কমান্ড যুক্ত করা।
RolandiXor

2
এটি আমার পক্ষে কাজ করে না। যা কাজ করেছিল তা export LC_ALL="en_US.UTF-8"নিয়ে ব্যর্থ -bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8):export LC_ALL=C
জোনাথন

204

এই লিঙ্ক অনুসারে , এই আদেশটি প্রবেশ করে এটি সমাধান হয়েছে:

LC_ALL = C রফতানি করুন


4
এর মানে কী? - ঠিক আছে এটি LC_ALLমূল্যকে পরিবেশের বৈকল্পিক সেট করে 'C'- তবে কেন এই কাজটি বেঁধে রাখা?
মার্টিন থোমা

3
কেন LC_ALL কাজ করে -> unix.stackexchange.com/questions/87745/what-does-lc-all-c-do
Ferhat

আমি যখন কম্পিউটার পরিবর্তন করি তখন আমি প্রতিবার এটি অনুসন্ধান এবং চেষ্টা করি এবং অন্যান্য পদ্ধতিগুলি না করে এমনটি প্রতিবার কাজ করে।
মিনকি জো

সরাসরি আমার সমস্যা সমাধান, অনেক ধন্যবাদ!
তাহিরহান

197

আপনার কাছে সম্ভবত কোনও de_DEলোকেল উপলব্ধ নেই।

আপনি 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

মনে রাখবেন যে আপনি যদি লোকেলটি সেট করতে চান তবে আপনাকে it_ITঅবশ্যই এটি নির্দিষ্ট করতে হবে .utf8:

>>> 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ভাষার কোড (থেকে নেওয়া হয় এখানে )

আপনি লোকেল ইনস্টল করার পরে আপনার জুলিয়েন পালার্ড পরামর্শ অনুসরণ করা উচিত এবং এর সাথে লোকেলগুলি পুনরায় কনফিগার করা উচিত:

sudo dpkg-reconfigure locales

এটি আমার ডেবিয়ান ডকার-ধারকটিতে কাজ করে নি। কিন্তু এটি কাজ করে। stackoverflow.com/questions/28405902/…
ক্রিস

45

উপরের উত্তরগুলির মধ্যে একটি সমাধান সরবরাহ করে:

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

উপরের সমাধানের সাথে সমস্যাটি এটি লিনাক্স শেলটিতে করতে হবে।তবে, আপনি যদি ক্লায়েন্ট মেশিনে কাজ করার জন্য আপনার কোড সরবরাহ করছেন তবে এটি একটি খারাপ পদ্ধতির। আমি ওএস.সিস্টেম () ব্যবহার করে উপরের কমান্ডগুলি কার্যকর করার চেষ্টা করেছি, কিন্তু এখনও এটি কার্যকর হয় না।

সমাধান যে আমার জন্য কাজ করেছে

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

32

কমান্ড দ্বারা প্রদর্শিত আউটপুটে অনুপস্থিত মানগুলি পূরণ করার আরও স্থায়ী সমাধান হ'ল: locale

এর ফলাফল আউট locale:

 $ 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=

অনুপস্থিত মানগুলি পূরণ করতে edit / .bashrc:

 $ vim ~/.bashrc

উপরের কমান্ডের পরে নিম্নলিখিত লাইনগুলি যুক্ত করুন (ধরুন আপনি en_US.UTF-8 আপনার ভাষা হতে চান):

export LANGUAGE="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"

যদি এই ফাইলটি কেবলমাত্র পঠনযোগ্য হয় তবে আপনাকে দ্য গিকি বাইয়ের দ্বারা উল্লিখিত পদক্ষেপগুলি অনুসরণ করতে হবে । ড। বেকো সুপারউজারে দেওয়া উত্তর পঠনযোগ্য ফাইলগুলি সংরক্ষণ সম্পর্কিত বিশদ রয়েছে।

ফাইলটি সংরক্ষণের পরে করুন:

$ source ~/.bashrc

এখন আপনি আর একই সমস্যার মুখোমুখি হবেন না।


15

আপনি যদি কোনও ডেবিয়ান (বা দেবিয়ান কাঁটাচামচ) এ থাকেন তবে আপনি লোকেলেস ব্যবহার করে এটি যুক্ত করতে পারেন:

dpkg-reconfigure locales

আপনার dpkg-reconfigure localesকাছে কি এইরকম স্থানীয় পছন্দসই মেনু নিয়ে আসে: vpser.net/uploads/2013/01/dpkg-reconfigure-locales-1.jpg ?
জুলিয়েন পালার্ড

নাঃ। আমি আমার প্রশ্নের আপডেটে পোস্ট করা আউটপুটটি পেয়েছি।
টুম ২


4

রেকর্ডের জন্য, আমার এই একই সমস্যা ছিল, তবে কোনও সমাধানের কাজ হয়নি। আমি আমার কম্পিউটার আপগ্রেড করেছি এবং আমার পিসি স্থানান্তরিত করেছি। আমার কাছে আ মিক্সড লোকেল ইংলিশ এবং স্প্যানিশ ছিল:

$ 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

4

কেবল .bashrc ফাইলটি খুলুন এবং এটি যুক্ত করুন

LC_ALL = C রফতানি করুন

এবং তারপরে টার্মিনালে উত্স .bashrc টাইপ করুন।


4

আপনার ত্রুটিটি স্পষ্টভাবে বলেছে, আপনি লোকেল ব্যবহার করার চেষ্টা করছেন কিছু সেখানে ছিল না।

>>> 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 581, in setlocale
    return _setlocale(category, locale)
locale.Error: unsupported locale setting

লোকেল.এরআরআর: অসমর্থিত লোকেল সেটিং

উপলভ্য সেটিংটি পরীক্ষা করতে, ব্যবহার করুন locale -a

deb@deb-Latitude-E7470:/ambot$ 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
POSIX

যাতে আপনি এর মধ্যে একটি ব্যবহার করতে পারেন,

>>> locale.setlocale(locale.LC_ALL, 'en_AG.utf8')
'en_AG.utf8'
>>> 

জন্য de_DE

এই ফাইলটি হয় ম্যানুয়ালি অ্যাডজাস্ট করা যায় বা টুল, আপডেট-লোকেল ব্যবহার করে আপডেট করা যেতে পারে।

update-locale LANG=de_DE.UTF-8

2
  • localeলোকেলটি কী ব্যবহৃত হয় তা পেতে এই কমান্ডটি চালান । যেমন:

লং = en_US.UTF-8
ভাষা = en_US: এন
এলসি_সিটিওয়াই = zh_CN.UTF-8
LC_NUMERIC = "en_US.UTF-8"
LC_TIME = "en_US.UTF-8"
LC_COLLATE = "en_US.UTF-8"
LC_MONETARY " .UTF-8 "
LC_MESSAGES =" en_US.UTF-8 "
LC_PAPER =" en_US.UTF-8 "
LC_NAME =" en_US.UTF-8 "
LC_ADDRESS =" en_US.UTF-8 "
LC_TELEPHONE =" en_US.UTF-8 "
LC_MEASUREMENT = "en_US.UTF-8"
LC_IDENTIFICATION = "en_US.UTF-8"
LC_ALL =

  • /etc/locale-genফাইলের প্রথম ধাপে তালিকাভুক্ত লোকাল তালিকার সন্ধান করুন। ব্যবহৃত ব্যক্তিদের কাছে প্রতিক্রিয়া নেই
  • locale-genসদ্য যুক্ত হওয়া লোকেলগুলি তৈরি করতে চালান

2

আমার মতে, অজগর 3, 3 in এ স্থানীয় লোকাল সেটআপ করার সবচেয়ে সহজ উপায় হ'ল:

>>> import locale
>>> locale.setlocale(locale.LC_ALL, '')
'de_DE.UTF-8'

তারপরে, লোকাল সচেতন স্টাফগুলি কেবলমাত্র কাজ করে, যদি আপনি কোনও শালীন লিনাক্স ডিস্ট্রোতে থাকেন এবং অন্যান্য ওএসের বাইনারি বিতরণেও কাজ করা উচিত (বা এটি কোনও বাগ আইএমএইচও)।

>>> import datetime as dt
>>> print(dt.date.today().strftime("%A %d. %B %Y"))
Sonntag 11. Dezember 2016

2

Dockerfileউপরের এটিতে রাখুন ENV

# 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

ধন্যবাদ, আমি অন্যান্য সমাধানগুলি (ডিপি কেজি-পুনরায় কনফিগার করা লোকেল, লোকেল-জেন) চেষ্টা করেছিলাম এবং আমার ডিবিয়ান: 9 ধারকটিতে আর কিছুই কাজ করেনি। এটি কি সত্যিই en_US.UTF-8 লোকেল তৈরির / মানক উপায়?
জামশিদ

হ্যাঁ, আমি মনে করি এটি মানক en_US.UTF-8 লোকাল। আপনি যখন localeটার্মিনালে চালান আপনি u LANG = en_US.UTF-8 এবং অন্যান্য লোকেল পাবেন? stackoverflow.com/questions/36394101/…
Seenu এস

1

এই ত্রুটিটি ঘটতে পারে, যদি আপনি সদ্য একটি নতুন লোকেল যুক্ত করেছেন। অ্যাক্সেস পেতে আপনাকে পাইথন ইন্টারেক্টিভ শেল ( quit() এবং python) পুনরায় চালু করতে হবে।


1

আমি যদি আপনি থাকতাম তবে আমি ব্যাবেল ব্যবহার করতাম: http://babel.pocoo.org/en/latest/index.html

আমি এখানে ডকার ব্যবহার করে একই সমস্যা পেয়েছি, আমি প্রতি একক পদক্ষেপ চেষ্টা করেছি এবং ভাল কাজ করি নি, সর্বদা লোকাল ত্রুটি পেয়েছি, তাই আমি ব্যাবেল ব্যবহার করার সিদ্ধান্ত নিয়েছি এবং সবকিছু ভালভাবে কাজ করেছে।


0

নির্দিষ্ট লোকালয়ে নাম ছড়িয়ে দেওয়ার জন্য অজগরটি পাওয়ার চেষ্টা করে আমি এখানে একই সমস্যার সাথে অবতরণ করেছি।

উত্তর অনুসরণ করার সময়, জিনিসগুলি আমি একটু রহস্যময় পেয়েছি।

আমি পাই পাইথন কোডটি।

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, নিরঙ্কুশভাবে প্রয়োজনীয় লাইন da_DK.UTF-8 UTF-8এবং রান কমান্ড দিয়েlocale-gen

এখন locale.setlocale(locale.LC_TIME, 'da_DK.UTF-8')খুব কার্যকর হয় এবং আমি আমার স্থানীয় দিন এবং মাসের নামগুলি পেতে পারি।

আমার উপসংহার:

পাইথন: লোকেল.লোকালে_লিয়াস উপলব্ধ লোকালগুলি সন্ধানে মোটেই সহায়ক নয়!

লিনাক্স: স্থানীয় তালিকা পাওয়া এবং নতুন লোকেল ইনস্টল করা বেশ সহজ। প্রচুর সাহায্য উপলব্ধ।

উইন্ডোজ: আমি কিছুটা তদন্ত করে দেখছি, তবে শেষ পর্যন্ত কিছুই হয়নি। উত্তরগুলির দিকে পরিচালিত পোস্টগুলি যদিও রয়েছে তবে আমি এটি অনুসরণ করার তাগিদ অনুভব করি নি।


0

যদি আমি সঠিকভাবে বুঝতে পারি তবে এখানে ত্রুটির মূল উত্স হ'ল লোকেলের নামটির সঠিক বাক্য গঠন। এটি বিতরণের মধ্যে পৃথক বলে মনে হচ্ছে বিশেষত। আমি এখানে বিভিন্ন উত্তর / মন্তব্যে উল্লিখিত দেখেছি:

de_DE.utf8
de_DE.UTF-8

যদিও এটি একটি স্পষ্টতই একটি মানুষের জন্য একই, আপনার মান নির্ধারণকারী অ্যালগরিদমের জন্য এটি একই ধারণ করে না।

সুতরাং আপনি সম্ভবত এর লাইনে কিছু করবেন:

DESIRED_LOCALE=de
DESIRED_LOCALE_COUNTRY=DE
DESIRED_CODEPAGE_RE=\.[Uu][Tt][Ff].?8
if [ $(locale -a | grep -cE "${DESIRED_LOCALE}_${DESIRED_LOCALE_COUNTRY}${DESIRED_CODEPAGE_RE}") -eq 1 ]
then
    export LC_ALL=$(locale -a | grep -m1 -E "${DESIRED_LOCALE}_${DESIRED_LOCALE_COUNTRY}${DESIRED_CODEPAGE_RE}")
    export LANG=$LC_ALL
else
    echo "Not exactly one desired locale definition found: $(locale -a | grep -E "${DESIRED_LOCALE}_${DESIRED_LOCALE_COUNTRY}${DESIRED_CODEPAGE_RE}")" >&2
fi

0

পাইথন .UFT-8 সন্ধান করে, তবে আপনি সম্ভবত .utf8 sudo dpkg-reconfigure লোকেল সহ .UFT-8 প্যাকেজ ইনস্টল করার চেষ্টা করতে পারেন


-2

প্রথমে নিশ্চিত হয়ে নিন যে আপনার দ্বারা ল্যাঙ্গুয়েজ প্যাকটি ইনস্টল করা আছে:

sudo apt-get install language-pack-en-base


sudo dpkg-reconfigure locales

ডিফল্টরূপে ইংরাজী ল্যাঙ্গুয়েজপ্যাক ইনস্টল করা আছে - তাছাড়া উত্তরটি এখানে আগেই দেওয়া আছে এবং এটির বিন্যাসের অভাব রয়েছে।
স্ক্যান্ডিক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.