Saya menggunakan Arch Linux, dan saya telah mengikuti petunjuk di wiki tentang pengaturan lokal saya.
Hampir setiap program yang berjalan mengeluhkan lokal - bahkan locale
. Ini terlihat seperti ini:
% 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=
atau:
% 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")
Sesuatu yang sedikit membingungkan adalah bahwa /etc/locale.gen
ada beberapa contoh; semua baris UTF-8 memiliki "sesuatu.UTF-8", dan menjalankan locale-gen
pertunjukan en_US.UTF-8... done
saat sedang berjalan, tetapi locale -a
, yang seharusnya menunjukkan kepada Anda pertunjukan lokal yang tersedia en_US.utf8
. Saya sudah mencoba berbagai kombinasi kedua format di /etc/locale-gen
dan LOCALE=
di /etc/rc.conf
, tetapi tidak ada yang memperbaiki masalah.
Informasi tambahan:
% locale -a
C
POSIX
en_US
en_US.iso88591
en_US.utf8
Saran Bruce Ediger tentang pengaturan LANG=C
dan LC_ALL=en_US.UTF-8
bekerja (pada kenyataannya, pengaturan LC_ALL
memperbaikinya, pengaturan LANG
tidak penting), tetapi saya ingin tahu apa yang terjadi. Menurut SUS , LC_ALL akan menimpa semua variabel LC_ * lainnya jika disetel dan bukan nol. Dalam sistem saya, sudah diatur, tetapi itu adalah nol, jadi itu harus diabaikan, dan nilai-nilai lain harus digunakan sebagai gantinya. Itu tidak apa yang terjadi, tampaknya aplikasi panggil setlocale
dengan LC_ALL
, mendapatkan NULL
kembali, dan menghasilkan kesalahan, bahkan ketika panggilan lain untuk setlocale
kembali string yang baik.
Berikut adalah atas sebuah ltrace
dari locale
(gulir kanan untuk melihat nilai-nilai fungsi kembali)
% 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)
sumber
locale -a
?.utf8
diLOCALE
danLC_*
, tapi rupanya.UTF-8
bekerja di sini juga ... Adapun en-US: tidak tampak (tanpa.utf8
) dilocale -a
?export LANG=C
danexport LC_ALL=en_US.UTF-8
dan lihat apa yang terjadi. Laptop Linux Arch saya memilikiLOCALE="en_US.UTF-8"
/etc/rc.conf, dan saya tidak tahu di mana laptop saya mengatur LANG = C./etc/locale.conf
? Sepertinya Anda tidak sengaja menulisLANG=en-US
(dengan tanda hubung) alih-alihLANG=en_US
(dengan garis bawah)./etc/locale.gen
akan bermanfaat juga.Jawaban:
Anda kehilangan file yang akan digunakan untuk default lokal jika tidak ada
$LANG
atau$LC_ALL
(atau semua yang lebih spesifik$LC_whatever
) yang ditetapkan.Pada glibc yang lebih lama, ini adalah / usr / lib / locale / locale-arsip. Karena GNU / Linux kacau, Anda harus menggunakan strace untuk menentukan file mana yang diharapkan dalam versi tertentu yang digunakan pada mesin Anda:
---------------------- Komentar ditambahkan 1 hari kemudian:
"ltrace -S" harusnya oke, karena ini menunjukkan syscalls.
Kalau tidak, "ltrace" tidak terlalu membantu (yaitu kontra-produktif versus strace), karena hanya menunjukkan panggilan teratas. Itu jelas (setlocale (3)), sedangkan masalah sebenarnya terjadi dalam libc.
Kedengarannya seperti Anda memiliki baku data lokal diinstal, karena en_US.UTF-8 karya.
Jika demikian, maka sesuatu seperti ini akan memperbaiki masalah Anda, menetapkan standar seluruh sistem:
sumber
sudo localedef -f UTF-8 -i en_US en_US.UTF-8
bekerja pada Raspbian 2018-11-13 Lite.Saya memiliki masalah yang sama setelah menyiapkan
/etc/locale.conf
hanya hari ini (terkait dengan perubahan terbaru untuk/etc/rc.conf
. Dalam kasus saya, ternyata lokal tidak diinstal.Periksa
/etc/locale.gen
. Semua lokal tempat referensi variabel lingkungan Anda harus diaktifkan (yaitu tidak dikomentari) di sana. Setelah melakukan perubahan, jalankansudo locale-gen
untuk menginstal lokal yang dipilih.sumber
Mengikuti tautan ini menyelesaikan masalah saya:
ini menghasilkan file
/etc/locale.conf
yang memperbaiki masalah inisumber
Saya memiliki masalah yang sama baru-baru ini, semua nama file unicode tidak ditampilkan dengan benar, ketika saya tidak sengaja menghapus 'LOCALE = en_US.utf8' di
/etc/rc.conf
. Jadi saya memeriksa skrip boot:Solusi sederhana adalah memeriksa keduanya
DAEMON_LOCALE
danLOCALE
masuk/etc/rc.conf
, pastikan yang pertama tidakno
dan yang kedua tidak kosong.sumber
Mungkin salah satu pengaturan Anda tidak valid? Ini adalah pengaturan lokal saya untuk referensi; mereka tidak menyebabkan kesalahan (KUbuntu 12.04):
sumber