ฉันควรตั้งค่าภาษาของฉันไว้ที่อะไรและความหมายของการทำเช่นนั้นคืออะไร


19

คำถามนี้ถูกกระตุ้นโดยการถามคำถาม เบราว์เซอร์ Chromium ไม่อนุญาตให้ตั้งค่าขนาดกระดาษเริ่มต้นสำหรับ "Print to File"และการสนทนากับ @Gilles บนแชท ตามที่ชี้แจงโดย @don_crissti และเมื่อตรวจสอบโดยฉันแล้วการเปลี่ยนสถานที่ (อย่างน้อยLC_PAPER) ทำให้เกิดความแตกต่างในขนาดกระดาษที่เลือก

ฉันไม่เคยคิดมากว่าจะเลือกอะไรและมักจะไปด้วยen_US.UTF-8เพราะมันเป็นทางเลือกที่สมเหตุสมผล

อย่างไรก็ตามต่อ @Gilles ในการแชท (ดูการสนทนาเริ่มต้นที่http://chat.stackexchange.com/transcript/message/17017095#17017095 ) สารสกัดจาก:

Gilles: LC_PAPER เริ่มต้นที่ $ LANG

Gilles: คุณต้องมี LANG = en_US.UTF-8 นั่นเป็นความคิดที่ไม่ดี: มันกำหนด LC_COLLATE และนั่นก็เป็นสิ่งที่ไม่ดีอยู่เสมอ

Gilles: LC_COLLATE ไม่ได้อธิบายการเรียงหน้าที่ถูกต้องมันมีข้อ จำกัด มากเกินไป (ลบตัวอักษรทีละตัวอักษร) ลบ LANG และตั้งค่า LC_CTYPE และ LC_PAPER แทน

Gilles: บวก LC_MESSAGES หากคุณต้องการข้อความในภาษาอื่นที่ไม่ใช่ภาษาอังกฤษ

เห็นได้ชัดว่ามีปัญหาที่นี่ฉันไม่ทราบและฉันมั่นใจว่าคนอื่น ๆ อีกมากมายก็เช่นกัน ดังนั้นปัญหาใดที่คุณควรพิจารณาเมื่อตั้งค่าตำแหน่งที่ตั้งและคุณควรตั้งค่าอย่างไร ฉันมักจะทำงานdpkg-reconfigure localesใน Debian เสมอและไม่ได้คิดเกี่ยวกับมันสองครั้ง

คำถามเฉพาะ: ฉันควรตั้งค่าภาษาของฉันเป็น en_IN.UTF-8 หรือไม่ มีข้อบกพร่องในการทำเช่นนั้นหรือไม่?

ดูเพิ่มเติมที่: (ควร) LC_COLLATE มีผลกับช่วงอักขระหรือไม่

คำตอบ:


29

สถานที่เกิดเหตุการตั้งค่ามีค่าของผู้ใช้ที่เกี่ยวข้องกับวัฒนธรรมของคุณ

ชื่อโลแคล

ในตัวแปรยูนิกซ์ปัจจุบันทั้งหมดที่ฉันรู้จัก (แต่ไม่ใช่ของโบราณ), ชื่อโลแคลตามรูปแบบเดียวกัน:

  • ISO 639-1ตัวพิมพ์เล็กตัวอักษรสองตัวรหัสภาษาหรือISO 639-2สามตัวอักษรรหัสภาษาถ้าภาษาที่ไม่มีรหัสตัวอักษรสองตัว ตัวอย่างเช่นenสำหรับภาษาอังกฤษdeสำหรับภาษาเยอรมันjaสำหรับภาษาญี่ปุ่นukสำหรับภาษายูเครนberสำหรับภาษาเบอร์เบอร์ ...
  • สำหรับหลายภาษา แต่ไม่ใช่ทุกภาษาขีดเส้นใต้_ตามด้วยรหัสประเทศที่เป็นตัวอักษรสองตัวISO 3166 ดังนั้น: en_USสำหรับภาษาอังกฤษแบบสหรัฐอเมริกา, en_UKภาษาอังกฤษแบบอังกฤษ, fr_CAแคนาดา (ควิเบก) ฝรั่งเศส, de_DEสำหรับเยอรมันเยอรมัน, de_ATเยอรมันเยอรมันออสเตรีย, ja_JPญี่ปุ่น (ญี่ปุ่น), เป็นต้น
  • เลือกจุด.ตามด้วยชื่อของการเข้ารหัสอักขระเช่นUTF-8, ISO-8859-1, KOI8-U, GB2312, Big5ฯลฯ ด้วย libc GNU อย่างน้อย (ผมไม่ทราบวิธีที่แพร่หลายนี้อยู่) กรณีและเครื่องหมายวรรคตอนถูกละเว้นในการเข้ารหัสชื่อ ตัวอย่างเช่นzh_CN.UTF-8เป็นภาษาจีนกลาง (ตัวย่อ) เข้ารหัสใน UTF-8 ในขณะที่zh_CNภาษาจีนกลางเข้ารหัสเป็น GB2312 และzh_TWเป็นภาษาจีนไต้หวัน (ดั้งเดิม) เข้ารหัสใน Big5
  • เป็นทางเลือกเครื่องหมาย at @ตามด้วยชื่อของตัวแปร ความหมายของตัวแปรขึ้นอยู่กับสถานที่ ตัวอย่างเช่นประเทศในยุโรปหลายแห่งมี@euroตัวแปรสถานที่โดยที่สัญลักษณ์สกุลเงินคือ€และที่การเข้ารหัสเป็นหนึ่งที่มีอักขระนี้ (ISO 8859-15 หรือ ISO 8859-16) ซึ่งตรงข้ามกับตัวแปรที่ไม่ได้ตกแต่งด้วยสัญลักษณ์สกุลเงินที่เก่ากว่า ตัวอย่างเช่นen_IE(อังกฤษ, ไอร์แลนด์) ใช้การเข้ารหัส latin1 (ISO 8859-1) และ£เป็นสัญลักษณ์สกุลเงินในขณะที่en_IE@euroใช้การเข้ารหัส latin9 (ISO 8859-15) และ€เป็นสัญลักษณ์สกุลเงิน

นอกจากนี้ยังมีสองชื่อสถานที่ที่มีอยู่ในทุกยูนิกซ์เช่นระบบ: และC POSIXชื่อเหล่านี้มีความหมายเหมือนกันและมีความหมายว่าคอมพิวเตอร์คือการตั้งค่าเริ่มต้นที่เหมาะสมกับข้อมูลที่แยกวิเคราะห์โดยโปรแกรมคอมพิวเตอร์

การตั้งค่าสถานที่

หมวดหมู่โลแคลต่อไปนี้ถูกกำหนดโดยPOSIX :

  • LC_CTYPE: ชุดอักขระที่ใช้งานโดยเทอร์มินัลแอพพลิเคชั่น: ข้อมูลการจำแนกประเภท (ตัวอักษรใดเป็นตัวอักษรเครื่องหมายวรรคตอนช่องว่างไม่ถูกต้อง ฯลฯ ) และการแปลงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ โดยทั่วไปยูทิลิตี้ข้อความจะLC_CTYPEต้องคำนึงถึงขอบเขตของอักขระ
  • LC_COLLATE: การเรียงลำดับ (เช่นการเรียงลำดับ) การตั้งค่านี้ใช้อย่าง จำกัด ด้วยเหตุผลหลายประการ:
    • ภาษาส่วนใหญ่มีกฎที่สลับซับซ้อนซึ่งขึ้นอยู่กับสิ่งที่จะถูกจัดเรียง (เช่นคำพจนานุกรมและชื่อที่เหมาะสมอาจไม่ใช้ลำดับเดียวกัน) และไม่สามารถแสดงออกLC_COLLATEได้
    • มีแอปพลิเคชั่นไม่กี่รายการที่มีเรื่องการเรียงลำดับที่เหมาะสมซึ่งดำเนินการโดยซอฟต์แวร์ที่ใช้การตั้งค่าภาษา ตัวอย่างเช่นโปรแกรมประมวลผลคำเก็บภาษาและการเข้ารหัสไฟล์ในไฟล์เอง (ไม่เช่นนั้นไฟล์จะไม่ถูกประมวลผลอย่างถูกต้องในระบบที่มีการตั้งค่าภาษาต่างกัน) และไม่สนใจการตั้งค่าภาษาที่ระบุโดยสภาพแวดล้อม
    • LC_COLLATEสามารถมีผลข้างเคียงที่น่ารังเกียจโดยเฉพาะอย่างยิ่งเพราะมันทำให้เกิดการเรียงลำดับ A <a <B <…ซึ่งทำให้“ ระหว่าง A และ Z” รวมถึงตัวอักษรตัวเล็ก a ถึง y โดยเฉพาะอย่างยิ่งการแสดงออกปกติที่พบบ่อยมากชอบ[A-Z]ทำลายบางโปรแกรม
  • LC_MESSAGES: ภาษาของข้อมูลและข้อความแสดงข้อผิดพลาด
  • LC_NUMERIC: การจัดรูปแบบตัวเลข: ทศนิยมและตัวคั่นหลักพัน
    แอพพลิเคชั่นหลายตัวใช้รหัสฮาร์ท.เป็นตัวคั่นทศนิยม สิ่งนี้LC_NUMERICไม่ได้มีประโยชน์มากและอาจเป็นอันตราย:
    • แม้ว่าคุณจะตั้งค่าไว้คุณจะยังคงเห็นรูปแบบเริ่มต้นค่อนข้างบ่อย
    • คุณมีแนวโน้มที่จะเข้าสู่สถานการณ์ที่แอปพลิเคชันหนึ่งสร้างเอาต์พุตที่ขึ้นอยู่กับโลแคลและแอปพลิเคชันอื่นคาดว่า.จะเป็นจุดทศนิยมหรือ,เป็นตัวคั่นฟิลด์
  • LC_MONETARY: ชอบLC_NUMERICแต่สำหรับจำนวนเงินในท้องถิ่น
    แอปพลิเคชั่นน้อยมากที่ใช้สิ่งนี้
  • LC_TIME: การจัดรูปแบบวันที่และเวลา: ชื่อวันและเดือน, นาฬิกา 12 หรือ 24 ชั่วโมง, ส่วนของวันที่, เครื่องหมายวรรคตอน, ฯลฯ

GNU libc ซึ่งคุณจะพบบน Linux ที่ไม่ได้ฝังอยู่จะกำหนดหมวดหมู่ของสถานที่เพิ่มเติม:

  • LC_PAPER: ขนาดกระดาษเริ่มต้น (กำหนดโดยความสูงและความกว้าง)
  • LC_NAME, LC_ADDRESS, LC_TELEPHONE, LC_MEASUREMENT, LC_IDENTIFICATION: ผมไม่ทราบว่าของโปรแกรมใด ๆ ที่ใช้เหล่านี้

ตัวแปรสภาพแวดล้อม

แอปพลิเคชันที่ใช้การตั้งค่าภาษาจะพิจารณาจากตัวแปรสภาพแวดล้อม

  • จากนั้นค่าของLANGตัวแปรสภาพแวดล้อมจะถูกใช้เว้นแต่จะถูกแทนที่ด้วยการตั้งค่าอื่น หากไม่ได้กำหนดสถานที่เริ่มต้นคือLANGC
  • LC_xxxชื่อสามารถใช้เป็นตัวแปรสภาพแวดล้อม
  • หากLC_ALLตั้งไว้ค่าอื่น ๆ ทั้งหมดจะถูกละเว้น สิ่งนี้มีประโยชน์เป็นหลักในการตั้งค่าLC_ALL=Cแอพพลิเคชั่นที่ต้องใช้งานเพื่อสร้างเอาต์พุตเดียวกันโดยไม่คำนึงถึงตำแหน่งที่รัน
  • นอกจากนี้ GNU libc ใช้LANGUAGEเพื่อกำหนดทางเลือกสำหรับLC_MESSAGES(เช่นLANGUAGE=fr_BE:fr_FR:enเพื่อให้ชอบภาษาฝรั่งเศสเบลเยียมหรือหากไม่มีฝรั่งเศสฝรั่งเศสหรือหากไม่มีภาษาอังกฤษ)

การติดตั้งสถานที่

ข้อมูลโลแคลอาจมีขนาดใหญ่ดังนั้นการแจกแจงบางอย่างจะไม่จัดส่งในรูปแบบที่ใช้งานได้และต้องการขั้นตอนการติดตั้งเพิ่มเติมแทน

  • ใน Debian, การติดตั้งสถานที่วิ่งdpkg-reconfigure localesและเลือกจากรายการในกล่องโต้ตอบหรือแก้ไขและเรียกใช้/etc/locale.genlocale-gen
  • บน Ubuntu เพื่อติดตั้งโลแคลให้รันlocale-genด้วยชื่อของโลแคลเป็นอาร์กิวเมนต์

คุณสามารถกำหนดสถานที่ของคุณเอง

คำแนะนำ

การตั้งค่าที่มีประโยชน์คือ:

  • ตั้งค่าLC_CTYPEเป็นภาษาและการเข้ารหัสที่คุณเข้ารหัสไฟล์ข้อความของคุณตรวจสอบให้แน่ใจว่าเทอร์มินัลของคุณใช้การเข้ารหัสนั้น
    สำหรับภาษาส่วนใหญ่มีเพียงการเข้ารหัสเท่านั้น มีข้อยกเว้นเล็กน้อย ตัวอย่างเช่นตัวพิมพ์ใหญ่iเป็นIภาษาส่วนใหญ่ แต่เป็นภาษาİตุรกี ( tr_TR)
  • ตั้งค่าLC_MESSAGESเป็นภาษาที่คุณต้องการดูข้อความ
  • ตั้งค่าLC_PAPERเป็นen_USถ้าคุณต้องการให้ US Letter เป็นขนาดกระดาษเริ่มต้นและจะเป็นขนาดอื่นก็ได้ (เช่นen_GB) หากคุณต้องการ A4
  • เลือกกำหนดLC_TIMEเป็นรูปแบบเวลาที่คุณชื่นชอบ

ตามที่ได้อธิบายข้างต้นการตั้งค่าหลีกเลี่ยงและLC_COLLATE LC_NUMERICถ้าคุณใช้อย่างชัดเจนแทนที่ทั้งสองประเภทโดยการตั้งค่าให้พวกเขาLANGC


สวัสดี Gilles ขอบคุณสำหรับคำตอบอย่างละเอียด สถานที่ที่ดีในการแทนที่การตั้งค่าเริ่มต้นใน Debian คือที่ไหน ตั้งแต่ผมจำเป็นต้องมีขนาดกระดาษ A4, LC_PAPERผมคิดว่าผมต้องแทนที่ค่าเริ่มต้นของ และฉันสามารถอัปเดตสิ่งนี้ข้ามระบบโดยไม่ต้องรีบูตเครื่องหรือไม่
Faheem Mitha

1
@FaheemMitha วิธี distro / shell-agnostic ที่ดีที่สุดในการตั้งค่าตัวแปรสภาพแวดล้อมคืออะไร และถ้าคุณต้องการตั้งค่าทั้งระบบบนเดเบียนก็มีเช่น/etc/default/localeกัน ไฟล์เหล่านี้จะมีผลเมื่อคุณล็อกอิน คุณสามารถทำexport LC_PAPER=…ในเปลือกเพื่อส่งผลกระทบต่อคำสั่งเปิดจากเปลือกนั้น
Gilles 'หยุดความชั่วร้าย' ใน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.