Gnome3 में कस्टम स्थान सेट करें (फेडोरा 20 पर)


15

मैंने अपना स्वयं का कस्टम बनाया है localeऔर उन्हें रखा है /etc/locale.confजिसमें यदि मैं वर्चुअल कंसोल (Ctrl + Alt + F2) पर लॉग इन करता हूं तो वह सफलतापूर्वक प्रभावी हो जाता है। मेरे Gnome3 सत्र में उन चर को सेट नहीं किया गया है, हालांकि। टर्मिनल अनुप्रयोगों के लिए मैं सिर्फ उन्हें जगह दे सकता था .bashrcलेकिन वह थंडरबर्ड और पिजिन जैसे ग्राफिकल अनुप्रयोगों में मेरी मदद नहीं करेगा।

मैंने इन संकेतों का पालन करने की कोशिश की है: शेल प्रारंभ में लोकेल सेटिंग्स को गनोम सत्र द्वारा उपयोग नहीं किया गया है और यहां तक ​​कि एक फ़ाइल बनाकर लोकेल - आर्कवेकी में बग का अनुकरण किया है .pam_environment, लेकिन localeएस अभी भी Gnome3 द्वारा सेट किए गए हैं। सूक्ति सेटिंग्स में एक कॉन्फ़िगरेशन संवाद है लेकिन यह केवल पूर्वनिर्धारित localeसंयोजनों के बहुत सीमित सेट को सेट करने की अनुमति देता है और उन्हें अनुकूलित करने का कोई तरीका नहीं है।

मेरे घर निर्देशिका में प्रासंगिक फ़ाइलें:

user@localhost:~$ ls -lah .dmrc .pam_environment .session .xsession .xsessionrc
lrwxrwxrwx. 1 user user 16 12. Jun 08:57 .dmrc -> /etc/locale.conf
lrwxrwxrwx. 1 user user 16 11. Jun 20:23 .pam_environment -> /etc/locale.conf
lrwxrwxrwx. 1 user user 16 12. Jun 09:09 .session -> /etc/locale.conf
lrwxrwxrwx. 1 user user 16 12. Jun 09:07 .xsession -> /etc/locale.conf
lrwxrwxrwx. 1 user user  9 13. Jun 11:22 .xsessionrc -> .xsession
-rw-rw-r--. 1 user user 66 13. Jun 11:13 .profile

user@localhost:~$ cat .profile 
source /etc/locale.conf

की सामग्री /etc/locale.conf:

LANG="en_US.utf8"
LC_TIME="de_MY.utf8" # NB: de_MY
LC_MONETARY="de_DE.utf8"
LC_PAPER="de_DE.utf8"
LC_NAME="de_DE.utf8"
LC_ADDRESS="de_DE.utf8"
LC_TELEPHONE="de_DE.utf8"
LC_MEASUREMENT="de_DE.utf8"
LC_IDENTIFICATION="de_DE.utf8"

क्या किसी को पता है कि localeGnome3 में कस्टम सेट कैसे किया जाता है?

जवाबों:


9

पृष्ठभूमि की जानकारी

मैंने गनोम शैल 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 के साथ परीक्षण किया गया था। अन्य लिनक्स वितरणों को अतिरिक्त या अलग-अलग चरणों की आवश्यकता हो सकती है।

कृपया निर्देश के साथ कोई समस्या मिलने पर टिप्पणी करें।


मैं दालचीनी के साथ फेडोरा 22 पर इस काम की पुष्टि कर सकता हूं। यह सबसे अधिक संभावना गनोम के साथ भी काम करेगा।
डे'केज

1
मुझे यकीन है कि अगर वे वास्तव में कठिन प्रयास करते हैं, तो वे अभी भी थोड़े कठिन स्थानों पर कस्टम लोकेशन सेट कर सकते हैं।
फेकी

मुझे गनोम पसंद है लेकिन यह हास्यास्पद है। कम से कम बिजली उपयोगकर्ताओं के लिए अपनी स्थानीय सेटिंग सेट करने का एक तरीका छोड़ दें। मुझे ज्यादातर चीजों के लिए एक अमेरिकी लोकेल चाहिए, लेकिन मेरा प्रिंटर A4 पेपर का उपयोग करता है ...
static_rtti
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.