ฉันจะกำหนดโลแคลระบบเองได้อย่างไร?


24

ที่ระบบ→การดูแลระบบการสนับสนุนภาษา ข้อความ ฉันสามารถเลือกตำแหน่งที่ตั้งมาตรฐานได้ แต่ฉันต้องการปรับแต่ง ตัวอย่างเช่นใน Windows ฉันสามารถปรับแต่งสิ่งต่าง ๆ เช่นรูปแบบเวลาและวันที่หน่วยวัดตัวคั่นทศนิยมสกุลเงิน ฯลฯ ด้วยตนเองฉันจะทำสิ่งนี้ใน Ubuntu ได้อย่างไร

คำตอบ:


28

คำตอบนี้จะแสดงให้เห็นถึงวิธีการปรับแต่งสถานที่อย่างเต็มรูปแบบเลือกที่จะใช้สถานที่ที่มีอยู่เป็นฐาน ประเภทของสถานที่ที่จะใช้ในคำตอบนี้คือi18nประเภท; ประเภทของสถานที่ดังกล่าวจะถูกบอกเป็นนัยในการกล่าวถึงทุกคำว่า "สถานที่" ในเนื้อหาของคำตอบ

ค้นหาคำแนะนำ

สิ่งแรกที่คุณต้องปรับแต่ง locale คือทำความรู้จักกับรูปแบบของ locale เอดิเตอร์โลแคลเว็บนี้มีคำอธิบายที่ครอบคลุมของทุกฟิลด์ในโลแคลแม้จะไม่สามารถใช้งานได้โดยใครก็ตามในลักษณะที่ถูกต้อง นี่จะเป็นแนวทางในการใช้งาน

เครื่องมือที่จำเป็น

เครื่องมือเดียวที่คุณต้องใช้กับโลแคลคือ

  1. โปรแกรมแก้ไขข้อความ สิ่งใดก็ตามที่ทำได้แม้ว่า VIM จะเป็นเลิศ
  2. ตัวแปลงข้อความเป็น Unicode เป็นที่คาดหวังมากที่สุดว่าคุณไม่ได้มีดังนั้นฉันจะให้คุณง่าย ๆ อ่านหมวดย่อยต่อไปเพื่อรับมัน

ฉันแนะนำให้คุณสร้างไดเรกทอรีและบันทึกทุกสิ่งที่เกี่ยวข้องกับงานที่คุณจะทำในสถานที่นั้น

ตัวแปลงข้อความเป็น Unicode (เข้ารหัส)

หมายเหตุ:หากคุณใช้อักขระที่ไม่ธรรมดาคุณอาจพบปัญหากับสคริปต์ที่ฉันเขียนด้านล่าง คุณอาจต้องการที่จะดูที่สคริปต์ทางเลือกการเชื่อมโยงโดยNASS

บันทึกรหัสต่อไปนี้เป็นไฟล์ ระบบของคุณจะระบุไฟล์นี้เป็นสคริปต์ไพ ธ อนซึ่งไม่เป็นไรเพราะเป็นไฟล์เดียว 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])

หลังจากที่คุณบันทึกแล้วให้สิทธิ์การดำเนินการกับไฟล์ - สิ่งนี้จะเป็นประโยชน์ chmod +x encodestrคุณสามารถทำได้โดยใช้หอยโข่งหรือโดยการเรียกใช้จากสถานีคำสั่งต่อไปนี้ในไดเรกทอรีที่คุณบันทึกสคริปต์:

./encodestr helloตอนนี้คุณสามารถทดสอบสคริปต์นี้โดยการทำงานในไดเรกทอรีเดียวกัน: <U0068><U0065><U006C><U006C><U006F>คุณควรจะได้รับการส่งออกเท่ากับ

แก้ไขสถานที่ที่มีอยู่

การแก้ไขโลแคลที่มีอยู่เป็นกรณีที่ง่ายที่สุดเนื่องจากคุณจะต้องเลือกโลแคลที่เหมาะกับความต้องการของคุณเกือบทั้งหมดซึ่งในกรณีนี้คุณต้องทำการปรับเปลี่ยนเพียงเล็กน้อย ในการปรับแต่งมันคุณสามารถใช้คำแนะนำเพื่อทราบว่าส่วนใดเป็นส่วนที่คุณต้องการเปลี่ยนและวิธีที่คุณสามารถเปลี่ยนได้ สถานที่ติดตั้งทั้งหมดนั้นอยู่ใน/usr/share/i18n/localesนั้นอย่างไรก็ตามไกด์นั้นมีทุกภาษาที่เคยสร้างมา

อย่างไรก็ตามสิ่งแรกที่คุณจะสังเกตเห็นเมื่อคุณเปิดสถานที่เกิดเหตุคือคุณจะอ่านคำภาษาอังกฤษได้มากเท่ากับ<UXXXX>รหัสแปลก ๆ คุณจะต้องสามารถสร้างรหัสเหล่านี้ได้ซึ่งเป็นที่encodestrมาของสคริปต์

เมื่อคุณรู้ว่าส่วนใดที่คุณต้องเปลี่ยนคุณจำเป็นต้องรู้แต่ละฟิลด์ที่มีอยู่ในส่วน

ตัวอย่างเช่นLC_TIMEส่วนมีฟิลด์t_fmtและอื่น ๆ อีกมากมาย แต่ละเขตมีคำอธิบายของตัวเองบนคู่มือ

เมื่อคุณทราบว่าต้องปรับเปลี่ยนฟิลด์ใดให้ใช้คำแนะนำอีกครั้งเพื่อค้นหาว่าฟิลด์ยอมรับค่าใด

ยกตัวอย่างเช่นสนามt_fmtยอมรับข้อความและร่วมกันตัวแปร strfmt

เมื่อคุณรู้ว่าจะเขียนอะไรในฟิลด์ที่คุณต้องการแก้ไขให้รันข้อความผ่าน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

ขอบคุณสำหรับข้อมูลของคุณ! ผมได้รวมความคิดเห็นของคุณในข้อความที่มันเป็น :) เนื่องจาก
Severo Raz

ผมต้องเพิ่มcustom UTF-8ไปก่อนที่ผมจะสามารถเรียกใช้/usr/share/i18n/SUPPORTED sudo locale-genมิฉะนั้นจะไม่อยู่ในรายการ
Wilbert

คัดลอกวิธีแปลงสตริงของคุณไปยังคอลเลกชันเชลล์สคริปต์ของฉัน: github.com/budhajeewa/shell-scripts/commit/ … ขอขอบคุณ!
budhajeewa

หากใครกำลังมองหาฟังก์ชั่นที่จะทำย้อนกลับของวิธีการในคำตอบนี้ (ฉันต้องการมันเพื่ออ่านค่าฐานสิบหกที่มีอยู่ในไฟล์สถานที่เกิดเหตุ) ฉันเขียนสคริปต์ PHP สำหรับที่ github.com/budhajeewa/shell-scripts/commit/… . หากใครบางคนสามารถเขียนมันลงใน Python ได้โปรดแจ้งให้เราทราบ ฉันต้องการเพิ่มสิ่งนั้นในคอลเล็กชันของฉัน
budhajeewa

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čเป็นภาษาเช็ก)
Ivan

ฉันเห็น. การen_USสำหรับLC_NUMERICและde_DEสำหรับLC_MONETARYและLC_MEASUREMENTช่วยให้คุณมีผลข้างเคียงอื่น ๆ ? ดูลิงก์ใหม่สำหรับสร้างสถานที่ส่วนบุคคล
Carsten Thiel

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