यदि ओपी ने अनुरोध किया, तो लेकेन्स्टाइन का सहायक उत्तर बहुत अच्छा काम करता है, यदि आप मांग पर अमेरिकी अंग्रेजी पर स्विच करना चाहते हैं , लेकिन यदि आप मांग पर एक अलग भाषा में स्विच करना चाहते हैं , तो अधिक काम करने की आवश्यकता है।
शुरू करने से पहले, आपको संदेश तालिकाओं के साथ स्थापित करना होगा 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(एक स्पेनिश त्रुटि संदेश आउटपुट)।
अगर किसी को पता है कि क्यों और क्या इसके लिए एक अच्छा कारण है, तो हमें बताएं।
LANGयाLANG_ALLमेरे लिए काम नहीं कर रहा है, फिरLANGUAGEभी। देखें कि लैंग एनवायरमेंट वैरिएबल ओवरराइड क्यों कर रहा है जो मेरे लिए भाषा नहीं बदल रहा है?