टर्मिनल संदेशों / चेतावनियों / त्रुटियों के लिए अस्थायी रूप से भाषा बदलें


22

मेरे टर्मिनल में संदेश डिफ़ॉल्ट रूप से रूसी भाषा का उपयोग करके प्रदर्शित किए जाते हैं, जो मेरा मूल निवासी है।

सिर्फ एक पल के लिए मैं चाहता हूं कि वे अंग्रेजी में हों (उदाहरण के लिए मंचों में पेस्ट करें), फिर डिफ़ॉल्ट भाषा पर वापस जाएं।

मैं बैश का उपयोग करके स्विच और स्विच कैसे कर सकता हूं?

जवाबों:


23

भाषा सेटिंग बदलने के लिए कई पर्यावरण चर उपलब्ध हैं। आप localeकमांड निष्पादित करके अपनी वर्तमान लोकेल सेटिंग देख सकते हैं । सभी लोकेल सेटिंग्स को अंग्रेजी में बदलने के लिए, उपयोग करें LANG=C। यह Cलोकेल हमेशा अतिरिक्त भाषा पैक स्थापित किए बिना उपलब्ध है। (गैर-अंग्रेजी स्थानों में अस्थायी रूप से बदलने के लिए, @ mklement0 की पोस्ट देखें।)

उदाहरण:

डिफ़ॉल्ट भाषा सेटिंग्स के साथ एक कमांड निष्पादित करना और वर्तमान स्थानीय सेटिंग्स प्रिंट करना:

$ /nonexistent
bash: /nonexistent: Bestand of map bestaat niet
$ locale
LANG=nl_NL.UTF-8
LANGUAGE=
LC_CTYPE="nl_NL.UTF-8"
LC_NUMERIC="nl_NL.UTF-8"
LC_TIME="nl_NL.UTF-8"
LC_COLLATE="nl_NL.UTF-8"
LC_MONETARY="nl_NL.UTF-8"
LC_MESSAGES="nl_NL.UTF-8"
LC_PAPER="nl_NL.UTF-8"
LC_NAME="nl_NL.UTF-8"
LC_ADDRESS="nl_NL.UTF-8"
LC_TELEPHONE="nl_NL.UTF-8"
LC_MEASUREMENT="nl_NL.UTF-8"
LC_IDENTIFICATION="nl_NL.UTF-8"
LC_ALL=

अस्थायी रूप से एक कार्यक्रम के लिए भाषा को ओवरराइड करें और दिखाएं कि यह वास्तव में अस्थायी है:

$ LANG=C ls /nonexistent
ls: cannot access /nonexistent: No such file or directory
$ ls /nonexistent
ls: kan geen toegang krijgen tot /nonexistent: Bestand of map bestaat niet

वर्तमान शेल में निष्पादित सभी कमांडों के लिए स्थान बदलें और फिर से सबूत शामिल करें:

$ LANG=C
$ ls /nonexistent
ls: cannot access /nonexistent: No such file or directory
$ locale
LANG=C
LANGUAGE=
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=

6
अन्य उपयोगकर्ताओं के लिए यह काम करने के लिए समस्याएँ हैं - सेटिंग LANGया LANG_ALLमेरे लिए काम नहीं कर रहा है, फिर LANGUAGEभी। देखें कि लैंग एनवायरमेंट वैरिएबल ओवरराइड क्यों कर रहा है जो मेरे लिए भाषा नहीं बदल रहा है?
gertvdijk

1
@gertvdijk: इसके लिए धन्यवाद; सेटिंग के बिना भी यह उत्तर काम करता LANGUAGEहै, इसका एक अपवाद है : GNU गेटटेक्स्ट LANGUAGEमूल्य को पूर्वता देता है, सिवाय इसके कि (प्रभावी) LC_MESSAGESमूल्य (आमतौर पर अप्रत्यक्ष रूप से LANGया इसके माध्यम से सेट होता है LC_ALL) Cया (इसका पर्यायवाची) POSIX। इस बात पर भी ध्यान दें कि LANGUAGEइस उत्तर में क्या होना चाहिए, जबकि यह डिफ़ॉल्ट रूप से सेट किया गया है, और यदि यह सेट है, तो आपको इसे एक विशिष्ट लोकेल की भाषा ("C" / "POSIX" के विपरीत) पर स्विच करना होगा , जो तुमने क्या पाया
mklement0

"सी" लोकेल (यूएस अंग्रेजी संदेशों के साथ, आवश्यक रूप से) पर स्विच करते समय आपका उत्तर बहुत अच्छा काम करता है, लेकिन अन्य स्थानों के लिए तब तक काम नहीं करेगा जब तक LANGUAGEकि स्पष्ट रूप से परेशान या ओवरराइड न हो। प्रश्न के सामान्य शीर्षक को देखते हुए, यह संभावना है कि लोग इस उत्तर को गैर-अंग्रेजी भाषा में भी स्विच करना चाहेंगे, इसलिए कृपया इस जानकारी को अपने उत्तर में जोड़ने पर विचार करें।
mklement0

@ mklement0 प्रश्न के संदर्भ को देखते हुए (अंग्रेजी त्रुटि संदेश पोस्ट करते हुए), मुझे लगता है कि वर्तमान पोस्ट पर्याप्त है। LANGUAGEयदि आप चाहते हैं तो आप विवरणों को समझाने के लिए एक और उत्तर जोड़ सकते हैं :)
Lekensteyn

जैसा कि आपने सुझाव दिया है, मैंने अपना जवाब जोड़ दिया है। यदि आप मेरे आकलन से सहमत हैं कि भविष्य के पाठक किसी भी भाषा में स्विच करने की तलाश में यहां आ सकते हैं (जैसा कि कई लोगों ने पहले ही सक्रिय रूप से संकेत दिया है), तो कृपया अपने प्रश्न के उत्तर में एक लिंक जोड़ें। इसके अलावा, मेरा सुझाव है कि LANGUAGEआपके नमूना आउटपुट के मूल्य को बदलना nl, जो कि आपके स्थानीय होने पर वास्तविक डिफ़ॉल्ट मान है nl_NL.UTF-8
mklement0

9

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

शुरू करने से पहले, आपको संदेश तालिकाओं के साथ स्थापित करना होगा sudo apt-get install language-pack-<lang-tag>, जहां <lang-tag>एक सरल आरटीएफ 5646 भाषा सबटैग है , जैसे कि esस्पेनिश।

पृष्ठभूमि की जानकारी

GNU gettext आधारित उपयोगिताओं गैरमानक को वरीयता देने के LANGUAGEवातावरण चर [1] POSIX से परिभाषित वातावरण वातावरण चर से अधिक LC_ALL, LC_MESSAGESऔर LANG(इसी क्रम में)।

यह देखते हुए कि LANGUAGEडिफ़ॉल्ट रूप से Ubuntu सिस्टम पर सेट किया जाता है [2] , अर्थात् एक को -स्ट्रिंग के LANGमूल्य है कि या तो एक सरल भाषा टैग को दर्शाता है (जैसे, esस्पेनिश के लिए) या एक भाषा-क्षेत्र टैग (जैसे, de_DEजर्मन का जर्मनी संस्करण के लिए), LANGUAGEकिसी भिन्न भाषा के संदेशों को प्रभावी होने के लिए आपको परेशान या ओवरराइड करना होगा । [3]

विकल्प 1: सेट करें LANGUAGE

उदाहरण : स्पैनिश पर स्विच करें ( es) संदेश तदर्थ:

$ LANGUAGE=es ls NoSuchFile
ls: no se puede acceder a NoSuchFile: No existe el archivo o el directorio

नोट : एक सरल भाषा टैग जैसे कि esपर्याप्त है, लेकिन आप एक क्षेत्र पहचानकर्ता (उदाहरण के लिए, es_ARअर्जेंटीना के लिए), और यहां तक ​​कि एक चारसेट प्रत्यय (जैसे, es_AR.UTF-8) जोड़ सकते हैं ।
हालाँकि, स्थानीय संदेश केवल भाषा के स्तर पर ही मौजूद हो सकते हैं , और कमबैक उन संदेशों का उपयोग करना है जो भाषा के भाग से मेल खाते हैं ( es, इस मामले में)।

विकल्प 2: परेशान करें LANGUAGEऔर सेट करेंLC_ALL

यह वैकल्पिक समाधान पहले अपरिभाषित LANGUAGE करता है, और फिर POSIX लोकेल पर्यावरण चर LC_ALLका उपयोग निहित रूप से सेट करने के लिए करता है LC_MESSAGES[4] :

$ LANGUAGE= LC_ALL=es_ES.UTF-8 ls NoSuchFile
ls: no se puede acceder a NoSuchFile: No existe el archivo o el directorio

इस समाधान में सभी स्थानीयकरण पहलुओं को निर्दिष्ट स्थान (जैसे कि LC_TIMEदिनांक / समय प्रारूप के लिए) और ( अनुमानित ) सेटिंग का लाभ LC_MESSAGESभी वांछित भाषा के गैर- जीएनयू कार्यक्रमों को सूचित करता है ।

नोट कैसे LC_ALLकी आवश्यकता है सटीक, पूर्ण , चारसेट प्रत्यय सहित स्थान नाम, प्रभावी (होने के लिए es_ES.UTF-8) (के विपरीत LANGUAGEहै, जिसके लिए एक सरल भाषा टैग पर्याप्त (की तरह है es))। यही सेटिंग LC_MESSSAGESऔर लागू होता है LANG। अमान्य / गैर-इंस्टॉल किए गए स्थानीय नाम को निर्दिष्ट करने से POSIX लोकेल और इसलिए यूएस इंग्लिश में वापसी होती है।


फुटनोट

[1] कारण है कि Lekensteyn का जवाब भी काम करता है बिना unsetting / अधिभावी LANGUAGEएक है अपवाद : अगर (प्रभावी) LC_MESSAGESमूल्य (आमतौर पर के माध्यम से परोक्ष रूप से सेट LANGया LC_ALL) या तो है Cया (इसके पर्याय) POSIXका मान पर ध्यान दिए बिना, कि मूल्य सम्मान दिया जाता है, LANGUAGE, यदि कोई। इसके विपरीत, यदि (प्रभावी) LC_MESSAGESमूल्य कोई अन्य है, तो विशिष्ट स्थान, LANGUAGEपूर्वता लेता है।

[२] यह उबंटू पर लागू होता है , लेकिन अन्य स्वादों के लिए आवश्यक नहीं है ; Lekensteyn कहा गया है कि Kubuntu करता नहीं सेट LANGUAGE
तर्क से, डिफ़ॉल्ट रूप से सेट नहीं किया LANGUAGEजाना चाहिए , यह देखते हुए कि इसकी अनुपस्थिति में मूल्य द्वारा निहित मूल्य (जो वर्तमान स्थानीय निर्धारित करता है) का सम्मान किया जाता है। LC_MESSAGESLANG

[३] आप इस दृष्टिकोण का उपयोग [यूएस] अंग्रेजी में स्विच करने के लिए भी कर सकते हैं LANGUAGE=Cया LANGUAGE=POSIX( या , LANG=C/ , के विकल्प के रूप में LANG=POSIX), हालांकि मैं स्पष्ट नहीं हूं कि क्या यह सक्रिय रूप से मान्यता प्राप्त है या बस एक कमबैक तंत्र है, जिसे देखते हुए ये मान दान करते हैं एक भाषा टैग के साथ शुरू नहीं ; शायद बेहतर विकल्प होगा en_US

[४] एक किनारे का मामला है जहां यह दृष्टिकोण काम नहीं करता है: एक निष्पादन योग्य पथ के साथ आह्वान करने की कोशिश करना - चाहे रिश्तेदार या निरपेक्ष - निर्दिष्ट भाषा पर स्विच नहीं करता है, जबकि एक मात्र फ़ाइल नाम नहीं करता है:
LANGUAGE= LC_ALL=es_ES.UTF-8 /path/to/no_such_utilityकाम नहीं करता है (एक संदेश आउटपुट करता है वर्तमान स्थान में), जबकि
LANGUAGE= LC_ALL=es_ES.UTF-8 no_such_utility(एक स्पेनिश त्रुटि संदेश आउटपुट)।
अगर किसी को पता है कि क्यों और क्या इसके लिए एक अच्छा कारण है, तो हमें बताएं।


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