ตัวแปร $ LANG ถูกตั้งค่าไว้ใน Mac OS X ที่ไหน


24

ฉันใช้wgetเป็นครั้งแรกหลังจากติดตั้ง Lion OS X และฉันสังเกตเห็นว่า wget แปลเป็นภาษาท้องถิ่นของฉัน การรันsetคำสั่งในเทอร์มินัลแสดงให้เห็นว่าLANGตัวแปรของฉันแทนภาษาท้องถิ่นของฉัน ฉันจะเปลี่ยนสิ่งนี้หรือทำให้wgetเพิกเฉยการตั้งค่านี้ได้ที่ไหน

ปรับปรุง

นี่คือสิ่งที่localeทำให้ฉัน:

LANG="lt_LT.UTF-8"
LC_COLLATE="lt_LT.UTF-8"
LC_CTYPE="lt_LT.UTF-8"
LC_MESSAGES="lt_LT.UTF-8"
LC_MONETARY="lt_LT.UTF-8"
LC_NUMERIC="lt_LT.UTF-8"
LC_TIME="lt_LT.UTF-8"
LC_ALL=

ดังนั้นเอาต์พุตทั้งหมดที่ไม่ใช่พารามิเตอร์ (เช่นพร้อมต์และข้อความดีบัก) จึงเป็นภาษาลิธัวเนีย นั่นคือปัญหาของฉัน ฉันต้องการกลับเป็นภาษาอังกฤษ

ฉันกำลังใช้zshเป็นเปลือกเข้าสู่ระบบของฉัน


มีปัญหาwgetอะไรกับ? และสิ่งที่จะlocaleแสดงและเป็นเช่นเดียวกับสิ่งที่คุณคาดหวังจากการเลือกภาษาของคุณในบานหน้าต่างการตั้งค่าระบบภาษาและข้อความ ?
bmike

คำตอบ:


26

ตามค่าเริ่มต้นเทอร์มินัลจะตั้งค่าตัวแปรสภาพแวดล้อมของโลแคลให้ตรงกับภาษาที่เลือกในปัจจุบันและรูปแบบเวลา / วันที่ / ตัวเลขที่เทอร์มินัลใช้ซึ่งเลือกผ่าน

การตั้งค่าระบบ> ภาษาและข้อความ

(นั่นคือชื่อบน Lion ในระบบก่อนหน้านี้ชื่อที่แน่นอนของแผงการตั้งค่าอาจแตกต่างกัน)

วิธีแก้ปัญหาชั่วคราวคือการลากภาษาอังกฤษไปยังด้านบนของรายการภาษาจากนั้นเปิด Terminal จากนั้นย้ายลิทัวเนียกลับไปที่ด้านบน เทอร์มินัลเท่านั้นจะเป็นภาษาอังกฤษ อย่างไรก็ตามมันจะรีเซ็ตเป็นลิทัวเนียถ้าคุณออกและรีสตาร์ท Terminal

วิธีถาวรคือการบอก Terminal ไม่ให้ตั้งค่าตัวแปรสภาพแวดล้อม locale โดยปิด

เทอร์มินัล> ค่ากำหนด> การตั้งค่า> [โปรไฟล์]> ขั้นสูง> ตั้งค่าตัวแปรสภาพแวดล้อมของโลแคลเมื่อเริ่มต้น

จากนั้นโลแคลจะใช้ค่าเริ่มต้นเป็น "C" โดยไม่ได้ระบุภาษาและโปรแกรมส่วนใหญ่จะใช้ค่าเริ่มต้นเป็นภาษาอังกฤษ

โปรดทราบว่าการปิดการใช้งานนี้หมายความว่าบางโปรแกรมจะไม่ทราบว่าเทอร์มินัลเข้ารหัสอักขระที่ใช้อยู่และจะสมมติว่าเป็น ASCII หรือ ISO-Latin-1 เท่านั้น ดังนั้นหากเทอร์มินัลกำลังใช้ UTF-8 (ค่าเริ่มต้น) โปรแกรมเหล่านั้นอาจทำงานได้หรือไม่ทำงานตามที่ต้องการ

หากเป็นส่วนใหญ่wgetฉันขอแนะนำให้คุณทำสำเนาโปรไฟล์การตั้งค่าเริ่มต้นปิดการตั้งค่าภาษาในโปรไฟล์ที่กำหนดเองของคุณและใช้เฉพาะโปรไฟล์นั้นเมื่อใช้wgetเพื่อให้คุณสามารถใช้ UTF-8 ได้อย่างต่อเนื่อง เมื่อใช้โปรแกรมอื่นใช้การตั้งค่าเริ่มต้น

ดังที่คนอื่น ๆ พูดถึงคุณยังสามารถแทนที่การตั้งค่าภาษาเริ่มต้นที่เทอร์มินัลจัดหาให้ในสคริปต์เริ่มต้นเชลล์ สำหรับ zsh ให้ใส่ไว้ใน ~ / .zshrc สำหรับ bash ให้ใช้ ~ / .bashrc (และถ้าคุณยังไม่มีให้สร้าง ~ / .bash_profile ที่รัน ~ / .bashrc)

ดู x-man-page: // 1 / locale สำหรับข้อมูลเพิ่มเติมเกี่ยวกับแต่ละค่าของสภาพแวดล้อมโลแคล

อย่างไรก็ตามหากคุณเพียงแค่unset LANGตั้งค่าเป็น "C" ซึ่งโดยปกติจะใช้กับเชลล์และโปรแกรมทั้งหมดของคุณในขณะที่เวลาส่วนใหญ่คุณอาจต้องการใช้ UTF-8 และเทอร์มินัลตั้งตัวแปรโลแคลให้ตรงกัน เพื่อให้ได้ระดับสูงสุดของความร่วมมือความเที่ยงตรงและการทำงาน

ดังนั้นหากคุณกำลังจะไปเส้นทางนั้นฉันขอแนะนำให้คุณเขียนโค้ดเพื่อแก้ไขแทนที่ค่าเริ่มต้นเพื่อให้คุณรักษาข้อมูลการเข้ารหัส ("UTF-8") และเพียงบังคับภาษาเป็นภาษาอังกฤษ แทนที่จะตั้งค่าตัวแปรเป็น "C"

ตัวอย่างเช่นใช้งานได้ใน zsh และ bash:

# Replace Lithuanian with English
export LANG=${LANG/lt_LT/en_US}

เมื่อนี้จะเปลี่ยนไปLANG="lt_LT.UTF-8" LANG="en_US.UTF-8"ฉันไม่wgetสามารถทดสอบสิ่งนี้ได้ แต่ก็น่าจะพอแล้ว

การทำเช่นนี้หมายความว่าหากคุณเปลี่ยนการตั้งค่าการเข้ารหัสอักขระในเทอร์มินัลคุณจะไม่แทนที่ในสคริปต์เริ่มต้นเชลล์ของคุณ


ทำได้ดีมาก เพื่อทำให้LANGคำสั่งการกำหนดนิยามใหม่เป็นแบบทั่วไป: echo ${LANG/*./en_US.}แทนที่ชื่อวัฒนธรรมปัจจุบันen_US โดยไม่คำนึงว่ามันคืออะไร; ทำงานในbash, ,ksh zsh
mklement0

7

มันตั้งอยู่ที่นี่ ...

ป้อนคำอธิบายรูปภาพที่นี่

หากคุณต้องการตัวเลือกมากขึ้นหรือน้อยลงในพูลดาวน์ให้ไปที่แท็บการเข้ารหัสเพื่อดูค่าหัวที่เพิ่มขึ้น


3
บน os x มันคือ ~ / .bash_profile ไม่ใช่ bashrc ผู้คนสับสนมากเมื่ออ่านบทเรียนออนไลน์
Enrico Susatyo

เอ้ยสาปมัน - ขอบคุณสำหรับการจับที่ ฉันยังไปที่หน้าโอเพนซอร์สและตรวจสอบว่าแอปเปิ้ลทำการเปลี่ยนแปลง gnu bash และยังคงเข้าใจผิด (แก้ไขคำตอบของฉัน - ขอบคุณ @the_great_monkey)
bmike

4
เทอร์มินัลสร้างเชลล์ล็อกอินซึ่งรัน ~ / .bash_profile อย่างไรก็ตามการกำหนดค่าผู้ใช้ส่วนใหญ่ควรอยู่ใน ~ / .bashrc เพื่อให้สามารถใช้กับเชลล์ที่ไม่ใช่การเข้าสู่ระบบ (เช่น sub-shells) และ ~ / .bash_profile ควรรัน ~ / .bashrc ดังนั้นจึงใช้กับล็อกอินเชลล์ ~ / .bash_profile โดยทั่วไปส่วนใหญ่จะว่างเปล่าและมีรหัสเฉพาะสำหรับเชลล์ล็อกอินระดับบนสุดที่ผู้ใช้ไม่ต้องการเรียกใช้สำหรับเชลล์ย่อย
Chris หน้า

1
"การอ่านอย่างรวดเร็วของ man page แสดงให้เห็นว่า shell ตั้งค่านี้ในการเข้าสู่ระบบแต่ละครั้ง" bash man page บอกว่า แต่ Terminal ตั้งค่าเริ่มต้นและฉันไม่เคยเห็น bash ตั้งค่าหากไม่ได้ตั้งค่าไว้แล้ว ถ้าผมปิด "สภาพแวดล้อมที่เกิดเหตุชุด ..." การตั้งค่าไม่มีตัวแปรมีการตั้งค่าและการแสดงสถานที่LANG=และค่าอื่น ๆ "C"ทั้งหมดเริ่มต้น
Chris หน้า

2

ฉันแก้ไขปัญหานี้ด้วยการตั้งค่าภาษาในไฟล์. profile ของฉันซึ่งโหลดเมื่อใดก็ตามที่ฉันเปิดเครื่อง

export LANG="en_US.UTF-8"
export LC_ALL="POSIX"

LC_ALLแทนที่LANGดังนั้นคำสั่งแรกของคุณจะไม่มีผล
mklement0

นอกจากนี้ยังPOSIXเทียบเท่าCและไม่สามารถรับมือกับ Unicode ได้เลย
Sebastian Graf

1

ขึ้นอยู่กับ exprience ของ Linux หากคุณไม่ต้องการเปลี่ยนการแปลของคุณทั้งหมดด้วย LC_LANG แต่ต้องการเพียงแค่มีข้อความระบบเป็นภาษาอังกฤษคุณจะต้องตั้งค่า

LC_COLLATE=C    (to have standard sorting in ls, etc)
LC_CTYPE=en_US.UTF-8

เป็นLC_MESSAGESตัวแปรที่ควบคุมในข้อความภาษาที่ควรส่งออก (ถ้าติดตั้ง)
mklement0

0

การใช้เซิร์ฟเวอร์ debian ในภาษาฝรั่งเศสและไคลเอนต์ bash macsox ฉัน "เพิ่ง" ต้องเพิ่มสิ่งนี้ใน. bash_profile ของฉันในไดเรกทอรีผู้ใช้ของ macosx:

ส่งออก LANG = fr_FR.UTF-8

แก้ไข


0

คำตอบอื่น ๆ ที่ถูกต้องคือเกี่ยวกับTerminalการตั้งค่าสำหรับตัวแปรสภาพแวดล้อมชุดสถานที่ในการเริ่มต้น/etc/profileและการใช้ของเปลือก อย่างไรก็ตามมีวิธีอื่นที่ควรค่าแก่การทำความเข้าใจ - โดยเฉพาะอย่างยิ่งหาก "ปัญหา" ประสบเนื่องจากการsshเข้าสู่ระบบจากระยะไกล

OpenSSH (ตามที่ใช้บน Linux, BSD และ macOS) สามารถส่งตัวแปรสภาพแวดล้อมจากสภาพแวดล้อมของลูกค้าไปยังเชลล์ที่เซิร์ฟเวอร์เริ่มทำงาน จะทำเช่นนี้ก็ต่อเมื่อลูกค้าได้รับการกำหนดค่าให้ส่งพวกเขาและเซิร์ฟเวอร์ได้รับการกำหนดค่าให้ยอมรับพวกเขา ลูกค้า ( ~/.ssh/config) จะต้องมี:

SendEnv LANG LC_*

และเซิร์ฟเวอร์ ( /etc/ssh/sshd_config) จะต้อง:

AcceptEnv LANG LC_*

หากสิ่งเหล่านี้ทั้งคู่เกิดขึ้นโลคัลของไคลเอ็นต์จะถูกแพร่กระจายไปยังล็อกอินเชลล์บนเซิร์ฟเวอร์ ssh:

$ ssh me@my-mac locale
LANG="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_CTYPE="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_ALL=

การตั้งค่าเซิร์ฟเวอร์ที่ต้องการไม่ได้มีตามค่าเริ่มต้นในSnow Leopard ; มันเป็นสิ่งที่มีในเซียร์รา อย่าลืมรีสตาร์ทเซิร์ฟเวอร์ SSH หลังจากแก้ไข/etc/sshd_config!!!

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