প্রায় প্রতিটি প্রোগ্রামই কেন আমার লোকাল নিয়ে অভিযোগ করছে?


29

আমি আর্চ লিনাক্স ব্যবহার করছি এবং আমি আমার স্থানীয় অবস্থান নির্ধারণের বিষয়ে উইকির দিকনির্দেশগুলি অনুসরণ করেছি ।

প্রায় প্রতিটি প্রোগ্রাম যা চালায় লোকাল - এমনকি তা নিয়ে অভিযোগ করে locale। দেখে মনে হচ্ছে:

% locale
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=en-US
LC_TIME=en-US
LC_COLLATE="POSIX"
LC_MONETARY=en-US
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT=en-US
LC_IDENTIFICATION="POSIX"
LC_ALL=

বা:

% perl
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LC_TIME = "en-US",
    LC_NUMERIC = "en-US",
    LC_MONETARY = "en-US",
    LC_MEASUREMENT = "en-US",
    LC_CTYPE = "en_US.UTF-8",
    LANG = (unset)
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C")

কিছুটা বিভ্রান্তিকর কিছু হল /etc/locale.genএর কয়েকটি উদাহরণ রয়েছে; সমস্ত ইউটিএফ -8 লাইনগুলিতে "কিছু.আউটএফ -8" রয়েছে এবং চলমান চলাকালীন locale-genশো en_US.UTF-8... doneচলছে তবে locale -a, যা আপনাকে উপলব্ধ লোকাল শো প্রদর্শন করবে বলে মনে করা হচ্ছে en_US.utf8। আমি উভয় বিন্যাসের মধ্যে /etc/locale-genএবং LOCALE=ভিতরে বিভিন্ন সংমিশ্রণ চেষ্টা করেছি /etc/rc.conf, কিন্তু কিছুই সমস্যার সমাধান করেনি।

অতিরিক্ত তথ্য:

% locale -a
C
POSIX
en_US
en_US.iso88591
en_US.utf8

ব্রুস এডিগার সেট LANG=CLC_ALL=en_US.UTF-8কাজ করার পরামর্শ (বাস্তবে সেটিংস সেট LC_ALLকরে ফেলা হয়েছে, সেটিংয়ের LANGকোনও গুরুত্ব নেই) তবে আমি কী জানতে চাই তা জানতে চাই। SUS এর মতে , LC_ALL সেট করা থাকলে এবং শূন্য না হলে অন্যান্য সমস্ত LC_ * ভেরিয়েবলগুলি ওভাররাইড করবে। আমার সিস্টেমে এটি সেট করা আছে তবে এটি শূন্য, সুতরাং এটি উপেক্ষা করা উচিত এবং পরিবর্তে অন্যান্য মানগুলি ব্যবহার করা উচিত। এটি যা ঘটছে তা নয়, মনে হচ্ছে অ্যাপ্লিকেশনগুলি কল setlocaleকরছে LC_ALL, NULLফিরে এসেছে এবং একটি ত্রুটি তৈরি করছে, এমনকি অন্য কলগুলি যখন setlocaleভাল স্ট্রিং ফিরে আসে তখনও ।

এখানে একটি উপরে উঠছে ltraceএর locale(ফাংশন রিটার্ন মান দেখতে স্ক্রোল করুন ডান)

% ltrace locale
(0, 0, 0, -1, 0x7f5c1ae44510)                                                                      = 0x7f5c1ae47140
__libc_start_main(0x401d70, 1, 0x7fff7c8cfbf8, 0x404610, 0x4046a0 <unfinished ...>
setlocale(0, "")                                                                                   = "en_US.UTF-8"
setlocale(5, "")                                                                                   = "en_US.UTF-8"
textdomain("libc")                                                                                 = "libc"
argp_parse(0x607280, 1, 0x7fff7c8cfbf8, 0, 0x7fff7c8cfad4)                                         = 0
setlocale(6, "")                                                                                   = NULL
dcgettext(0, 0x405aa8, 5, 0, 0)                                                                    = 0x405aa8
error(0, 2, 0x405aa8, 1, 0locale: Cannot set LC_ALL to default locale: No such file or directory)  

আপনি কি আউটপুট ভাগ করতে পারেন locale -a?
এনজেএসজি

আমি আপনাকে ব্যবহার করা উচিত যে নির্দেশ করতে যাচ্ছি .utf8 মধ্যে LOCALEএবং LC_*, কিন্তু দৃশ্যত .UTF-8খুব এখানে কাজ করে ... স্বীকারোক্তি-মার্কিন হিসাবে: এটা (ছাড়া প্রদর্শিত হচ্ছে না .utf8মধ্যে) locale -a?
এনজেএসজি

1
কি export LANG=Cএবং export LC_ALL=en_US.UTF-8এবং দেখুন সেখানে কি ঘটছে। আমার আর্চ লিনাক্স ল্যাপটপে রয়েছেLOCALE="en_US.UTF-8" /etc/rc.conf রয়েছে এবং আমি বুঝতে পারি না যে আমার ল্যাপটপটি LANG = C সেট করে।
ব্রুস এডিগার

আপনি কি আপনার বিষয়বস্তু পোস্ট করতে পারেন /etc/locale.conf? দেখে মনে হচ্ছে আপনি দুর্ঘটনাক্রমে LANG=en-US(হাইফেন সহ) লিখেছেন ( LANG=en_USআন্ডারস্কোর সহ ) instead
মাইকেল

এবং বিষয়বস্তু /etc/locale.gen খুব দরকারী হবে।
মাইকেল

উত্তর:


18

আপনি যা অনুপস্থিতিতে লোকেল ডিফল্ট ব্যবহার করা হবে একটি ফাইল দিতে ভুলে গেছেন $LANGবা $LC_ALL(অথবা সব আরো নির্দিষ্ট $LC_whatever) সেট হচ্ছে।

পুরানো গ্লিবিসি তে, এটি / usr / lib / লোকেল / লোকেল-সংরক্ষণাগার। জিএনইউ / লিনাক্স বিশৃঙ্খলাবদ্ধ হওয়ায় আপনার মেশিনে নির্দিষ্ট সংস্করণে কোন ফাইলগুলি প্রত্যাশিত তা নির্ধারণ করতে আপনার স্ট্রেস ব্যবহার করা উচিত:

strace -e ফাইল লোকেল
এক্সিকিউট ("/ usr / বিন / লোকেল", ["লোকেল"], [/ * 36 বছর * /]) = 0
অ্যাক্সেস ("/ etc / ld.so.preload", R_OK) = -1 উত্স (এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই)
("/ etc / ld.so.cache", O_RDONLY) খুলুন = 3
খোলা ("/ lib / libc.so.6", O_RDONLY) = 3
খোলা ("/ usr / lib / লোকেল / লোকেল-সংরক্ষণাগার", O_RDONLY | O_LARGEFILE) = 3

---------------------- মন্তব্যগুলি 1 দিন পরে যুক্ত হয়েছে:

"ltrace -S" ঠিকঠাক হওয়া উচিত, যেহেতু এটি স্কাইস্কলগুলি দেখায়।

অন্যথায়, "ltrace" খুব সহায়ক নয় (যেমন এটি প্রতিক্রিয়াশীল বনাম স্ট্র্যাস), কারণ এটি কেবল উপরের কলগুলি দেখায়। এগুলি সুস্পষ্ট (সেটলোকেল (3)), তবে আসল সমস্যাটি লিবিসি-র মধ্যে ঘটে।

মনে হচ্ছে আপনার কাঁচা আছে en_US.UTF-8 কাজ করার পরে লোকাল ডেটা ইনস্টল করা আছে।

যদি তা হয় তবে সিস্টেম-ওয়াইড ডিফল্ট সেট করে এর মতো কোনও কিছুতে আপনার সমস্যার সমাধান করা উচিত:

localedef -f UTF-8 -i en_US en_US.UTF-8

sudo localedef -f UTF-8 -i en_US en_US.UTF-8রাস্পবিয়ান 2018-11-13 লাইটে কাজ করে।
সিরো সান্তিলি 新疆 改造 中心 法轮功 六四 事件

6

/etc/locale.confঠিক আজই সেট আপ করার পরে আমার একই সমস্যা ছিল (সাম্প্রতিক পরিবর্তনের সাথে সম্পর্কিত /etc/rc.confmy আমার ক্ষেত্রে, দেখা গেল যে লোকেলগুলি ইনস্টল করা হয়নি were

চেক /etc/locale.gen। আপনার পরিবেশের পরিবর্তনশীল রেফারেন্সগুলিতে সমস্ত লোকাল অবশ্যই সেখানে সক্রিয় করতে হবে (যেমন মন্তব্য করা হয়নি)। আপনার পরিবর্তনগুলি করার পরে, sudo locale-genনির্বাচিত লোকেলগুলি ইনস্টল করতে চালান ।


2

এই লিঙ্কটি অনুসরণ করা আমার সমস্যার সমাধান করে:

sudo localectl set-locale LANG=en_CA.UTF-8
# or change to en_US.UTF-8 depends on your locale-gen

এটি একটি ফাইল তৈরি করে /etc/locale.confযা এই সমস্যাটিকে সংশোধন করে


1

আমি সম্প্রতি একইরকম সমস্যা পেয়েছি, যখন আমি দুর্ঘটনাক্রমে 'LOCALE = en_US.utf8' সরিয়ে ফেলি তখন সমস্ত ইউনিকোড ফাইলের নাম ভুল করে প্রদর্শিত হয়েছিল /etc/rc.conf। সুতরাং আমি বুট স্ক্রিপ্ট চেক করেছি:

if [[ $DAEMON_LOCALE != [nN][oO] ]]; then
    export LANG=${LOCALE:-C}
    if [[ -r /etc/locale.conf ]]; then
        parse_envfile /etc/locale.conf "${localevars[@]}"
    fi
else
    export LANG=C
fi

সহজ সমাধানটি উভয় DAEMON_LOCALEএবং মধ্যেই পরীক্ষা করা LOCALEআছে /etc/rc.conf, নিশ্চিত হয়ে নিন যে প্রথমটিটি ছিল না noএবং দ্বিতীয়টি খালি ছিল না।


-1

আপনার এক সেটিংস অবৈধ হতে পারে? রেফারেন্সের জন্য এগুলি আমার স্থানীয় সেটিংস; তারা কোনও ত্রুটি সৃষ্টি করে না (কুবুন্টু 12.04):

LANG=en_AU.UTF-8
LANGUAGE=
LC_CTYPE="en_AU.UTF-8"
LC_NUMERIC="en_AU.UTF-8"
LC_TIME="en_AU.UTF-8"
LC_COLLATE="en_AU.UTF-8"
LC_MONETARY="en_AU.UTF-8"
LC_MESSAGES="en_AU.UTF-8"
LC_PAPER="en_AU.UTF-8"
LC_NAME="en_AU.UTF-8"
LC_ADDRESS="en_AU.UTF-8"
LC_TELEPHONE="en_AU.UTF-8"
LC_MEASUREMENT="en_AU.UTF-8"
LC_IDENTIFICATION="en_AU.UTF-8"
LC_ALL=
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.