ตั้งค่าภาษาที่กำหนดเองใน Gnome3 (บน Fedora 20)


15

ฉันได้สร้างlocales ของตัวเองและวางไว้/etc/locale.confซึ่งจะมีผลถ้าฉันเข้าสู่ระบบในคอนโซลเสมือน (Ctrl + Alt + F2) ในเซสชั่น Gnome3 ของฉันตัวแปรเหล่านั้นไม่ได้ถูกตั้งค่า สำหรับแอปพลิเคชั่นเทอร์มินัลฉันสามารถใส่ไว้ในนั้นได้.bashrcแต่นั่นจะไม่ช่วยฉันในการใช้งานกราฟิกเช่น Thunderbird และ Pidgin

ฉันได้ลองทำตามคำแนะนำเหล่านี้: การตั้งค่าโลแคลในการเริ่มต้นเชลล์ที่ไม่ได้ใช้โดยเซสชั่น GNOMEและเลียนแบบบั๊กในLocale - ArchWikiด้วยการสร้าง.pam_environmentไฟล์ แต่locales ยังคงถูกกำหนดโดย Gnome3 มีบทสนทนาการกำหนดค่าในการตั้งค่า Gnome แต่อนุญาตให้ตั้งค่าชุดค่า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"

ไม่มีใครรู้วิธีตั้งค่ากำหนดเองlocaleใน Gnome3 หรือไม่

คำตอบ:


9

ข้อมูลพื้นฐาน

ฉันทดสอบวิธีแก้ปัญหาใน Fedora 21 ด้วย GNOME Shell 3.14.4 แต่ฉันเชื่อว่าสามารถใช้กับรุ่นอื่น ๆ ได้เช่นกัน

สิ่งแรกที่จะเข้าใจได้ว่าสภาพแวดล้อมเดสก์ทอป GNOME /etc/locale.confแทนที่คำนิยามสถานที่เกิดเหตุทั้งระบบจึงไม่ได้รับผลกระทบจาก นอกจากนี้อาจมีแอปพลิเคชันที่มีการตั้งค่าภาษาของตนเองและไม่ได้ใช้ระบบหรือการตั้งค่า GNOME เลย ในคู่มือนี้ฉันจะอธิบายวิธีปรับแต่งการตั้งค่าภาษาตามความต้องการของคุณและ GNOME และระบบจะสอดคล้องจากมุมมองของสถานที่


การตรวจสอบสถานะของสถานที่ปัจจุบัน

การตั้งค่าทั้งระบบ

จากคู่มือผู้ดูแลระบบ Fedora 21 :

การตั้งค่าโลแคลทั่วทั้งระบบจะถูกเก็บไว้ใน/etc/locale.confไฟล์ซึ่งจะถูกอ่านเมื่อบูทก่อนกำหนดโดยsystemd daemon การตั้งค่าโลแคลที่กำหนดค่า/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

การตั้งค่า GNOME

$ 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_IDENTIFICATIONsedส่วนได้รับการแก้ไขในระหว่างการสร้างไฟล์โดยใช้ ดังนั้นเราไม่จำเป็นต้องสัมผัสพวกเขาอีกต่อไป

  • 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

ในการเปิดใช้งานโลแคลใหม่ใน GNOME ให้รันคำสั่งต่อไปนี้ แทนที่hc_ILด้วยสถานที่ของคุณ:

$ gsettings set org.gnome.system.locale region "hc_IL.utf8"

ตรวจสอบการตั้งค่าใหม่

ขั้นตอนสุดท้ายคือการตรวจสอบว่าทุกอย่างทำงานตามที่คาดไว้ ในการรีโหลดการตั้งค่าทั้งหมดวิธีที่ง่ายที่สุดสำหรับฉันคือการรีบูต

  • อ้างถึงส่วน "การตรวจสอบสถานะสถานที่ปัจจุบัน" เพื่อตรวจสอบว่าการกำหนดค่าระบบถูกต้อง
  • ใช้ GNOME Shell และแอพพลิเคชั่นที่ขึ้นอยู่กับโลแคล (กราฟิกและคอนโซล) และตรวจสอบว่ามันทำงานตามที่คาดไว้กับโลแคลใหม่ เช่นถ้าคุณกำหนด LC_TIME คุณสามารถเรียกใช้dateคำสั่งเพื่อตรวจสอบรูปแบบวันที่:

    $ date +%x
    21/04/15
    

หมายเหตุ:ทุกอย่างถูกทดสอบใน Fedora 21 พร้อม GNOME 3.14 ลีนุกซ์รุ่นอื่น ๆ อาจต้องการขั้นตอนเพิ่มเติมหรือต่างกัน

โปรดแสดงความคิดเห็นหากคุณพบปัญหาใด ๆ กับคำแนะนำ


ฉันสามารถยืนยันการทำงานนี้ได้ใน Fedora 22 ด้วย Cinnamon มันน่าจะทำงานกับ GNOME ได้เช่นกัน
Dee'Kej

1
ฉันแน่ใจว่าถ้าพวกเขาพยายามอย่างหนักจริง ๆ พวกเขาสามารถสร้างสถานที่ที่กำหนดเองได้ยากขึ้นอีกนิด
5heikki

ฉันรัก GNOME แต่นี่ไร้สาระ อย่างน้อยก็ให้ผู้ใช้ที่มีอำนาจสามารถตั้งค่าสถานที่ได้ตามที่ต้องการ ฉันต้องการโลแคลสหรัฐสำหรับสิ่งส่วนใหญ่ แต่เครื่องพิมพ์ของฉันใช้กระดาษ A4 ...
static_rtti
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.