ข้อมูลพื้นฐาน
ฉันทดสอบวิธีแก้ปัญหาใน 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"
ตรวจสอบการตั้งค่าใหม่
ขั้นตอนสุดท้ายคือการตรวจสอบว่าทุกอย่างทำงานตามที่คาดไว้ ในการรีโหลดการตั้งค่าทั้งหมดวิธีที่ง่ายที่สุดสำหรับฉันคือการรีบูต
หมายเหตุ:ทุกอย่างถูกทดสอบใน Fedora 21 พร้อม GNOME 3.14 ลีนุกซ์รุ่นอื่น ๆ อาจต้องการขั้นตอนเพิ่มเติมหรือต่างกัน
โปรดแสดงความคิดเห็นหากคุณพบปัญหาใด ๆ กับคำแนะนำ