स्थानीय परिवेश चर को कैसे बदलें?


18

मैंने en_US.utf8 , et_EE.iso88591 और ru_RU.utf8 स्थानीयकरण फ़ाइलें जनरेट की हैं । अब अगर मैं किसी भी लोकल वैरिएबल को ru_RU.utf8 या en_US.utf8 में बदलने का प्रयास करता हूं , तो इसका कोई प्रभाव नहीं पड़ता है:

# locale -a
C
en_US.utf8
et_EE
et_EE.iso88591
POSIX
ru_RU.utf8
# LC_TIME=ru_RU.utf8
# locale | grep LC_TIME
LC_TIME="et_EE.iso88591"
# LC_TIME="ru_RU.utf8"
# locale | grep LC_TIME
LC_TIME="et_EE.iso88591"
# 

हालाँकि, यदि मैं LANG = चर को बदलता हूं , तो अन्य सभी चर लेकिन LANGUAGE = और LC_ALL = LANG = चर का मान लेते हैं । क्या प्रत्येक स्थान चर को अलग से संशोधित करने का कोई तरीका है? इसके अलावा, क्या मैं सही हूं कि स्थानीय चर नियमित शेल चर नहीं हैं, लेकिन स्थानीय उपयोगिता के मापदंडों की तरह ?

जवाबों:


15

आप स्वतंत्र रूप से किसी भी स्थानीय श्रेणी को निर्धारित कर सकते हैं। LANGकेवल उन श्रेणियों पर लागू होता है जो स्पष्ट रूप से सेट नहीं हैं।

LANGऔर LC_xxxसाधारण पर्यावरण चर हैं। वे localeउपयोगिता के लिए सेटिंग्स नहीं हैं : localeकार्यक्रम किसी भी स्थानीय प्रसंस्करण में शामिल नहीं है, यह वर्तमान और उपलब्ध स्थानीय सेटिंग्स की रिपोर्ट करने के लिए बस एक छोटी सी उपयोगिता है।

जब आप लिखते हैं LC_TIME=ru_RU.utf8, यह एक पर्यावरण चर सेट नहीं करता है, केवल एक शेल चर। शेल चर शेल में आंतरिक होते हैं, वे अन्य कार्यक्रमों द्वारा नहीं देखे जाते हैं। दूसरी ओर, पर्यावरण चर, उन कार्यक्रमों से विरासत में मिला है जो शेल शुरू करते हैं। आपको चर को पर्यावरण में निर्यात करने की आवश्यकता है:

$ LC_TIME=ru_RU.utf8
$ locale | grep LC_TIME
LC_TIME="et_EE.iso88591"
$ export LC_TIME
$ locale | grep LC_TIME
LC_TIME="ru_RU.utf8"

या सीधे

$ export LC_TIME=ru_RU.utf8
$ locale | grep LC_TIME
LC_TIME="ru_RU.utf8"

"LANG और LC_xxx साधारण पर्यावरण चर हैं" आप कैसे जानते हैं कि LANGऔर LC_xxxपर्यावरण चर हैं? मेरे परीक्षण से पता चलता है कि केवल LANGऔर LANGUAGEऔर LC_MESSAGESऔर LC_ALLवातावरण चर रहे हैं, जबकि जैसे अन्य चर LC_CTYPEऔर LC_MONETARYवातावरण चर (यह भी, वे खोल चर नहीं हैं) नहीं कर रहे हैं?
rony_t

@rony_t आप अनुप्रयोगों और पुस्तकालयों के स्रोत कोड को देख सकते हैं, उनके प्रलेखन को देख सकते हैं, या उनके साथ प्रयोग कर सकते हैं। उदाहरण के लिए, के env LC_TIME=en_GB dateसाथ गणना करें env LC_TIME=fr_FR dateऔर env PATH="$PATH" date(जाहिर है, आपके सिस्टम पर मौजूद स्थान चुनें)। जाहिर है, प्रत्येक चर किसी दिए गए प्रक्रिया के वातावरण में सेट किया जा सकता है या नहीं भी हो सकता है। आपने क्या परीक्षण किया? क्या आप सुनिश्चित हैं कि आपने जिस एप्लिकेशन का उपयोग किया है, वह अलग-अलग तरह से LC_CTYPE(काफी सामान्य) और LC_MONETARY(बहुत दुर्लभ) व्यवहार करता है ?
गाइल्स का SO- बुराई पर रोक '30

टर्मिनल में, मैं मार डाला printenvबैश के वातावरण चर सूची आदेश है, और केवल LANGऔर LANGUAGEऔर LC_MESSAGESऔर LC_ALLवातावरण चर के रूप में सूचीबद्ध किया गया। मैं भी आदेश निष्पादित set -o posixआदेश के बाद setवातावरण चर और पार्टी के खोल चर प्राप्त करने के लिए, और केवल LANGऔर LANGUAGEऔर LC_MESSAGESऔर LC_ALLसूचीबद्ध किया गया। तो इसका मतलब है कि LANGऔर LANGUAGEऔर LC_MESSAGESऔर LC_ALLवातावरण चर और स्थान चर के बाकी नहीं हैं, और यह भी कि वे खोल चर नहीं हैं।
rony_t

@rony_t नहीं। इसका मतलब है कि आप वातावरण चर की स्थापना की है LANG, LANGUAGE, LC_MESSAGESऔर LC_ALL। (या तो आपने यह स्पष्ट रूप से किया था या आपके वितरण या आपके सिस्टम एडमिनिस्ट्रेटर ने आपके लिए किया था।) आप किसी भी (संक्रियात्मक रूप से मान्य) नाम से एक पर्यावरण चर सेट कर सकते हैं! लेकिन कुछ नाम कुछ एप्लिकेशन के लिए सार्थक हैं, और कुछ नाम नहीं हैं। LC_MESSAGES, LC_CTYPE, LC_TIMEऔर इतने पर अनुप्रयोग जो त्रुटि संदेशों में से भाषा, वर्ण एन्कोडिंग, समय स्वरूप के बारे में परवाह द्वारा इतने पर उपयोग किया जाता है, और।
गिल्स एसओ- बुराई को रोकना '30

@rony_t वैसे आपका कॉन्फ़िगरेशन बहुत अजीब है। LC_ALLअन्य सभी सेटिंग को ओवरराइड करता है, इसलिए अन्य लोकल वैरिएबल का मूल्य मायने नहीं रखता है। यह आम तौर पर केवल अस्थायी रूप से किसी दिए गए स्थान का उपयोग करने के लिए एक कार्यक्रम को मजबूर करने के लिए उपयोग किया जाता है, यह आपके सामान्य वातावरण में होने का कोई मतलब नहीं है।
गिल्स एसओ- बुराई को रोकें '30

6

फेडोरा / सेंटोस / आरएचईएल आधारित डिस्ट्रोस के तहत, मेरा मानना ​​है कि जब आप locale -aइस सिस्टम फ़ाइल में कमांड चलाते हैं, तो आप लोकेल के किसी एक लोकेल को बदल सकते हैं।

/etc/sysconfig/i18n

मेरे फेडोरा 14 प्रणाली पर उदाहरण के लिए:

$ more /etc/sysconfig/i18n 
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"

GNOME के ​​तहत आप सहायता ऐप चला सकते हैं:

system-config-language

जो इस GUI को लाता है:

             लंग के ss।  जीयूआई

मुझे लगता है कि यह डेबियन / उबंटू डिस्ट्रोस के लिए थोड़ा अलग है। मेरा मानना ​​है कि यह यह फाइल है:

/etc/default/locale

मेरा मानना ​​है कि वे पर्यावरण चर रहे हैं, लेकिन पूरी तरह से निश्चित नहीं हैं कि यदि आवेदन उनका उपयोग करते हैं तो बिल्कुल कैसे।

संदर्भ


4

RedHat 6 पर कम से कम, ध्यान दें कि यदि LC_ALL सेट है, तो अन्य LC_ * पर्यावरण चर सेट करने का कोई प्रभाव नहीं होगा, क्योंकि LC_ALL अन्य सभी LC_ * पर्यावरण चर पर पूर्वता लेता है।

[root@nbu76 bin]# LC_TIME=en_US.UTF-8
[root@nbu76 bin]# export LC_TIME
[root@nbu76 bin]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_IE"
LC_NUMERIC="en_IE"
LC_TIME="en_IE"
...
LC_ALL=en_IE
[root@nbu76 bin]# unset LC_ALL
[root@nbu76 bin]# locale
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME=en_US.UTF-8
...
LC_ALL=
[root@nbu76 bin]# export LC_TIME=en_IE
[root@nbu76 bin]# locale
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME=en_IE
....
LC_ALL=

1

डेबियन प्रणालियों में, कोई भी dpkg-reconfigure localesमुख्य भाषा सेट करने और दूसरों को उपलब्ध कराने के लिए दौड़ सकता है; फिर कोई भी फ़ॉलबैक भाषाओं के लिए वातावरण चर update-localeसेट करने के लिए चला सकता है ।LANGUAGE/etc/default/locale


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