Tôi đang sử dụng Arch Linux và tôi đã làm theo hướng dẫn trên wiki về việc đặt ngôn ngữ của mình.
Gần như mọi chương trình chạy đều phàn nàn về miền địa phương - thậm chí locale. Nó trông như thế này:
% locale
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=en-US
LC_TIME=en-US
LC_COLLATE="POSIX"
LC_MONETARY=en-US
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT=en-US
LC_IDENTIFICATION="POSIX"
LC_ALL=
hoặc là:
% perl
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_TIME = "en-US",
LC_NUMERIC = "en-US",
LC_MONETARY = "en-US",
LC_MEASUREMENT = "en-US",
LC_CTYPE = "en_US.UTF-8",
LANG = (unset)
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C")
Một cái gì đó hơi khó hiểu là /etc/locale.gencó một vài ví dụ; tất cả các dòng UTF-8 đều có "Something.UTF-8" và các locale-genchương trình đang chạy en_US.UTF-8... donetrong khi nó đang chạy, nhưng locale -a, được cho là hiển thị cho bạn các chương trình địa phương có sẵn en_US.utf8. Tôi đã thử các kết hợp khác nhau của cả hai định dạng trong /etc/locale-genvà LOCALE=trong /etc/rc.conf, nhưng không có gì khắc phục được vấn đề.
Thông tin thêm:
% locale -a
C
POSIX
en_US
en_US.iso88591
en_US.utf8
Đề xuất thiết lập LANG=Cvà LC_ALL=en_US.UTF-8làm việc của Bruce Ediger (trên thực tế, cài đặt LC_ALLnó đã được sửa, cài đặt LANGkhông thành vấn đề), nhưng tôi muốn biết điều gì đang xảy ra. Theo SUS , LC_ALL sẽ ghi đè tất cả các biến LC_ * khác nếu nó được đặt và không null. Trong hệ thống của tôi, nó được đặt, nhưng nó là null, vì vậy nó nên được bỏ qua và thay vào đó nên sử dụng các giá trị khác. Đó không phải là những gì đang xảy ra, có vẻ như các ứng dụng được gọi setlocalevới LC_ALL, nhận được một NULLtrở lại, và tạo ra một lỗi, ngay cả khi các cuộc gọi khác để setlocaletrả về một chuỗi tốt.
Dưới đây là top của một ltracesố locale(di chuyển sang phải để xem các giá trị chức năng cửa sổ mới)
% ltrace locale
(0, 0, 0, -1, 0x7f5c1ae44510) = 0x7f5c1ae47140
__libc_start_main(0x401d70, 1, 0x7fff7c8cfbf8, 0x404610, 0x4046a0 <unfinished ...>
setlocale(0, "") = "en_US.UTF-8"
setlocale(5, "") = "en_US.UTF-8"
textdomain("libc") = "libc"
argp_parse(0x607280, 1, 0x7fff7c8cfbf8, 0, 0x7fff7c8cfad4) = 0
setlocale(6, "") = NULL
dcgettext(0, 0x405aa8, 5, 0, 0) = 0x405aa8
error(0, 2, 0x405aa8, 1, 0locale: Cannot set LC_ALL to default locale: No such file or directory)
.utf8trong LOCALEvà LC_*, nhưng dường như cũng .UTF-8hoạt động ở đây ... Đối với en-US: nó có xuất hiện (không có .utf8) locale -akhông?
export LANG=Cvà export LC_ALL=en_US.UTF-8xem những gì xảy ra. Máy tính xách tay Arch linux của tôi có LOCALE="en_US.UTF-8"/etc/rc.conf và tôi không thể tìm ra nơi máy tính xách tay của mình đặt LANG = C.
/etc/locale.conf? Có vẻ như bạn vô tình viết LANG=en-US(có dấu gạch ngang) thay vì LANG=en_US(với dấu gạch dưới).
/etc/locale.gencũng sẽ hữu ích.
locale -a?