ข้อความในเครื่องเทอร์มินัลของฉันแสดงเป็นภาษารัสเซียโดยค่าเริ่มต้นซึ่งเป็นภาษาดั้งเดิมของฉัน
สักครู่ฉันต้องการให้พวกเขาเป็นภาษาอังกฤษ (เช่นเพื่อวางในฟอรัม) จากนั้นเปลี่ยนกลับเป็นภาษาเริ่มต้น
ฉันจะทำสวิตช์และสลับกลับโดยใช้ bash ได้อย่างไร
ข้อความในเครื่องเทอร์มินัลของฉันแสดงเป็นภาษารัสเซียโดยค่าเริ่มต้นซึ่งเป็นภาษาดั้งเดิมของฉัน
สักครู่ฉันต้องการให้พวกเขาเป็นภาษาอังกฤษ (เช่นเพื่อวางในฟอรัม) จากนั้นเปลี่ยนกลับเป็นภาษาเริ่มต้น
ฉันจะทำสวิตช์และสลับกลับโดยใช้ bash ได้อย่างไร
คำตอบ:
มีตัวแปรสภาพแวดล้อมหลายตัวสำหรับการเปลี่ยนการตั้งค่าภาษา คุณสามารถดูการตั้งค่าโลแคลปัจจุบันของคุณได้โดยการรันlocale
คำสั่ง เปลี่ยนการตั้งค่าสถานที่เกิดเหตุทั้งหมดเป็นภาษาอังกฤษ, LANG=C
การใช้งาน นี้C
สถานที่เกิดเหตุอยู่เสมอโดยไม่ต้องมีการติดตั้งชุดภาษาเพิ่มเติม (เพื่อเปลี่ยนเป็นภาษาที่ไม่ใช่ภาษาอังกฤษเป็นการชั่วคราวโปรดดูที่โพสต์ของ@ mklement0 )
ตัวอย่าง:
การดำเนินการคำสั่งด้วยการตั้งค่าภาษาเริ่มต้นและพิมพ์การตั้งค่าภาษาปัจจุบัน:
$ /nonexistent
bash: /nonexistent: Bestand of map bestaat niet
$ locale
LANG=nl_NL.UTF-8
LANGUAGE=
LC_CTYPE="nl_NL.UTF-8"
LC_NUMERIC="nl_NL.UTF-8"
LC_TIME="nl_NL.UTF-8"
LC_COLLATE="nl_NL.UTF-8"
LC_MONETARY="nl_NL.UTF-8"
LC_MESSAGES="nl_NL.UTF-8"
LC_PAPER="nl_NL.UTF-8"
LC_NAME="nl_NL.UTF-8"
LC_ADDRESS="nl_NL.UTF-8"
LC_TELEPHONE="nl_NL.UTF-8"
LC_MEASUREMENT="nl_NL.UTF-8"
LC_IDENTIFICATION="nl_NL.UTF-8"
LC_ALL=
แทนที่ภาษาชั่วคราวสำหรับหนึ่งโปรแกรมและแสดงว่าเป็นจริงชั่วคราว:
$ LANG=C ls /nonexistent
ls: cannot access /nonexistent: No such file or directory
$ ls /nonexistent
ls: kan geen toegang krijgen tot /nonexistent: Bestand of map bestaat niet
เปลี่ยนโลแคลสำหรับคำสั่งทั้งหมดที่ดำเนินการในเชลล์ปัจจุบันและรวมการพิสูจน์อีกครั้ง:
$ LANG=C
$ ls /nonexistent
ls: cannot access /nonexistent: No such file or directory
$ locale
LANG=C
LANGUAGE=
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=
LANGUAGE
เป็นข้อยกเว้น : GNU gettext ให้ความสำคัญกับLANGUAGE
ค่ายกเว้นถ้า (มีผลบังคับ) LC_MESSAGES
มูลค่า (ปกติตั้งทางอ้อมผ่านLANG
หรือLC_ALL
) เป็นอย่างใดอย่างหนึ่งC
หรือ POSIX
(ไวพจน์ของมัน) นอกจากนี้ยังทราบว่าLANGUAGE
เกิดขึ้นจะไม่มีการตั้งค่าในคำตอบนี้ในขณะที่มันจะถูกกำหนดโดยค่าเริ่มต้นและหากมีการตั้งคุณต้องแทนที่มันเพื่อสลับไปยังสถานที่เฉพาะเจาะจงของภาษา (เมื่อเทียบกับ "C" / "POSIX") ซึ่งเป็น สิ่งที่คุณพบ
LANGUAGE
จะไม่มีการตั้งค่าหรือลบล้างอย่างชัดเจน เมื่อพิจารณาจากชื่อสามัญของคำถามเป็นไปได้ว่าผู้คนจะพบคำตอบที่ต้องการเปลี่ยนไปใช้ภาษาที่ไม่ใช่ภาษาอังกฤษด้วยดังนั้นโปรดลองเพิ่มข้อมูลนี้ในคำตอบของคุณ
LANGUAGE
ถ้าคุณต้องการ :)
LANGUAGE
ในการส่งออกไปยังตัวอย่างของคุณซึ่งเป็นค่าเริ่มต้นที่เกิดขึ้นจริงเมื่อสถานที่ของคุณคือnl
nl_NL.UTF-8
คำตอบที่เป็นประโยชน์ Lekensteyn ของการทำงานที่ดีถ้าคุณต้องการเปลี่ยนไปใช้ภาษาอังกฤษในความต้องการเป็น OP ที่ร้องขอ แต่ถ้าคุณต้องการที่จะเปลี่ยนไปใช้ที่แตกต่างกันภาษาตามความต้องการ , การทำงานมากขึ้นเป็นสิ่งจำเป็น
ก่อนเริ่มต้นคุณต้องติดตั้งตารางข้อความด้วยsudo apt-get install language-pack-<lang-tag>
ซึ่ง<lang-tag>
เป็นแท็กย่อยภาษา RTF 5646 แบบง่ายเช่นes
สำหรับสเปน
GNU gettextสาธารณูปโภคชั่นให้ความสำคัญกับการที่ไม่เป็นมาตรฐานLANGUAGE
ตัวแปรสภาพแวดล้อม[1]
มากกว่า POSIX กำหนดตัวแปรสภาพแวดล้อมของสถานที่เกิดเหตุLC_ALL
, LC_MESSAGES
และLANG
(ตามลำดับ)
ระบุว่าLANGUAGE
ถูกตั้งค่าตามค่าเริ่มต้นบนระบบ Ubuntu [2]คือสตริงย่อยของLANG
ค่าที่สะท้อนแท็กภาษาอย่างง่าย (เช่นes
สำหรับสเปน) หรือแท็กภาษาในภูมิภาค (เช่นde_DE
สำหรับตัวแปรเยอรมันของเยอรมัน) คุณต้องยกเลิกการตั้งค่าหรือลบล้างLANGUAGE
เพื่อให้ข้อความภาษาอื่นมีผล [3]
LANGUAGE
ตัวอย่าง : สลับไปที่es
ข้อความสเปน ( ) ข้อความเฉพาะกิจ:
$ LANGUAGE=es ls NoSuchFile
ls: no se puede acceder a NoSuchFile: No existe el archivo o el directorio
หมายเหตุ : แท็กภาษาอย่างง่ายเช่นes
เพียงพอ แต่คุณอาจเพิ่มตัวระบุภูมิภาค (เช่นes_AR
สำหรับอาร์เจนตินา) และแม้กระทั่งคำต่อท้ายชุดอักขระ (เช่นes_AR.UTF-8
)
อย่างไรก็ตามข้อความที่แปลแล้วอาจมีอยู่ในระดับภาษาเท่านั้นและทางเลือกคือการใช้ข้อความที่ตรงกับส่วนภาษา ( es
ในกรณีนี้)
LANGUAGE
และ setLC_ALL
โซลูชันทางเลือกนี้จะยกเลิกการกำหนดค่า LANGUAGE
ก่อนจากนั้นใช้ตัวแปรสภาพแวดล้อมของโลแคล POSIX LC_ALL
เพื่อตั้งค่าโดยนัยLC_MESSAGES
[4] :
$ LANGUAGE= LC_ALL=es_ES.UTF-8 ls NoSuchFile
ls: no se puede acceder a NoSuchFile: No existe el archivo o el directorio
โซลูชันนี้มีข้อดีของการตั้งค่าลักษณะการแปลทั้งหมดเป็นโลแคลที่ระบุ (เช่นLC_TIME
สำหรับรูปแบบวันที่ / เวลา) และการตั้งค่า (โดยนัย) LC_MESSAGES
ยังแจ้งโปรแกรมที่ไม่ใช่ GNU ของภาษาที่ต้องการ
โปรดทราบว่าLC_ALL
ต้องใช้ชื่อเต็มภาษาที่แน่นอนรวมถึงคำต่อท้าย charset เพื่อให้มีประสิทธิภาพ ( es_ES.UTF-8
) (ซึ่งแตกต่างจากLANGUAGE
ที่แท็กภาษาแบบง่าย ๆ นั้นเพียงพอ (เช่นes
)) เช่นเดียวกับการตั้งค่าและLC_MESSSAGES
LANG
การระบุชื่อโลแคลที่ไม่ถูกต้อง / ไม่ได้ติดตั้งจะทำให้เกิดทางเลือกไปยังโลแคล POSIX ดังนั้นภาษาอังกฤษแบบสหรัฐอเมริกา
[1] เหตุผลว่าคำตอบ Lekensteyn ทำงานแม้โดยไม่ต้อง unsetting / เอาชนะLANGUAGE
เป็นข้อยกเว้น : ถ้า (มีผลบังคับ) LC_MESSAGES
มูลค่า (ปกติตั้งทางอ้อมผ่านLANG
หรือLC_ALL
) เป็นอย่างใดอย่างหนึ่งC
หรือ (ไวพจน์ของมัน) POSIX
, ค่าที่เป็นที่เคารพนับถือโดยไม่คำนึงถึงความคุ้มค่าของLANGUAGE
, ถ้ามี. ตรงกันข้ามถ้า (มีผลบังคับ) LC_MESSAGES
ค่าอื่น ๆที่เฉพาะเจาะจงสถานที่เกิดเหตุLANGUAGE
จะมีความสำคัญ
[2] นี้นำไปใช้อูบุนตูที่เหมาะสมแต่ไม่จำเป็นต้องรสชาติอื่น ๆ ; Lekensteyn ระบุว่าKubuntuไม่ได้LANGUAGE
ตั้งค่า
เนื้อหาLANGUAGE
ควรจะไม่ได้ตั้งค่าได้โดยเริ่มต้นที่ระบุว่าในกรณีที่ไม่มีของLC_MESSAGES
ค่านัยโดยLANG
ค่า (ซึ่งกำหนดสถานที่ปัจจุบัน) เป็นที่เคารพนับถือ
[3] คุณยังสามารถใช้วิธีนี้เพื่อเปลี่ยนเป็น [US] ภาษาอังกฤษโดยการกำหนดอย่างใดอย่างหนึ่งLANGUAGE=C
หรือLANGUAGE=POSIX
(เป็นทางเลือกให้LANG=C
/ LANG=POSIX
) แม้ว่าฉันจะไม่ชัดเจนว่าเป็นที่รู้จักอย่างแข็งขันหรือเป็นกลไกทางเลือกเนื่องจากค่าเหล่านี้ไม่ ไม่ต้องเริ่มด้วยแท็กภาษา en_US
บางทีอาจจะเป็นทางเลือกที่ดีกว่าจะ
[4] มีความเป็นขอบพยายามที่จะก่อให้เกิดการปฏิบัติการกับ: กรณีที่วิธีนี้ไม่ได้ทำงานเส้นทาง - - ไม่ว่าจะเป็นญาติหรือแน่นอนไม่ได้เปลี่ยนไปใช้ภาษาที่ระบุไว้ในขณะที่ชื่อไฟล์เพียง : ไม่
LANGUAGE= LC_ALL=es_ES.UTF-8 /path/to/no_such_utility
ไม่ไม่ทำงาน (เอาท์พุทข้อความ ในสถานที่ปัจจุบัน) ในขณะที่
LANGUAGE= LC_ALL=es_ES.UTF-8 no_such_utility
ไม่ (ส่งออกข้อความข้อผิดพลาดสเปน)
หากใครรู้ว่าทำไมและมีเหตุผลที่ดีสำหรับสิ่งนี้หรือไม่โปรดแจ้งให้เราทราบ
LANG
หรือLANG_ALL
ไม่ทำงานสำหรับฉันเลยLANGUAGE
คือ ดูเหตุใดการแทนที่ตัวแปรสภาพแวดล้อม LANG จึงไม่เปลี่ยนภาษาสำหรับฉัน