मैक ओएस एक्स में $ LANG वेरिएबल कहां मिलता है?


24

मैंने wgetलायन ओएस एक्स को स्थापित करने के बाद पहली बार उपयोग किया है और मैंने देखा है कि मेरे स्थानीय भाषा में स्थानीयकरण को भूल गया। setटर्मिनल में रनिंग कमांड से पता चला कि मेरा LANGवेरिएबल मेरी स्थानीय भाषा को दर्शाता है। मैं इसे कहां बदल सकता हूं या wgetइस सेटिंग को अनदेखा कर सकता हूं ?

अद्यतन करें

यहाँ localeमुझे क्या देता है:

LANG="lt_LT.UTF-8"
LC_COLLATE="lt_LT.UTF-8"
LC_CTYPE="lt_LT.UTF-8"
LC_MESSAGES="lt_LT.UTF-8"
LC_MONETARY="lt_LT.UTF-8"
LC_NUMERIC="lt_LT.UTF-8"
LC_TIME="lt_LT.UTF-8"
LC_ALL=

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

मैं zshअपने लॉगिन शेल के रूप में उपयोग कर रहा हूं ।


वास्तव में समस्या क्या है wget? और क्या localeदिखाता है और क्या यह वैसा ही है जैसा आप भाषा और पाठ प्रणाली वरीयता फलक में अपने भाषा चयन से उम्मीद करते हैं ?
bmike

जवाबों:


26

डिफ़ॉल्ट रूप से, टर्मिनल वर्तमान में चयनित भाषा और समय / दिनांक / संख्या स्वरूपों से मेल खाने के लिए स्थानीय वातावरण चर निर्धारित करता है, जिसका उपयोग टर्मिनल द्वारा किया जाता है

सिस्टम वरीयताएँ> भाषा और पाठ

(यह सिंह पर नाम है। पहले की प्रणालियों में वरीयता पैनल का सटीक नाम भिन्न हो सकता है।)

एक अस्थायी समाधान यह है कि भाषाओं की सूची के शीर्ष पर अंग्रेजी को खींचें, फिर टर्मिनल खोलें, फिर लिथुआनियाई को शीर्ष पर वापस ले जाएं। तब केवल टर्मिनल अंग्रेजी में होगा। हालाँकि, यदि आप टर्मिनल से बाहर निकलें और पुनरारंभ करते हैं, तो यह लिथुआनियाई पर रीसेट हो जाएगा।

एक सतत दृष्टिकोण है कि टर्मिनल को लोकल एनवायरनमेंट वेरिएबल्स को बंद न करके सेट करने के लिए कहा जाए

टर्मिनल> वरीयताएँ> सेटिंग्स> [प्रोफ़ाइल]> उन्नत> स्टार्टअप पर स्थानीय वातावरण चर सेट करें

फिर लोकेल "C" में बिना किसी भाषा के निर्दिष्ट के साथ डिफ़ॉल्ट हो जाएगी, और अधिकांश प्रोग्राम तब अंग्रेजी में डिफ़ॉल्ट होंगे।

ध्यान दें कि यह बंद करने का मतलब है कि कुछ प्रोग्रामों को पता नहीं होगा कि कौन सा कैरेक्टर एन्कोडिंग टर्मिनल इस्तेमाल कर रहा है और यह मान लेगा कि यह केवल ASCII या ISO-Latin-1 है। इसलिए यदि टर्मिनल UTF-8 (डिफ़ॉल्ट) का उपयोग कर रहा है, तो वे प्रोग्राम इच्छानुसार व्यवहार कर सकते हैं या नहीं भी कर सकते हैं।

यदि यह ज्यादातर के बारे में है wget, तो मेरा सुझाव है कि आप डिफ़ॉल्ट सेटिंग प्रोफ़ाइल की एक प्रति बनाएं, अपने कस्टम प्रोफ़ाइल में लोकेल सेटिंग को बंद करें, और उपयोग करते समय केवल उस प्रोफ़ाइल का उपयोग करें wget, ताकि आप पूर्ण समर्थन के साथ UTF-8 का उपयोग करना जारी रख सकें अन्य प्रोग्राम का उपयोग करते समय, डिफ़ॉल्ट सेटिंग्स का उपयोग करते हुए।

जैसा कि दूसरों ने उल्लेख किया है, आप शेल स्टार्टअप स्क्रिप्ट में टर्मिनल द्वारा आपूर्ति की गई प्रारंभिक लोकेल सेटिंग्स को भी ओवरराइड कर सकते हैं। Zsh के लिए, इसे ~ / .zshrc में डालें। बैश के लिए, ~ / .bashrc का उपयोग करें (और यदि आपके पास पहले से कोई नहीं है, तो ~ / .bash_profile जो ~ / .bashrc चलाता है) बनाएं।

प्रत्येक स्थानीय परिवेश मानों के बारे में अधिक जानकारी के लिए x-man-page: // 1 / लोकेल देखें।

हालाँकि, यदि आप unset LANGइसे केवल "सी" पर सेट या सेट करते हैं, जो सामान्य रूप से आपके सभी गोले और कार्यक्रमों पर लागू होता है , जबकि अधिकांश समय आप संभवतः UTF-8 का उपयोग करना चाहते हैं और टर्मिनल को मिलान करने के लिए स्थानीय चर सेट करते हैं, सहयोग, निष्ठा और कार्यक्षमता का उच्चतम स्तर पाने के लिए।

इसलिए, यदि आप उस मार्ग पर जाने वाले हैं, तो मेरा सुझाव है कि आप कोड को संपादित करने के बजाय, प्रारंभिक मानों को लिखने के लिए लिखें, ताकि आप एन्कोडिंग जानकारी ("UTF-8") को संरक्षित करें और भाषा को अंग्रेजी में मजबूर करें, "C" को चर सेट करने के बजाय।

उदाहरण के लिए, यह zsh और bash में काम करता है:

# Replace Lithuanian with English
export LANG=${LANG/lt_LT/en_US}

जब LANG="lt_LT.UTF-8", यह इसे बदल जाएगा LANG="en_US.UTF-8"। मेरे पास इसका wgetपरीक्षण करने के लिए उपलब्ध नहीं है , लेकिन यह पर्याप्त होना चाहिए।

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


अच्छी तरह से किया; LANGपुनर्वितरण आदेश को सामान्य करने के लिए : चाहे वह कैसा भी हो echo ${LANG/*./en_US.}, वर्तमान संस्कृति के नाम को बदल देता en_USहै; में काम करता है bash, ksh, zsh
mklement0

7

यह यहाँ सेट है ...

यहाँ छवि विवरण दर्ज करें

आप अधोगामी में कम या ज्यादा विकल्प चाहते हैं, को सामने एन्कोडिंग इनाम की भी अधिक देखने के लिए टैब।


3
os x पर यह ~ / .bash_profile है, न कि bashrc। ऑनलाइन ट्यूटोरियल पढ़ने पर लोग इससे बहुत भ्रमित हो गए।
बजे एनरिको सुसात्यो

गोश ने यह कहा - कि पकड़ने के लिए धन्यवाद। मैं भी खुले स्रोत पृष्ठ पर गया और जाँच की कि क्या सेब ने ग्नू बैश में परिवर्तन किया है और फिर भी यह गलत है। (संपादन मेरा उत्तर - धन्यवाद @the_great_monkey)
bmike

4
टर्मिनल लॉगिन गोले बनाता है, जो ~ / .bash_profile चलाते हैं। हालांकि, अधिकांश उपयोगकर्ता अनुकूलन को ~ / .bashrc में रखा जाना चाहिए ताकि वे गैर-लॉगिन शेल (जैसे, उप-गोले) पर भी लागू हों, और ~ / .bash_profile को ~ / .bashrc चलाना चाहिए ताकि यह लॉगिन शेल पर लागू हो। ~ / .bash_profile आम तौर पर ज्यादातर खाली होता है और इसमें केवल विशेष रूप से शीर्ष-स्तरीय लॉगिन गोले के लिए कोड होता है जिसे उपयोगकर्ता उप-गोले के लिए नहीं चलाना चाहता है।
क्रिस पेज

1
"मैन पेज का एक त्वरित रीड दिखाता है कि शेल इस मान को प्रत्येक लॉग सेट करता है" बैश मैन पेज कहता है कि, लेकिन टर्मिनल प्रारंभिक मूल्य सेट करता है, और मैंने उन्हें कभी भी सेट नहीं होने पर बैश सेट करते देखा है। अगर मैं "सेट लोकेल एनवायरनमेंट ..." पसंद को बंद कर देता हूं, तो कोई भी वैरिएबल सेट नहीं किया जाता है, और लोकल शो LANG=और अन्य मान बिल्कुल डिफॉल्ट हो जाते हैं "C"
क्रिस पेज

2

मैंने अपनी .profile फ़ाइल में भाषा सेट करके इस समस्या को हल किया जो कि जब भी मैं एक टर्मिनल शुरू करता हूं तो लोड होता है।

export LANG="en_US.UTF-8"
export LC_ALL="POSIX"

LC_ALLओवरराइड करता है LANG, इसलिए आपके पहले कमांड का कोई प्रभाव नहीं पड़ेगा।
mklement0

इसके अलावा, POSIXके बराबर है Cऔर यह यूनिकोड के साथ बिल्कुल भी सामना नहीं करता है।
सेबस्टियन ग्राफ

1

लिनक्स एक्सपायरी पर अधिक आधारित, यदि आप LC_LANG के साथ अपने स्थानीयकरण को पूरी तरह से बदलना नहीं चाहते हैं, लेकिन चाहेंगे कि आपके पास अंग्रेजी में सिस्टम संदेश हों, तो आप बस सेट कर दें

LC_COLLATE=C    (to have standard sorting in ls, etc)
LC_CTYPE=en_US.UTF-8

यह वह LC_MESSAGESचर है जो नियंत्रित करता है कि भाषा के संदेशों को आउटपुट (यदि स्थापित) होना चाहिए।
mklement0

0

फ्रेंच में एक डेबियन सर्वर और एक macsox bash क्लाइंट का उपयोग करके, मुझे "बस" को macosx के उपयोगकर्ता निर्देशिका पर मेरे .bash_profile में इसे जोड़ना था:

निर्यात LANG = fr_FR.UTF-8

हल किया।


0

अन्य उत्तर के बारे में, सही हैं यानी Terminalके लिए सेटिंग स्टार्टअप पर सेट वातावरण वातावरण चर और खोल का उपयोग /etc/profile। हालांकि, एक और तरीका है जो समझने योग्य है - खासकर अगर दूरस्थ sshलॉगिन के कारण "समस्या" का अनुभव होता है ।

OpenSSH (जैसा कि लिनक्स, बीएसडी और मैकओएस पर उपयोग किया जाता है) सर्वर के शुरू होने वाले शेल के लिए क्लाइंट के वातावरण से पर्यावरण चर भेज सकता है। यह केवल अगर क्लाइंट उन्हें भेजने के लिए कॉन्फ़िगर किया गया है और सर्वर उन्हें स्वीकार करने के लिए कॉन्फ़िगर किया गया है। ग्राहक को ( ~/.ssh/config) की आवश्यकता होगी:

SendEnv LANG LC_*

और सर्वर ( /etc/ssh/sshd_config) की आवश्यकता होगी:

AcceptEnv LANG LC_*

यदि वे दोनों जगह हैं तो क्लाइंट का स्थानीय ssh सर्वर पर लॉगिन शेल में प्रचारित किया जाता है:

$ ssh me@my-mac locale
LANG="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_CTYPE="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_ALL=

स्नो लेपर्ड पर डिफ़ॉल्ट रूप से आवश्यक सर्वर सेटिंग नहीं है ; यह सिएरा पर है । SSH सर्वर को संशोधित करने के बाद पुनः आरंभ करना याद रखें /etc/sshd_config!!!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.