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ư es
tiế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 LANGUAGE
biến môi trường [1]
qua các biến môi trường locale POSIX xác định LC_ALL
, LC_MESSAGES
và 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 LANG
giá 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 es
tin 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ư es
là đủ, 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ữ ( es
trong trường hợp này).
Tùy chọn 2: Bỏ đặt LANGUAGE
và đặ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_MESSAGES
cũ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_ALL
yê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ư LANGUAGE
thẻ ngôn ngữ đơn giản là đủ (như es
)). Điều tương tự áp dụng cho cài đặt LC_MESSSAGES
và 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 LANGUAGE
là một ngoại lệ : nếu (có hiệu lực) LC_MESSAGES
giá trị (thường đặt gián tiếp thông qua LANG
hoặc LC_ALL
) là một trong hai C
hoặ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_MESSAGES
giá 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, LANGUAGE
nê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_MESSAGES
giá trị bao hàm bởi các LANG
giá 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=C
hoặ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_utility
khô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.
LANG
hoặcLANG_ALL
không hoạt động đối với tôi, tuy nhiênLANGUAGE
là vậy. Xem Tại sao ghi đè biến môi trường LANG không thay đổi ngôn ngữ cho tôi?