मैं सिस्टम लोकेल को कैसे कस्टमाइज़ कर सकता हूं?


24

सिस्टम प्रशासन भाषा समर्थन पाठ। मैं केवल मानक स्थान चुन सकता हूं, लेकिन मैं ठीक-ठीक धुन देना चाहूंगा। उदाहरण के लिए विंडोज में मैं समय और तारीख प्रारूप, माप इकाइयों, दशमलव विभाजक, मुद्रा, आदि जैसी चीजों को मैन्युअल रूप से अनुकूलित कर सकता हूं - मैं इसे उबंटू में कैसे कर सकता हूं?

जवाबों:


28

यह उत्तर प्रदर्शित करेगा कि कैसे एक लोकेल को पूरी तरह से अनुकूलित किया जाए, वैकल्पिक रूप से मौजूदा लोकेल को आधार के रूप में उपयोग किया जाए। इस उत्तर में जिस प्रकार के स्थान का उपयोग किया जाएगा, वह i18nप्रकार है; इस तरह के लोकेल को उत्तर के शरीर में "लोकेल" शब्द के हर उल्लेख में निहित किया जाएगा।

एक गाइड खोजें

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

उपकरण चाहिए

एकमात्र उपकरण जो आपको स्थानों के साथ काम करने की आवश्यकता है

  1. एक पाठ संपादक। कोई भी करेगा, हालांकि वीआईएम बहिष्कृत होगा।
  2. एक पाठ से यूनिकोड कनवर्टर। यह सबसे अधिक उम्मीद की जाएगी कि आपके पास एक नहीं था, इसलिए मैं आपको एक सरल प्रदान करूंगा। इसे प्राप्त करने के लिए अगली उपधारा पढ़ें।

मैं आपको एक निर्देशिका बनाने और उस कार्य से संबंधित हर चीज को सहेजने की सलाह देता हूं जो आप उस स्थान पर करेंगे।

पाठ-से-यूनिकोड कनवर्टर (एनकोडेस्टर)

नोट: यदि आप गैर-सामान्य वर्णों का उपयोग कर रहे हैं, तो आपको मेरे द्वारा लिखी गई स्क्रिप्ट के साथ समस्या हो सकती है; आप नास द्वारा जुड़ी वैकल्पिक लिपियों पर एक नज़र डालना चाहते हैं

निम्न कोड को किसी फ़ाइल में सहेजें। यह फ़ाइल आपके सिस्टम द्वारा एक पायथन स्क्रिप्ट के रूप में पहचानी जाएगी, जो ठीक है क्योंकि यह एक है। यह मार्गदर्शिका मानती है कि आपको स्क्रिप्ट कहा जाता है encodestr

#!/usr/bin/python

def encode(string):
    newstring = str()
    for ch in string:
        newstring += "<U%04X>" % ord(ch)
    return newstring

if __name__ == '__main__':
    import sys
    print encode(sys.argv[1])

आपके द्वारा सहेजे जाने के बाद, फ़ाइल निष्पादन की अनुमति दें - यह काम आएगा। आप कर सकते हैं कि nautilus का उपयोग करके, या टर्मिनल से निम्न कमांड चलाकर, उस निर्देशिका पर जिसमें आपने स्क्रिप्ट को सहेजा था chmod +x encodestr:।

अब आप इस स्क्रिप्ट को उसी निर्देशिका पर चलाकर देख सकते हैं ./encodestr hello:। आपको इसके बराबर आउटपुट मिलना चाहिए <U0068><U0065><U006C><U006C><U006F>

किसी मौजूदा स्थान को संशोधित करें

मौजूदा लोकेल को संशोधित करना सबसे आसान मामला है, क्योंकि आदर्श रूप में आप एक ऐसा लोकेल चुनेंगे जो आपकी आवश्यकताओं को पूरी तरह से फिट करता है, उस स्थिति में आपको केवल छोटे संशोधन करने की आवश्यकता होती है। इसे दर्जी करने के लिए, आप यह जानने के लिए मार्गदर्शिका का उपयोग कर सकते हैं कि आप किन वर्गों को बदलना चाहते हैं और आप उन्हें कैसे बदल सकते हैं। सभी इंस्टॉल किए गए स्थानों में रहते हैं /usr/share/i18n/locales, हालांकि गाइड में अब तक बनाए गए हर स्थान में बहुत कुछ है।

हालाँकि, जब आप एक लोकेल खोलते हैं, तो पहली बात यह होगी कि आप अंग्रेजी शब्दों को अजीब <UXXXX>कोड के रूप में पढ़ेंगे । आपको ये कोड बनाने में सक्षम होने की आवश्यकता होगी - यह वह जगह है जहां encodestrस्क्रिप्ट आती है।

जब आप जानते हैं कि आपको किन वर्गों को बदलना है, तो आपको अनुभाग में निहित प्रत्येक क्षेत्र को जानना होगा।

उदाहरण के लिए, LC_TIMEअनुभाग में फ़ील्ड t_fmtऔर कई अन्य शामिल हैं। गाइड पर प्रत्येक क्षेत्र का अपना विवरण है ।

अब जब आप जानते हैं कि किस फ़ील्ड को संशोधित करना है, तो यह जानने के लिए कि कौन से मान फ़ील्ड को स्वीकार करते हैं, फिर से गाइड का उपयोग करें

उदाहरण के लिए, फ़ील्ड t_fmtपाठ और सामान्य स्ट्रैफ़्म चर को स्वीकार करता है ।

बस जब आप जानते हैं कि जिन क्षेत्रों को आप संशोधित करना चाहते हैं, उन पर क्या लिखना है, तो encodestrस्क्रिप्ट के माध्यम से पाठ को इसके एन्कोडेड के बराबर में चलाएं ।

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

उदाहरण के लिए, यदि आप क्षेत्र Time: %Tमें समय प्रारूप रखना चाहते हैं, तो t_fmtदौड़ें ./encodestr "Time: %T"; यह वापस आ जाएगा <U0054><U0069><U006D><U0065><U003A><U0020><U0025><U0054>और इसलिए आपके पास t_fmt <U0054><U0069><U006D><U0065><U003A><U0020><U0025><U0054>आपके लोकेल में लाइन होगी (यह संबंधित अनुभाग में है, निश्चित रूप से)।

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

खरोंच से एक स्थान बनाना

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

LC_SECTION
copy "locale"
END LC_SECTION

LC_SECTIONवह अनुभाग कहां है जिसे आप संशोधित करना चाहते हैं, और localeवह स्थान है जिसे आप उस अनुभाग से कॉपी करना चाहते हैं।

उदाहरण के लिए, यदि आप अंग्रेजी लोकेल में समय प्रारूप को कॉपी करना चाहते हैं, तो आपके पास यह टेक्स्ट आपकी कस्टम लोकेल फाइल होगी:

LC_TIME
copy "en_GB"
END LC_TIME

और यह आपको बहुत सारे काम बचाता है और आश्वासन देता है कि संदर्भित लोकेशन में किए गए किसी भी परिवर्तन को आपके लिए प्रतिबिंबित किया जाएगा।

अपने कस्टम लोकेल को इंस्टॉल करना

नीचे मैं जो कदम दिखाने जा रहा हूं वह इष्टतम नहीं हो सकता है, लेकिन काम करता है।

  1. अपने स्थान का संकलन करें। घबराओ मत! इसमें कोई समय नहीं लगता है। बस वह कमांड चलाएं sudo localedef -i custom -f UTF-8 custom.UTF-8 -c -vजहां customआपके लोकेल का नाम है।

  2. /usr/share/i18n/locales/निर्देशिका में अपने स्थान की प्रतिलिपि बनाएँ । ऐसा करने के लिए आपको निश्चित रूप से sudo के निजीकरण की आवश्यकता होगी , और आप इसे उस कमांड के साथ कर सकते हैं sudo cp locale /usr/share/i18n/locales/जहां localeआपके कस्टम लोकेल का फ़ाइल नाम है।

  3. में अपने स्थान को निर्दिष्ट करें /var/lib/locales/supported.d/। उदाहरण के लिए, एक फ़ाइल नाम बनाएं /var/lib/locales/supported.d/asdऔर लाइन जोड़ें custom UTF-8, जहां कस्टम आपके लोकेल का नाम है।

  4. मैजिक कमांड चलाएं। मैं वास्तव में नहीं जानता कि वास्तव में यह कमांड क्या करता है, लेकिन यह महत्वपूर्ण है। भागो sudo locale-gen। यह सबसे अधिक संभावना है कि यह उन उपलब्ध स्थानों के संदर्भ उत्पन्न करता है जहां जरूरत है।

  5. अपने सिस्टम को लोकेल का उपयोग करने के लिए कहें। यदि आप चाहते हैं कि सिस्टम-वाइड तरीके से लोकेल का उपयोग किया जाए, तो /etc/environmentफ़ाइल को संशोधित करें । यदि नहीं, तो आप अपनी ~/.profileफ़ाइल को संशोधित कर सकते हैं , या कोई अन्य जो स्टार्टअप पर उपलब्ध है। यदि आपको नहीं पता कि बाद का मतलब क्या है तो चिंता न करें, बस ~/.profileफ़ाइल का उपयोग करें । इसमें आपको क्या लिखना है, यह जानने के लिए, पहले localeकमांड को रन करें । ऐसा लगता है कि आइटम की सूची जारी करना चाहिए LANGUAGE, LC_MESSAGES, LC_CTYPEऔर कई अन्य। आप लिखेंगे, प्रत्येक अनुभाग के लिए जो आप चाहते हैं (पिछली कमांड द्वारा सूचीबद्ध), अलग-अलग लाइनों पर, यह SECTION="locale"वह स्थान SECTIONहै जहां localeआपके कस्टम लोकेल का नाम और नाम है।

उदाहरण के लिए, यदि आप नीदरलैंड से समय प्रारूप का उपयोग करना चाहते हैं, लेकिन अंग्रेजी भाषा, लिखें:

LANGUAGE="en_GB:en"
LC_TIME="nl_NL"

नोट: यदि आप प्रत्येक लोकेल सेटिंग के लिए एक लोकेल का उपयोग करना चाहते हैं, तो लिखें LC_ALL="locale"कि localeआपके कस्टम लोकेल का नाम कहां है। यदि आप हर चीज के लिए एक लोकेल का उपयोग करना चाहते हैं लेकिन भाषा के लिए, आप लिख सकते हैं LANG="locale"और (दूसरी पंक्ति में, निश्चित रूप से) LANGUAGE="locale":XXजहां XXआप चाहते हैं उस भाषा के लिए 2 अक्षर कोड है।

उदाहरण के लिए, यदि आप डच लोकेल और अंग्रेजी भाषा का उपयोग करना चाहते हैं, तो आप उपयोग कर सकते हैं:

LANG="nl_NL"
LANGUAGE="nl_NL:en"

तुम पूर्ण कर चुके

अगली बार जब आप लॉग इन करेंगे, तो आपका लोकेल उपयोग में होना चाहिए। आप localeफिर से कमांड चलाकर इसका परीक्षण कर सकते हैं ।

कृपया इस गाइड में विसंगतियों या झूठे बयानों के बारे में टिप्पणी करें!


हाय, आपके द्वारा उपयोग किया गया अजगर कोड, सभी मामलों के लिए काम नहीं करता है। ग्रीक वर्णों के लिए πμ, यह <U00CF><U0080><U00CE><U00BC>अपेक्षित पात्रों के बजाय, आउटपुट करता है <U03C0><U03BC>। यहाँ एक लिंक है जो काम करता है।
nass

आपके सहयोग के लिए धन्यवाद! मैंने आपकी टिप्पणी को उस पाठ में शामिल किया है जहाँ यह कारण था :)
सेवरो राज

मुझे दौड़ने custom UTF-8से /usr/share/i18n/SUPPORTEDपहले जोड़ना था sudo locale-gen। अन्यथा यह सूची में नहीं होगा।
विल्बर्ट

मेरे स्ट्रिंग स्क्रिप्ट संग्रह में आपकी स्ट्रिंग कन्वर्ट विधि को कॉपी किया गया: github.com/budhajeewa/shell-scripts/commit/… । धन्यवाद!
बुद्धजेव

अगर किसी को इस उत्तर में विधि के विपरीत करने के लिए एक फ़ंक्शन की तलाश है (मुझे स्थानीय फ़ाइलों में मौजूदा हेक्स मानों को पढ़ने के लिए इसकी आवश्यकता है।), मैंने उसके लिए एक PHP स्क्रिप्ट लिखी है। github.com/budhajeewa/shell-scripts/commit/… । अगर कोई इसे पायथन में लिख सकता है, तो मुझे बताएं। मैं इसे अपने संग्रह में जोड़ना चाहूंगा।
बुद्धजेव

8

सुनिश्चित नहीं हैं कि आप किस प्रकार का अनुकूलन चाहते हैं, लेकिन आप अपने उपयोग से कुछ स्थानीय चर सेट कर सकते हैं ~/.locale। उदाहरण के लिए, अंग्रेजी संदेश लेकिन जर्मन समय और पसंद का उपयोग करने के लिए

export LC_ALL=""
export LANG="en_GB.utf8"
export LC_CTYPE="de_DE.utf8"
export LC_NUMERIC="de_DE.utf8"
export LC_TIME="de_DE.utf8"
export LC_COLLATE="de_DE.utf8"
export LC_MONETARY="de_DE.utf8"
export LC_MESSAGES="en_GB.utf8"
export LC_PAPER="de_DE.utf8"
export LC_NAME="en_GB.utf8"
export LC_ADDRESS="de_DE.utf8"
export LC_TELEPHONE="de_DE.utf8"
export LC_MEASUREMENT="de_DE.utf8"
export LC_IDENTIFICATION="de_DE.utf8"

कस्टम स्थान बनाना भी संभव है। दिनांक के लिए यह मार्गदर्शिका देखें ।


1
नहीं, मुझे निचले स्तर का अनुकूलन चाहिए। उदाहरण के लिए: अंग्रेजी संदेश, मीट्रिक इकाइयाँ, संशोधित चेक दिनांक / समय (DD.MM.YYYY HH: mm बजाय DMYYYY H.MM), एक दशमलव विभाजक के रूप में एक डॉट (चेक लोकेल में इसके लिए अल्पविराम है) और € मुद्रा के रूप में (चेक लोकेल में Kč मुद्रा है)।
इवान

समझा। ले रहा है en_USके लिए LC_NUMERICऔर de_DEके लिए LC_MONETARYऔर LC_MEASUREMENTआप अन्य दुष्प्रभाव देता है? व्यक्तिगत लोकल जेनरेट करने के लिए नया लिंक भी देखें।
कार्स्टन थिल

1
लिंक के पीछे दिए गए निर्देश इस सवाल का जवाब आश्चर्यजनक रूप से देते हैं, हो सकता है कि आप लिंक सबसे महत्वपूर्ण बिट्स को दोहरा सकते हों, अगर लिंक हर दिन उपलब्ध नहीं है?
Stefano Palazzo
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.