पृष्ठभूमि की जानकारी
मैंने गनोम शैल 3.14.4 के साथ फेडोरा 21 पर समाधान का परीक्षण किया, लेकिन मेरा मानना है कि इसे अन्य संस्करणों पर भी लागू किया जा सकता है।
समझने वाली पहली बात यह है कि गनोम डेस्कटॉप वातावरण सिस्टम-वाइड लोकेल परिभाषाओं को ओवरराइड करता है और इस तरह से प्रभावित नहीं होता है /etc/locale.conf। इसके अलावा, ऐसे अनुप्रयोग भी हो सकते हैं जिनका अपना स्थानीय विन्यास हो और सिस्टम या GNOME सेटिंग का उपयोग बिल्कुल नहीं करते हों। इस मार्गदर्शिका में मैं आपकी आवश्यकताओं और GNOME को स्थानीय सेटिंग्स को अनुकूलित करने का एक तरीका बताऊंगा और प्रणाली स्थानीय दृष्टिकोण से सुसंगत होगी।
वर्तमान स्थानीय स्थिति की जाँच करना
सिस्टम-वाइड सेटिंग्स
से फेडोरा 21 सिस्टम प्रशासक गाइड :
सिस्टम-वाइड लोकेल सेटिंग्स को /etc/locale.confफाइल में स्टोर किया जाता है, जिसे सिस्टमड डेमॉन द्वारा शुरुआती बूट पर पढ़ा जाता है। /etc/locale.confजब तक कि व्यक्तिगत कार्यक्रम या अलग-अलग उपयोगकर्ता उन्हें ओवरराइड नहीं करते, तब तक कॉन्फ़िगर की गई लोकेल सेटिंग्स हर सेवा या उपयोगकर्ता को विरासत में मिलती हैं।
वर्तमान स्थानीय स्थिति को देखने के लिए हम चला सकते हैं:
$ localectl status
System Locale: LANG=en_US.UTF-8
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_MONETARY=en_US.UTF-8
LC_PAPER=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
VC Keymap: us
X11 Layout: us
गनोम सेटिंग्स
$ gsettings get org.gnome.system.locale region
'en_US.UTF-8'
GNOME की केवल एक सेटिंग है। सूक्ति-नियंत्रण-केंद्र के स्रोत कोड को त्वरित रूप से देखने से ऐसा लगता है कि जब set_localed_locale()फ़ंक्शन को कॉल किया जाता है, तो यह निम्नलिखित सभी श्रेणियां (LC_TIME, LC_NUMERIC, LC_MONETARY, LC_MEASUREMENT, LC_PAPER) को उसी एक लोकेल में सेट करता है org.gnome.system.locale region।
अलग-अलग लोकल सेटिंग्स को मिक्स करना कस्टम लोकेल बनाए बिना असंभव लगता है, लेकिन सौभाग्य से यह बहुत जटिल काम नहीं है।
कस्टम लोकेल बनाना
मुझे लगता है कि उदाहरण के लिए समझाने का सबसे आसान तरीका है। मेरी विशिष्ट मामले में मैं एक कस्टम स्थान, मुख्य रूप से यहूदी (के आधार पर करना चाहते थे he_IL ), लेकिन LC_NAME साथ, से LC_MESSAGES en_US और LC_TIME (साथ संशोधित first_weekdayऔर first_workdayसे) en_GB ।
लोकेल परिभाषा फ़ाइलें हथियाने
आपको एक विचार होना चाहिए कि आप किन स्थानों को मिलाना चाहते हैं। पहले हमें संबंधित परिभाषा फ़ाइलों का पता लगाने की आवश्यकता है, जो अंदर मिल सकती हैं /usr/share/i18n/locales/। मेरे उदाहरण पर वापस, मुझे निम्नलिखित की आवश्यकता थी: he_IL , en_US और en_GB । मैंने अपने घर में एक कार्यशील फ़ोल्डर स्थापित किया और उसमें आवश्यक फ़ाइलों की प्रतिलिपि बनाई:
$ cd /usr/share/i18n/locales
$ mkdir -v ~/custom-locale ; cp -v he_IL en_US en_GB ~/custom-locale/
एक नई परिभाषा फ़ाइल बनाना
मैंने अपने लोकल hc_IL को कॉल करने का निर्णय लिया और एक आधार के रूप में he_IL लिया । निम्न पंक्तियाँ hc_ILउस सामग्री के साथ एक नई फ़ाइल बनाती हैं he_ILऔर रास्ते में एक स्ट्रिंग he_IL की सभी घटनाओं को hc_IL के साथ फ़ाइल के अंदर बदल देती हैं ।
$ cd ~/custom-locale/
$ sed 's/he_IL/hc_IL/g' he_IL > hc_IL
नई परिभाषा फ़ाइल को संशोधित करना
अब हम अपनी जरूरतों के लिए नए स्थान को अनुकूलित कर सकते हैं। ~/custom-locale/hc_ILअपने पसंदीदा पाठ संपादक के साथ नई बनाई गई फ़ाइल खोलें । मैं विम का उपयोग करता हूं (इसमें स्थानीय परिभाषा फ़ाइलों के लिए उचित सिंटैक्स हाइलाइटिंग है):
$ vim ~/custom-locale/hc_IL
उन लोगों के लिए जिन्होंने अभी तक अपना पसंदीदा संपादक नहीं चुना है और विम उनके चाय का कप नहीं है, वे gedit का उपयोग कर सकते हैं :)
$ gedit ~/custom-locale/hc_IL
फ़ाइल संरचना बहुत जटिल नहीं है। अनिवार्य रूप से, इसका निर्माण वर्गों से किया गया है। से वातावरण (5) आदमी पृष्ठों:
स्थानीय परिभाषा में प्रत्येक स्थान श्रेणी के लिए एक भाग होता है। प्रत्येक भाग को किसी अन्य मौजूदा स्थान से कॉपी किया जा सकता है या खरोंच से परिभाषित किया जा सकता है। यदि श्रेणी को कॉपी किया जाना चाहिए, तो परिभाषा में एकमात्र मान्य कीवर्ड की प्रतिलिपि उस स्थान के नाम से होती है जिसे कॉपी किया जाना चाहिए।
नकल की धारणा बहुत उपयोगी है। यह समय बचाता है और परिणामस्वरूप फ़ाइल स्पष्ट और संक्षिप्त है। उदाहरण के लिए, पूरे वर्गों को कॉपी करने के बजाय, आपके पास हो सकता है:
LC_MESSAGES
copy "en_US"
END LC_MESSAGES
एक स्थानीय परिभाषा फ़ाइल पर पूरा प्रलेखन के माध्यम से पहुँचा जा सकता है:
$ man 5 locale
यद्यपि, यदि आप केवल एक कस्टम लोकेल बनाना चाहते हैं, जो मौजूदा लोगों का मिश्रण है, तो हर विवरण को समझने की आवश्यकता नहीं है।
मेरे मामले में मैंने निम्नलिखित श्रेणियां और कीवर्ड संशोधित किए हैं:
LC_IDENTIFICATION
title "Custom Hebrew locale"
source "mydomain.ws"
address "http:////www.mydomain.ws"
contact ""
email "admin@mydomain.ws"
tel ""
fax ""
language "Hebrew"
territory "Israel"
revision "1.0"
date "2015-04-21"
नोट: LC_IDENTIFICATION अनुभाग में सभी " श्रेणी .. " लाइनों का उपयोग करके फ़ाइल निर्माण के दौरान संशोधित किया गया है । इसलिए हमें अब उन्हें छूने की जरूरत नहीं है।sed
LC_TIME
मैंने पूरा खंड en_GB से कॉपी किया और केवल उन पंक्तियों को संशोधित किया जो सप्ताह के पहले दिन और पहले कार्य दिवस को इंगित करती हैं:
first_weekday 1
first_workday 1
बाकी श्रेणियां जो मैंने छोड़ी हैं, वे अपनी सामग्री को कॉपी निर्देश के साथ बदल देते हैं :
LC_NAME
copy "en_US"
END LC_NAME
यही है, परिभाषा फ़ाइल तैयार है। फ़ाइल को सहेजना न भूलें :)
नया लोकेल कंपाइल करें और कॉपी करें
नए लोकेल का संकलन निम्नलिखित कमांड को रूट के रूप में या sudo का उपयोग करके किया जाता है । hc_ILअपने स्थान से प्रतिस्थापित करें:
$ sudo localedef -c -v -i hc_IL -f UTF-8 hc_IL.UTF-8
यदि संकलन सफल होता है तो संकलित स्थानीय डेटा को संग्रह फ़ाइल में जोड़ा जाता है /usr/lib/locale/locale-archive।
स्थानीय परिभाषा परिभाषा निर्देशिका में नई लोकेल परिभाषा फ़ाइल की प्रतिलिपि बनाएँ। hc_ILअपने स्थान से प्रतिस्थापित करें:
$ sudo cp -v hc_IL /usr/share/i18n/locales/
नया स्थान सक्रिय करना
इस चरण में हम नए लोकेल का उपयोग करने के लिए सिस्टम और GNOME को कॉन्फ़िगर करना चाहते हैं।
सिस्टम-वाइड सेटिंग्स
/etc/locale.confफ़ाइल को रूट के रूप में संपादित करें और LC_अपने नए लोकेल से शुरू होने वाली प्रत्येक पंक्ति को सेट करें। उदाहरण के लिए:
LANG=en_US.UTF-8
LC_NUMERIC=hc_IL.utf8
LC_TIME=hc_IL.utf8
LC_MONETARY=hc_IL.utf8
LC_PAPER=hc_IL.utf8
LC_MEASUREMENT=hc_IL.utf8
गनोम सेटिंग्स
GNOME में नए लोकेल को सक्रिय करने के लिए निम्नलिखित कमांड चलाएँ। hc_ILअपने स्थान से प्रतिस्थापित करें:
$ gsettings set org.gnome.system.locale region "hc_IL.utf8"
नई सेटिंग मान्य करना
अंतिम चरण यह मान्य करना है कि सब कुछ अपेक्षित रूप से काम करता है। सभी सेटिंग्स को पुनः लोड करने के लिए मेरे लिए सबसे आसान था रिबूट करना।
- सिस्टम कॉन्फ़िगरेशन सही है यह जाँचने के लिए "वर्तमान लोकेशन स्थिति की जाँच करें" अनुभाग देखें।
GNOME शेल और लोकेल डिपेंडेंट एप्लिकेशन (ग्राफिकल और कंसोल) का उपयोग करें और जांचें कि वे नए लोकेल के साथ अपेक्षित व्यवहार करते हैं। उदाहरण के लिए, यदि आप LC_TIME को अनुकूलित करते हैं, तो आप dateदिनांक प्रारूप को मान्य करने के लिए कमांड चला सकते हैं :
$ date +%x
21/04/15
नोट: सब कुछ Fedora 21 पर GNOME 3.14 के साथ परीक्षण किया गया था। अन्य लिनक्स वितरणों को अतिरिक्त या अलग-अलग चरणों की आवश्यकता हो सकती है।
कृपया निर्देश के साथ कोई समस्या मिलने पर टिप्पणी करें।