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