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_MESSAGESvà LANG(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_MESSSAGESvà LANG. 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.
LANGhoặcLANG_ALLkhông hoạt động đối với tôi, tuy nhiênLANGUAGElà vậy. Xem Tại sao ghi đè biến môi trường LANG không thay đổi ngôn ngữ cho tôi?