เปลี่ยนภาษาเอาต์พุตคำสั่งจากภาษาแม่เป็นภาษาอังกฤษ


84

ฉันจะเปลี่ยนภาษาเอาต์พุตคำสั่งจากภาษาแม่เป็นภาษาอังกฤษได้อย่างไรดังนั้นฉันสามารถโพสต์คำถาม Ask Ubuntu ด้วยเอาต์พุตคำสั่งภาษาอังกฤษ (ข้อความแสดงข้อผิดพลาด) ได้อย่างไร


5
สิ่งนี้ค่อนข้างทำให้เข้าใจผิด มันไม่ได้เป็นจริงที่จำเป็นสำหรับคนที่จะทำเช่นนี้ (หากคุณคิดว่าเราควรกำหนดให้ OPs เป็นภาระในลักษณะนี้โปรดโพสต์บนเมตาก่อนสั่งให้ทุกคนทำเช่นนั้น) พวกเขาสามารถเปลี่ยนแปลงได้LANGเช่นนี้และอาจช่วยได้ แต่เราไม่ต้องการข้อความแสดงข้อผิดพลาดที่คัดลอกมาเป็นภาษาอังกฤษ เราต้องการสิ่งที่ผู้เขียนเขียนเป็นภาษาอังกฤษ (แม้ว่าเรามักจะแปลแทนการปิดคำถาม) ดังนั้นคำถามที่เขียนเป็นภาษาอังกฤษพร้อมกับข้อความเทอร์มินัลของสเปนนั้นใช้ได้ในขณะที่คำถามที่เขียนในภาษาสเปนที่มีข้อความเทอร์มินัลภาษาอังกฤษไม่ได้
Eliah Kagan

4
@EliahKagan ใช่คุณพูดถูก แต่ฉันคิดว่ามันมีประโยชน์
BuZZ-dEE

2
ฉันเห็นด้วยมันเป็นประโยชน์สำหรับคนที่จะสามารถทำเช่นนี้และดีที่คุณโพสต์คำถามนี้ แต่ก็คนที่สำคัญรู้ว่าเราไม่จำเป็นต้องให้พวกเขาทำเช่นนี้ ( แต่ไม่จำเป็นต้องให้คำถามและคำตอบตัวเองเป็นภาษาอังกฤษ)
Eliah Kagan

8
@EliahKagan ตรงกันข้ามมันสำคัญมากที่จะโพสต์ข้อความแสดงข้อผิดพลาดที่เกิดขึ้นจริงและเป็นที่นิยมอย่างมากในการโพสต์ข้อความเหล่านั้นเป็นภาษาอังกฤษเพราะนั่นคือสิ่งที่ผู้ชมหลักของเว็บไซต์นี้สามารถจดจำและทดสอบได้ (และไม่เคยโพสต์ข้อความแสดงข้อผิดพลาดที่แปลซ้ำ ๆ เสมอคัดลอกแปะเพราะถ้อยคำที่แน่นอนเครื่องหมายวรรคตอนแม้เว้นวรรคอาจมีความสำคัญ)
Gilles

คำตอบ:


74

export LC_ALL=Cก็เพียงพอแล้ว เอาต์พุตคำสั่งที่ตามมาทั้งหมดจะเป็นภาษาอังกฤษ

ข้อมูลเพิ่มเติม: "LC_ALL = C" ทำอะไร

หากคุณต้องการเปลี่ยนกลับเป็นภาษาพื้นเมืองให้ยกเลิกการตั้งค่าLC_ALLตัวแปร:

unset LC_ALL

13

ฟังก์ชั่นทุบตีสำหรับขั้ว

นี่คือฟังก์ชั่นทุบตีของฉันเพื่อสลับระหว่างตำแหน่งที่ตั้ง DE และ EN

คุณสามารถขยายรหัสนี้ด้วยภาษาที่คุณต้องการ หากต้องการใช้สิ่งนี้ให้ใส่ไว้ใน~/.bashrc(หรือ~/.bash_profile) ของคุณ-

โทรไปด้วย_configure_locale ENเพื่อเปลี่ยนเป็นภาษาอังกฤษ

function _configure_locale() { # [profile]
    local profile=${1:-EN}
    case ${profile} in
      DE|DE_DE|de_DE)
          LC_ALL="de_DE.UTF-8"
          LANG="de_DE.UTF-8"
          LANGUAGE="de_DE:de:en_US:en"
          ;;
      EN|EN_US|en|en_US)
          LC_ALL="en_US.UTF-8"
          LANG="en_US.UTF-8"
          LANGUAGE="en_US:en"
          ;;
      *)
          echo "ALERT" "${FUNCNAME}: unknown profile '${profile}'"
          ;;
      esac
      LC_PAPER="de_DE.UTF-8"; # independent from locale
      LESSCHARSET="utf-8";    # independent from locale
      MM_CHARSET="utf-8"      # independent from locale
      echo "locale settings" "${LANG}";
      export LC_ALL LANG LANGUAGE LC_PAPER LESSCHARSET MM_CHARSET
}

โดยทั่วไปผมแนะนำให้เปลี่ยนทุกตัวแปรสภาพแวดล้อม 3 LC_ALL, LANG, LANGUAGEเพื่อหลีกเลี่ยงการ misbehaviours ของบางโปรแกรม

ปรับให้เข้ากับภาษาของคุณ

การขยายรหัสไปยังภาษาของคุณค่อนข้างง่าย คุณสามารถค้นหาค่าที่ต้องการโดยเรียกใช้คำสั่งต่อไปนี้

env |egrep -e 'LC_ALL|LANG'

สคริปต์ต้องการการเปลี่ยนแปลงสำหรับภาษาอื่นที่ไม่ใช่ภาษาเยอรมัน (DE) หรือไม่ ฉันค้นหาวิธีแก้ปัญหาที่เป็นอิสระจากภาษาพื้นเมือง
BuZZ-dEE

@ BuZZ-dEE: คุณสามารถ (และควรจะ) ปรับเปลี่ยนสิ่งนี้ได้อย่างง่ายดายโดยการโยนcaseและระบุอินพุตให้สอดคล้องกับ<lang>_<country>รูปแบบ จากนั้นคุณสามารถผ่านมันไปได้โดยสมมติว่า UTF-8 หากคุณมีความกระตือรือร้นในการใช้งานที่เป็นระเบียบคุณควรตรวจสอบอินพุตของผู้ใช้locale -aเพื่อให้แน่ใจว่ามีการติดตั้งโลแคลที่ร้องขอจริง
bitmask

@ buzz-dee: ดูคำตอบที่อัปเดตแล้ว
H. -Dirk Schmitt

7

เปิด terminal Ctrl+ Alt+ Tและพิมพ์:

LANG=en_US.UTF-8 bash

หรือ :

LC_ALL=C bash

ตอนนี้เทอร์มินัลเอาท์พุทเป็นภาษาอังกฤษ localeคุณสามารถตรวจสอบด้วย

มันเป็นไปได้ที่จะทำให้คำสั่งที่จะทำกับถาวร aliasเปิด.bashrcไฟล์ด้วยโปรแกรมแก้ไขที่คุณต้องการแล้ววางโค้ดต่อไปนี้ลงไป:

alias basheng='LANG=en_US.UTF-8 bash'

หรือ :

alias basheng='LC_ALL=C bash'

รีสตาร์ท Bash เชลล์ bashengตอนนี้คุณมีคำสั่ง พิมพ์ใน Bash เพื่อรับ Bash shell ภาษาอังกฤษ exitในการออกจากประเภทเปลือกอังกฤษ

ที่มา:


การตั้งค่าLANGเป็นไม่เพียงพอที่จะมีโอกาสที่การส่งออกทั้งหมด
bitmask

@bitmask คือสิ่งนี้LANG=en_US.UTF-8 && LC_ALL=en_US.UTF-8 && LANGUAGE=en_US.UTF-8 bashดีกว่าไหม
BuZZ-dEE

2
LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 LANGUAGE=en_US.UTF-8 $SHELLที่จริงที่ควรจะเป็น
bitmask

เพียงLC_ALL = C ทุบตีทำงานสำหรับฉัน
ลิควิด

5

นี้ถูกกำหนดค่าผ่านการตั้งค่าสถานที่ซึ่งสามารถตั้งค่าผ่านตัวแปรสภาพแวดล้อม ตัวแปรมีสี่ชั้น อันแรกที่ถูกตั้งค่ามาก่อน:

  • LANGUAGE- อย่าใช้มันไม่ค่อยมีประโยชน์และอาจทำให้เกิดข้อบกพร่อง น่าเสียดายที่ Ubuntu บางรุ่นตั้งค่าไว้ดังนั้นคุณอาจต้องยกเลิกการตั้งค่า
  • LC_ALL- แทนที่การตั้งค่าเฉพาะหมวดหมู่ซึ่งหมายถึงหลักที่จะใช้โดยโปรแกรมที่ต้องการเรียกใช้ในภาษาเริ่มต้น ไม่ได้มีไว้สำหรับใช้เป็นค่ากลาง
  • หมวดหมู่เฉพาะตัวแปรเริ่มต้นด้วยLC_: LC_CTYPE, LC_MESSAGES, LC_TIME...
  • LANG - ตั้งค่าโลแคลเริ่มต้นสำหรับทุกหมวดหมู่ซึ่งมีไว้เพื่อใช้ในการตั้งค่าผู้ใช้ทั่วโลก

สถานที่เกิดเหตุ“ธรรมดา” กับข้อความทั้งหมดที่ไม่ได้แปล, เวลาเริ่มต้นและจำนวนรูปแบบ ASCII เป็นชุดตัวอักษร ฯลฯ Cเรียกว่า สถานที่นี้มีอยู่ในทุกระบบ

ดังนั้นเมื่อต้องการเรียกใช้โปรแกรมที่มีข้อความเป็นภาษาอังกฤษให้เรียกใช้

unset LANGUAGE; LC_MESSAGES=C myprogram --option

หรือ

unset LANGUAGE
export LC_MESSAGES=C
myprogram --option
myotherprogram

ในการเรียกใช้โปรแกรมที่ปิดการแปลภาษาทั้งหมดแล้วให้เรียกใช้

env -u LANGUAGE LC_ALL=C myprogram --option

แต่ระวังว่านี่เป็นการสลับการเข้ารหัสอักขระเป็น ASCII (ดังนั้นจึงไม่มี Unicode, latin-1, ฯลฯ )

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


อย่าใช้ LANGUAGE? ฉันไม่ทราบว่าคุณใช้ระบบปฏิบัติการใดอยู่ แต่บน Ubuntu LANGUAGE จะใช้งานเป็นค่าเริ่มต้นตลอดเวลาผ่านตัวติดตั้งและ GUI ต่างๆ มีข้อบกพร่องอะไรบ้าง btw? ฉันยังอ่านคำตอบที่คุณเชื่อมโยงถึงและแม้ว่ามันจะมีข้อมูลทั่วไปที่มีประโยชน์คำแนะนำนั้นก็ไม่ได้เป็นคำแนะนำที่ดีสำหรับเดสก์ท็อป Ubuntu
Gunnar Hjalmarsson

@GunnarHjalmarsson ปัญหาหลักที่เกิดขึ้นLANGUAGEคือมีความสำคัญมากกว่าLC_ALLซึ่งทำให้เกิดข้อบกพร่องเนื่องจากโปรแกรมตั้งค่าLC_ALLให้รับเอาต์พุตที่คาดการณ์ได้และทำให้เกิดความสับสนเนื่องจากไม่ได้รับผลลัพธ์ที่คาดหวัง
Gilles

Ubuntu GUI ตั้งค่า LANG และ LANGUAGE อย่างสม่ำเสมอ (และ LC_MESSAGES สืบทอดมาจาก LANG) ซึ่งควรป้องกันความสับสนแบบนั้น เหตุผลที่ตั้งค่า LANGUAGE คือ Language Support มีอินเตอร์เฟสสำหรับการตั้งค่ารายการลำดับความสำคัญ
Gunnar Hjalmarsson

@GunnarHjalmarsson ฉันรู้ การตั้งค่าLANGUAGEเป็นความคิดที่ไม่ดีอย่างไรก็ตามเนื่องจากประโยชน์มีบางมากในขณะที่ข้อบกพร่องสามารถน่ารำคาญและหายาก คุณพูดถูกฉันควรพูดถึงการตั้งLANGUAGEค่า
Gilles

คำตอบที่นี่ไม่ใช่สถานที่ที่เหมาะสมสำหรับการอภิปรายปัญหาการออกแบบ การอภิปรายดังกล่าวจะจัดขึ้นที่ดีกว่าเช่นอูบุนตู-devel-หารือ เพื่อเป็นประโยชน์กับผู้ใช้ฉันคิดว่าคำตอบควรเป็นไปตามการออกแบบในปัจจุบันไม่ว่าคุณจะคิดว่าเหมาะสมหรือไม่ก็ตาม และโปรดทราบว่า "บางรุ่น" เป็นเวอร์ชั่นที่รองรับเดสก์ท็อป Ubuntu และรุ่นตราสารอนุพันธ์ทั้งหมดอาจมีข้อยกเว้นของ Ubuntu
Gunnar Hjalmarsson

1

วิธีที่ง่ายที่สุดคือเปิดเทอร์มินัลโดยกดAlt + F2และเรียกใช้คำสั่งนี้:

env LANGUAGE=en gnome-terminal

1

ในของคุณ ~/.bashrc

unset LC_ALL
export LC_MESSAGES=C

แล้วก็

source ~/.bashrc

ตรวจสอบ

$ locale
LANG=pl_PL.utf8
LANGUAGE=
LC_CTYPE="pl_PL.utf8"
LC_NUMERIC="pl_PL.utf8"
LC_TIME="pl_PL.utf8"
LC_COLLATE="pl_PL.utf8"
LC_MONETARY="pl_PL.utf8"
LC_MESSAGES=C
LC_PAPER="pl_PL.utf8"
LC_NAME="pl_PL.utf8"
LC_ADDRESS="pl_PL.utf8"
LC_TELEPHONE="pl_PL.utf8"
LC_MEASUREMENT="pl_PL.utf8"
LC_IDENTIFICATION="pl_PL.utf8"
LC_ALL=

ทำไมไม่มีการตั้งค่าก่อน

LC_ALL แทนที่การตั้งค่า LC_ * แต่ละรายการ: หากตั้งค่า LC_ALL ไว้ด้านล่างไม่มีผลใด ๆ

https://help.ubuntu.com/community/Locale


ฉันไม่รู้ว่าทำไมคำตอบนี้จึงลดลง ใช่มันสามารถใช้คำอธิบายเพิ่มเติม แต่ไม่เหมือนกับคำตอบที่ยอมรับมันแสดงวิธีทำให้มันถาวรและมีความเฉพาะเจาะจงมากขึ้น
Xerus

0
  1. คลิกที่ไอคอนรูปเฟืองทางด้านซ้าย (การตั้งค่าระบบบนแผง Unity)
  2. คลิกที่การสนับสนุนภาษา
  3. เลือกรูปแบบภูมิภาค
  4. ตั้งค่า "แสดงตัวเลขวันที่และจำนวนเงินในสกุลเงิน ... " เป็นภาษาอังกฤษ
  5. ออกจากระบบเซสชั่นและเข้าสู่ระบบอีกครั้ง (จำเป็น!)

เสร็จสิ้น

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