Tạm thời thay đổi ngôn ngữ cho tin nhắn / cảnh báo / lỗi thiết bị đầu cuối


22

Các tin nhắn trong thiết bị đầu cuối của tôi được hiển thị bằng ngôn ngữ tiếng Nga theo mặc định, đó là tin nhắn gốc của tôi.

Trong một khoảnh khắc tôi muốn chúng bằng tiếng Anh (ví dụ: dán vào diễn đàn), sau đó chuyển về ngôn ngữ mặc định.

Làm thế nào tôi có thể thực hiện chuyển đổi và chuyển trở lại bằng cách sử dụng bash?

Câu trả lời:


23

Có một số biến môi trường có sẵn để thay đổi cài đặt ngôn ngữ. Bạn có thể xem các cài đặt ngôn ngữ hiện tại của mình bằng cách thực hiện localelệnh. Để thay đổi tất cả các cài đặt ngôn ngữ sang tiếng Anh, sử dụng LANG=C. Đây Clocale luôn luôn có sẵn mà không cần cài đặt gói ngôn ngữ bổ sung. (Để tạm thời thay đổi sang các ngôn ngữ không phải tiếng Anh, hãy xem bài đăng của @ mkuity0 .)

Ví dụ:

Thực hiện một lệnh với các cài đặt ngôn ngữ mặc định và in các cài đặt ngôn ngữ hiện tại:

$ /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=

Tạm thời ghi đè ngôn ngữ cho một chương trình và cho thấy rằng nó thực sự tạm thời:

$ 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

Thay đổi ngôn ngữ cho tất cả các lệnh được thực thi trong trình bao hiện tại và bao gồm lại bằng chứng:

$ 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=

6
Đối với những người dùng khác gặp sự cố khiến việc này hoạt động - cài đặt LANGhoặc LANG_ALLkhông hoạt động đối với tôi, tuy nhiên LANGUAGElà vậy. Xem Tại sao ghi đè biến môi trường LANG không thay đổi ngôn ngữ cho tôi?
gertvdijk

1
@gertvdijk: Cảm ơn vì điều đó; lý do câu trả lời này hoạt động ngay cả khi không có cài đặt LANGUAGElà một ngoại lệ : GNU gettext ưu tiên cho LANGUAGEgiá trị ngoại trừ nếu giá trị (hiệu quả) LC_MESSAGES(thường được đặt gián tiếp thông qua LANGhoặc LC_ALL) là Choặc (từ đồng nghĩa của nó) POSIX. Cũng lưu ý rằng LANGUAGEđiều này không được đặt trong câu trả lời này, trong khi nó được đặt theo mặc định và nếu được đặt, bạn phải ghi đè lên để chuyển sang ngôn ngữ của một ngôn ngữ cụ thể (trái ngược với "C" / "POSIX"), đó là những gì bạn tìm thấy
mkuity0

Câu trả lời của bạn hoạt động rất tốt khi chuyển sang ngôn ngữ "C" (với các tin nhắn tiếng Anh Mỹ, như được yêu cầu), nhưng sẽ không hoạt động cho các địa phương khác trừ khi LANGUAGErõ ràng không được đặt hoặc ghi đè. Với tiêu đề chung của câu hỏi, có khả năng mọi người sẽ tìm thấy câu trả lời này đang tìm cách chuyển sang ngôn ngữ không phải tiếng Anh, vì vậy vui lòng xem xét thêm thông tin này vào câu trả lời của bạn.
mkuity0

@ mkuity0 Với bối cảnh của câu hỏi (đăng thông báo lỗi tiếng Anh), tôi nghĩ rằng bài đăng hiện tại là đủ. Bạn có thể thêm một câu trả lời khác để giải thích các chi tiết xung quanh LANGUAGEnếu bạn muốn :)
Lekensteyn

Tôi đã thêm câu trả lời của riêng tôi , như bạn đề xuất. Nếu bạn đồng ý với đánh giá của tôi rằng những người đọc trong tương lai có thể đến đây để tìm cách chuyển sang bất kỳ ngôn ngữ nào (như nhiều người đã chủ động chỉ ra), vui lòng thêm một liên kết đến câu trả lời của tôi cho câu hỏi của bạn. Ngoài ra, tôi khuyên bạn nên thay đổi giá trị LANGUAGEtrong đầu ra mẫu của bạn thành nlgiá trị mặc định thực tế khi miền địa phương của bạn là nl_NL.UTF-8.
mkuity0

9

Câu trả lời hữu ích của Lekensteyn hoạt động rất tốt nếu bạn muốn chuyển sang tiếng Anh Mỹ theo yêu cầu, như OP yêu cầu, nhưng nếu bạn muốn chuyển sang một ngôn ngữ khác theo yêu cầu , thì cần nhiều công việc hơn.

Trước khi bắt đầu, bạn phải cài đặt các bảng thông báo với sudo apt-get install language-pack-<lang-tag>, <lang-tag>một phụ đề ngôn ngữ RTF 5646 đơn giản , chẳng hạn như estiếng Tây Ban Nha.

Thông tin cơ bản

GNU gettext tiện ích dựa trên cung cấp cho ưu tiên cho các chuẩn LANGUAGEbiến môi trường [1] qua các biến môi trường locale POSIX xác định LC_ALL, LC_MESSAGESLANG(theo thứ tự đó).

Được LANGUAGEđặt mặc định trên các hệ thống Ubuntu [2] , cụ thể là một chuỗi con của LANGgiá trị phản ánh thẻ ngôn ngữ đơn giản (ví dụ: esđối với tiếng Tây Ban Nha) hoặc thẻ khu vực ngôn ngữ (ví dụ: de_DEđối với biến thể tiếng Đức của Đức), bạn phải hủy đặt hoặc ghi đè LANGUAGEđể các thông điệp của ngôn ngữ khác có hiệu lực. [3]

Tùy chọn 1: Đặt LANGUAGE

Ví dụ : Chuyển sang estin nhắn Tây Ban Nha ( ) ad-hoc:

$ LANGUAGE=es ls NoSuchFile
ls: no se puede acceder a NoSuchFile: No existe el archivo o el directorio

Lưu ý : Một thẻ ngôn ngữ đơn giản như eslà đủ, nhưng bạn có thể thêm một mã định danh khu vực (ví dụ: es_ARđối với Argentina) và thậm chí là một hậu tố bộ ký tự (ví dụ es_AR.UTF-8:).
Tuy nhiên, tin nhắn được bản địa hóa chỉ có thể tồn tại ở cấp ngôn ngữ và dự phòng là sử dụng các tin nhắn phù hợp với phần ngôn ngữ ( estrong trường hợp này).

Tùy chọn 2: Bỏ đặt LANGUAGEvà đặtLC_ALL

Giải pháp thay thế này xác định LANGUAGE trước, sau đó sử dụng biến môi trường miền địa phương POSIX LC_ALLđể đặt ngầm định 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

Giải pháp này có ưu điểm là đặt tất cả các khía cạnh nội địa hóa cho ngôn ngữ được chỉ định (chẳng hạn như LC_TIMEđịnh dạng ngày / giờ) và bằng cách (ngầm) LC_MESSAGEScũng thông báo cho các chương trình không phải là ngôn ngữ mong muốn.

Lưu ý cách LC_ALLyêu cầu tên miền địa phương chính xác, đầy đủ , bao gồm cả hậu tố bộ ký tự, phải có hiệu lực ( es_ES.UTF-8) (không giống như LANGUAGEthẻ ngôn ngữ đơn giản là đủ (như es)). Điều tương tự áp dụng cho cài đặt LC_MESSSAGESLANG. Chỉ định tên miền địa phương không hợp lệ / không được cài đặt gây ra dự phòng cho ngôn ngữ POSIX và do đó tiếng Anh Mỹ.


Chú thích

[1] Những lý do rằng câu trả lời Lekensteyn của hoạt động thậm chí không unset / trọng LANGUAGElà một ngoại lệ : nếu (có hiệu lực) LC_MESSAGESgiá trị (thường đặt gián tiếp thông qua LANGhoặc LC_ALL) là một trong hai Choặc (từ đồng nghĩa của nó) POSIX, giá trị được tôn trọng, không phụ thuộc vào giá trị của LANGUAGE, nếu có. Ngược lại, nếu LC_MESSAGESgiá trị (hiệu quả) là bất kỳ địa phương cụ thể nào khác , LANGUAGEđược ưu tiên.

[2] Điều này áp dụng cho Ubuntu thích hợp , nhưng không nhất thiết phải là các hương vị khác ; Lekensteyn khẳng định rằng Kubuntu không không thiết lập LANGUAGE.
Có thể cho rằng, LANGUAGEnên không thể được thiết lập theo mặc định, cho rằng trong sự vắng mặt của nó các LC_MESSAGESgiá trị bao hàm bởi các LANGgiá trị (mà xác định miền địa phương hiện tại), được tôn trọng.

[3] Bạn cũng có thể sử dụng phương pháp này để chuyển sang [Mỹ] Tiếng Anh bằng cách gán cho một trong hai LANGUAGE=Choặc LANGUAGE=POSIX(như là một thay thế cho, LANG=C/ LANG=POSIX), mặc dù tôi chưa rõ liệu rằng đang tích cực được công nhận hoặc chỉ đơn giản là một fallback cơ chế, cho rằng những giá trị này don 't bắt đầu với một thẻ ngôn ngữ ; có lẽ sự lựa chọn tốt hơn sẽ là en_US.

[4] Có một cạnh trường hợp phương pháp này không làm việc: Cố gắng gọi một thực thi với một con đường - cho dù tương đối hoặc tuyệt đối - KHÔNG chuyển sang ngôn ngữ cụ thể, trong khi một chỉ filename không:
LANGUAGE= LC_ALL=es_ES.UTF-8 /path/to/no_such_utilitykhông không làm việc (kết quả đầu ra nhắn trong ngôn ngữ hiện tại), trong khi
LANGUAGE= LC_ALL=es_ES.UTF-8 no_such_utilityđó (xuất ra một thông báo lỗi tiếng Tây Ban Nha).
Nếu bất cứ ai biết tại sao và liệu có một lý do tốt cho việc này, hãy cho chúng tôi biết.


Mẹo về chiếc mũ đến @ wjandrea nhờ sự giúp đỡ của anh ấy với cấu trúc bài đăng này.
mkuity0
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.