ข้อความในเครื่องเทอร์มินัลของฉันแสดงเป็นภาษารัสเซียโดยค่าเริ่มต้นซึ่งเป็นภาษาดั้งเดิมของฉัน
สักครู่ฉันต้องการให้พวกเขาเป็นภาษาอังกฤษ (เช่นเพื่อวางในฟอรัม) จากนั้นเปลี่ยนกลับเป็นภาษาเริ่มต้น
ฉันจะทำสวิตช์และสลับกลับโดยใช้ 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 จึงไม่เปลี่ยนภาษาสำหรับฉัน