मुझे अपना लोकेल क्या सेट करना चाहिए और ऐसा करने के निहितार्थ क्या हैं?


20

यह प्रश्न पूछकर उत्तेजित किया गया था क्रोमियम ब्राउज़र "प्रिंट से फ़ाइल" के लिए डिफ़ॉल्ट पेपर का आकार निर्धारित करने की अनुमति नहीं देता है , और चैट पर @ गिलेज़ के साथ बातचीत से भी। जैसा कि @don_crissti द्वारा बताया गया है, और जैसा कि मेरे द्वारा सत्यापित किया गया है, लोकेल (कम से कम LC_PAPER) को बदलने से पेपर के आकार का चयन करने में फर्क पड़ता है।

मैंने कभी नहीं सोचा था कि क्या चुनना है, और हमेशा साथ चला गया en_US.UTF-8क्योंकि यह एक उचित डिफ़ॉल्ट विकल्प की तरह लग रहा था।

हालांकि, चैट पर प्रति @Gilles ( http://chat.stackexchange.com/transcript/message/17017095#17017095 पर शुरू होने वाली बातचीत देखें )। अर्क:

गिल्स: LC_PAPER $ LANG को डिफॉल्ट करता है

गिले: आपके पास लैंग = en_US.UTF-8 होना चाहिए। यह एक बुरा विचार है: यह LC_COLLATE सेट करता है और यह लगभग हमेशा एक बुरी बात है

Gilles: LC_COLLATE सही समतुल्यता का वर्णन नहीं करता है, यह बहुत अधिक प्रतिबंधात्मक है (यह चरित्र द्वारा चरित्र जाता है) LANG को हटा दें और इसके बजाय LC_CTYPE और LC_PAPER सेट करें

यदि आप अंग्रेजी के अलावा किसी अन्य भाषा में संदेश चाहते हैं, तो Gilles: plus LC_MESSAGES

जाहिर है, ऐसे मुद्दे हैं जिनके बारे में मुझे जानकारी नहीं है, और मुझे यकीन है कि कई अन्य भी हैं। इसलिए, आपको लोकेशन सेट करते समय किन मुद्दों पर विचार करना चाहिए और आपको उन्हें कैसे सेट करना चाहिए? मैं हमेशा सिर्फ dpkg-reconfigure localesडेबियन में दौड़ता हूं , और इसके बारे में दो बार नहीं सोचा।

विशिष्ट प्रश्न: क्या मुझे en_IN.UTF-8 पर अपना स्थान निर्धारित करना चाहिए? क्या ऐसा करने की कोई कमियां हैं?

यह भी देखें: क्या (चाहिए) LC_COLLATE वर्ण श्रेणियों को प्रभावित करता है?

जवाबों:


30

लोकेल सेटिंग उपयोगकर्ता की प्राथमिकताएँ हैं जो आपकी संस्कृति से संबंधित हैं।

स्थानीय नाम

सभी मौजूदा यूनिक्स प्रकारों के बारे में जिन्हें मैं जानता हूं (लेकिन कुछ प्राचीन वस्तुओं पर नहीं), स्थानीय नाम उसी पैटर्न का अनुसरण करते हैं:

  • एक ISO 639-1 लोअरकेस दो अक्षर भाषा कोड, या एक ISO 639-2 यदि भाषा कोई दो अक्षर का कोड है तीन अक्षर भाषा कोड। उदाहरण के लिए, enअंग्रेजी के लिए, deजर्मन के लिए, jaजापानी के लिए, ukयूक्रेनी के लिए, berनाई के लिए,…
  • कई लेकिन सभी नहीं भाषाओं के लिए, एक अंडरस्कोर _एक के बाद ISO 3166 दो अक्षर अपरकेस देश कोड। इस प्रकार: en_USअमेरिकी अंग्रेजी के लिए, en_UKब्रिटिश अंग्रेजी के लिए, fr_CAकनाडा (क्यूबेक) फ्रेंच, de_DEजर्मनी de_ATके जर्मन के ja_JPलिए , ऑस्ट्रिया के जर्मन के लिए , जापानी (जापान के लिए), आदि।
  • वैकल्पिक रूप से, एक बिंदु .एक के नाम के बाद एन्कोडिंग चरित्र जैसे UTF-8, ISO-8859-1, KOI8-U, GB2312, Big5कम से कम जीएनयू libc के साथ, आदि (मैं नहीं जानता कि यह कैसे व्यापक है), मामला और विराम चिह्न नाम एन्कोडिंग में नजरअंदाज कर दिया है। उदाहरण के लिए, zh_CN.UTF-8मंदारिन (सरलीकृत) चीनी UTF-8 में कूटबद्ध है, जबकि zh_CNमंदारिन चीनी zh_TWGB2312 में कूटबद्ध है , और ताइवान (पारंपरिक) चीनी Big5 में कूटबद्ध है।
  • वैकल्पिक रूप से, @एक वैरिएंट के नाम पर एक हस्ताक्षर । वेरिएंट का अर्थ स्थानीय-निर्भर है। उदाहरण के लिए, कई यूरोपीय देशों में एक @euroलोकल वैरिएंट होता है, जहाँ मुद्रा चिन्ह € होता है और जहाँ एन्कोडिंग एक होती है, जिसमें यह वर्ण (ISO 8859-15 या ISO 8859-16) शामिल होता है, जैसा कि पुराने मुद्रा चिह्न के साथ अनियंत्रित संस्करण के विपरीत होता है। उदाहरण के लिए, en_IEअंग्रेजी (अंग्रेजी, आयरलैंड) लैटिन 1 (आईएसओ 8859-1) को एन्कोडिंग और पाउंड को मुद्रा प्रतीक के रूप में en_IE@euroउपयोग करता है जबकि लैटिन 9 (आईएसओ 8859-15) को एन्कोडिंग और मुद्रा प्रतीक के रूप में उपयोग करता है।

इसके अलावा, दो स्थानीय नाम हैं जो सभी यूनिक्स जैसी प्रणाली पर मौजूद हैं: Cऔर POSIX। ये नाम पर्यायवाची और माध्य कंप्यूटर हैं, यानी डिफ़ॉल्ट सेटिंग्स जो कि कंप्यूटर प्रोग्राम द्वारा पार्स किए गए डेटा के लिए उपयुक्त हैं।

लोकेल सेटिंग

निम्नलिखित लोकेल श्रेणियों को पोसिक्स द्वारा परिभाषित किया गया है :

  • LC_CTYPE: टर्मिनल अनुप्रयोगों द्वारा उपयोग किया जाने वाला वर्ण: वर्गीकरण डेटा (जो वर्ण अक्षर, विराम चिह्न, रिक्त स्थान, अमान्य, आदि) और केस रूपांतरण हैं। पाठ उपयोगिताएँ आमतौर पर LC_CTYPEचरित्र सीमाओं को निर्धारित करने के लिए ध्यान केंद्रित करती हैं।
  • LC_COLLATE: कॉलेशन (यानी छँटाई) क्रम। यह सेटिंग कई कारणों से बहुत सीमित उपयोग की है:
    • अधिकांश भाषाओं में जटिल नियम होते हैं जो इस बात पर निर्भर करते हैं कि क्या छांटा जा रहा है (उदाहरण के लिए शब्द और उचित नाम एक ही क्रम का उपयोग नहीं कर सकते हैं) और द्वारा व्यक्त नहीं किया जा सकता है LC_COLLATE
    • ऐसे कुछ अनुप्रयोग हैं जहां उचित क्रमबद्ध मामले मायने रखते हैं जो सॉफ्टवेयर द्वारा किए जाते हैं जो स्थानीय सेटिंग्स का उपयोग करते हैं। उदाहरण के लिए, शब्द प्रोसेसर फ़ाइल की भाषा और एन्कोडिंग को फ़ाइल में ही संग्रहीत करते हैं (अन्यथा फ़ाइल को अलग-अलग लोकेल सेटिंग्स के साथ सिस्टम पर सही तरीके से संसाधित नहीं किया जाएगा) और पर्यावरण द्वारा निर्दिष्ट लोकेल सेटिंग्स की परवाह नहीं करते हैं।
    • LC_COLLATEबुरा साइड इफेक्ट हो सकता है, विशेष रूप से क्योंकि यह सॉर्ट ऑर्डर ए <a <बी <… का कारण बनता है, जो "ए और जेड के बीच" के माध्यम से लोअरकेस अक्षरों को शामिल करता है। विशेष रूप से, बहुत सामान्य नियमित अभिव्यक्तियाँ जैसे [A-Z]कुछ अनुप्रयोगों को तोड़ती हैं
  • LC_MESSAGES: सूचनात्मक और त्रुटि संदेशों की भाषा।
  • LC_NUMERIC: संख्या स्वरूपण: दशमलव और हजारों विभाजक। दशमलव विभाजक
    के .रूप में कई एप्लिकेशन हार्ड-कोड । यह LC_NUMERICबहुत उपयोगी और संभावित खतरनाक नहीं है:
    • यहां तक ​​कि अगर आप इसे सेट करते हैं, तब भी आपको डिफ़ॉल्ट प्रारूप बहुत बार दिखाई देगा।
    • आपको ऐसी स्थिति में आने की संभावना है जहां एक अनुप्रयोग स्थानीय-निर्भर उत्पादन का उत्पादन करता है और दूसरा अनुप्रयोग .दशमलव बिंदु या ,क्षेत्र विभाजक होने की अपेक्षा करता है ।
  • LC_MONETARY: जैसे LC_NUMERIC, लेकिन स्थानीय मुद्रा की मात्रा के लिए।
    बहुत कम अनुप्रयोग इसका उपयोग करते हैं।
  • LC_TIME: दिनांक और समय प्रारूपण: कार्यदिवस और महीने के नाम, 12 या 24 घंटे की घड़ी, तिथि भागों का क्रम, विराम चिह्न आदि।

GNU libc, जो आपको गैर-एम्बेडेड लिनक्स पर मिलेगा, अतिरिक्त स्थानीय श्रेणियों को परिभाषित करता है:

  • LC_PAPER: डिफ़ॉल्ट पेपर आकार (ऊंचाई और चौड़ाई द्वारा परिभाषित)।
  • LC_NAME, LC_ADDRESS, LC_TELEPHONE, LC_MEASUREMENT, LC_IDENTIFICATION: मैं इन का उपयोग करता है किसी भी आवेदन का पता नहीं है।

पर्यावरण चर

अनुप्रयोग जो लोकेल सेटिंग्स का उपयोग करते हैं, उन्हें पर्यावरण चर से निर्धारित करते हैं।

  • तब LANGपर्यावरण चर का मूल्य तब तक उपयोग किया जाता है जब तक कि किसी अन्य सेटिंग द्वारा ओवरराइड नहीं किया जाता है। यदि LANGसेट नहीं किया गया है, तो डिफ़ॉल्ट लोकेल है C
  • LC_xxxनाम वातावरण चर के रूप में इस्तेमाल किया जा सकता।
  • यदि LC_ALLसेट किया जाता है, तो अन्य सभी मूल्यों को अनदेखा किया जाता है; यह मुख्य रूप से LC_ALL=Cरन अनुप्रयोगों को सेट करने के लिए उपयोगी है , जहां वे चलाए जा रहे हैं, भले ही उसी आउटपुट का उत्पादन करने की आवश्यकता हो।
  • इसके अलावा, GNU libc के लिएLANGUAGE कमियां परिभाषित करने के लिए उपयोग करता है LC_MESSAGES(उदाहरण के LANGUAGE=fr_BE:fr_FR:enलिए बेल्जियम फ्रेंच पसंद करने के लिए, या यदि अनुपलब्ध फ्रांस फ़्रेंच, या यदि अनुपलब्ध अंग्रेज़ी)।

स्‍थानों को स्‍थापित करना

स्थान डेटा बड़ा हो सकता है, इसलिए कुछ वितरण उन्हें प्रयोग करने योग्य रूप में शिप नहीं करते हैं और इसके लिए अतिरिक्त इंस्टॉलेशन चरण की आवश्यकता होती है।

  • डेबियन पर, स्थानों को स्थापित करने dpkg-reconfigure localesके लिए, संवाद बॉक्स में सूची से चलाएं और चुनें, या संपादित करें /etc/locale.genऔर फिर चलाएं locale-gen
  • उबंटू पर, स्थानों को स्थापित करने के लिए, locale-genतर्कों के रूप में स्थानों के नामों के साथ चलाएं ।

आप अपने खुद के लोकेल को परिभाषित कर सकते हैं

सिफ़ारिश करना

उपयोगी सेटिंग्स हैं:

  • LC_CTYPEउस भाषा और एन्कोडिंग पर सेट करें, जिसमें आप अपनी पाठ फ़ाइलों को एन्कोड करते हैं। सुनिश्चित करें कि आपके टर्मिनल उस एन्कोडिंग का उपयोग करते हैं।
    अधिकांश भाषाओं के लिए, केवल एन्कोडिंग मायने रखती है। कुछ अपवाद हैं; उदाहरण के लिए, एक अपरकेस iहै Iअधिकांश भाषाओं में लेकिन İतुर्की में ( tr_TR)।
  • LC_MESSAGESउस भाषा पर सेट करें, जिसमें आप संदेश देखना चाहते हैं।
  • सेट LC_PAPERकरने के लिए en_USअगर आप अमेरिका पत्र डिफ़ॉल्ट पेपर आकार और कुछ और (जैसे के बारे में होना चाहते हैं en_GB) आप ए 4 चाहते हैं।
  • वैकल्पिक रूप से, LC_TIMEअपने पसंदीदा समय प्रारूप पर सेट करें।

जैसा कि ऊपर बताया गया है, सेटिंग LC_COLLATEऔर से बचें LC_NUMERIC। यदि आप उपयोग करते हैं LANG, तो इन दोनों श्रेणियों को स्पष्ट रूप से इन पर सेट करके ओवरराइड करें C


हाय गाइल्स, विस्तृत जवाब के लिए धन्यवाद। डेबियन पर डिफ़ॉल्ट सेटिंग्स को ओवरराइड करने के लिए एक अच्छी जगह कहां है? चूँकि मुझे A4 पेपर आकार की आवश्यकता है, इसलिए मुझे लगता है कि मुझे डिफ़ॉल्ट मान को ओवरराइड करने की आवश्यकता है LC_PAPER। और क्या मैं इसे रिबूट किए बिना सिस्टम में अपडेट कर सकता हूं?
फहीम मिठ्ठ

1
@FaheemMitha पर्यावरण चर सेट करने के लिए सबसे अच्छा डिस्ट्रो / शेल-अज्ञेय तरीका क्या है? और अगर आप इसे डेबियन पर सिस्टम-वाइड सेट करना चाहते हैं, तो यह भी है /etc/default/locale। जब आप लॉग इन करते हैं तो ये फाइलें प्रभावी होती हैं; आप export LC_PAPER=…उस शेल से लॉन्च किए गए कमांड को प्रभावित करने के लिए एक शेल में कर सकते हैं ।
गिल्स एसओ- बुराई को रोकें '
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.