Tidak dapat mengatur LC_CTYPE ke lokal default: Tidak ada file atau direktori tersebut

55

Saya memiliki pertanyaan yang tepat seperti ini tetapi tidak ada solusi. Saya mencoba tetapi tidak berhasil

Bagaimana cara memperbaiki masalah lokal saya?

$ locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE=UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

$ locale -a
locale: Cannot set LC_CTYPE to default locale: No such file or directory
C
C.UTF-8
en_US.utf8
POSIX

Apakah ini karena ketidakcocokan en_US.UTF-8 dan en_US.utf8?

Bagaimana cara memperbaiki?

Mave
sumber
Apakah Anda membaca ini askubuntu.com/a/229512/387382 ?
Helio

Jawaban:

53

Buka terminal dan jalankan perintah di bawah ini:

export LC_ALL="en_US.UTF-8"
Nazar
sumber
Ini berhasil, tetapi mengapa?
Yu Jiaao
16
Ini tidak menyelesaikan apa pun karena variabel dihancurkan pada akhir sesi ..
Etienne Gautier
Solusi hebat dengan sedikit kata-kata. Lol!
Redbob
1
Saat mengekspor var ini, saya mendapatkan:-bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
nnyby
36

Masalah yang sama ini (LC_CTYPE = UTF-8, yang salah) dapat terjadi ketika Anda login melalui ssh dari Mac ke kotak linux, dan terminal Anda secara otomatis menetapkan variabel lingkungan. Ada kotak centang untuk itu. Hapus centang, dan Anda siap melakukannya. Di iTerm ada di profil-> Terminal Tab.

raarts
sumber
2
di iTerm nonaktifkan kotak centang "Preferensi> Profil> Default> Terminal> Lingkungan> Tetapkan variabel lokal secara otomatis"
ecerulm
1
-1: Meskipun ini mungkin berhasil, ini sangat invasif. Anda juga berpotensi mempengaruhi perilaku terminal lokal Anda serta perilaku setiap host yang Anda hubungkan. Meskipun temuan Anda benar, sebaiknya gunakan ssh_config agar tidak mengirim LC_ * untuk host yang diketahui memiliki masalah.
Max Ried
3
Bisakah Anda menambahkan jawaban Anda sendiri, memperluasnya dengan penjelasan lebih lanjut tentang mengapa ini berpotensi mempengaruhi perilaku terminal lokal Anda, dan bagaimana cara memberitahu ssh_config untuk tidak mengirim LC_ *. Karena Anda hanya -1 jawaban saya tanpa penjelasan nyata.
raarts
Jika Anda terhubung dari MacOS menggunakan Terminal, buka Pengaturan Terminal> Lanjutan dan hapus centang "Setel variabel lingkungan lokal saat startup".
javaxian
1
Apa yang tampaknya terjadi adalah: pada sistem lokal Anda, Anda memiliki beberapa lokal yang diinstal, kemudian Anda ssh ke sistem lain, yang tidak memiliki lokal ini diinstal. Klien terminal akan memberi tahu sistem jarak jauh apa lokasi Anda, dan sistem jarak jauh akan gagal menjawab dalam bahasa yang diminta. Anda memiliki dua cara untuk memperbaiki ini: baik Anda mengubah, apa yang diminta atau Anda menambahkan lokal yang diminta ke sistem jarak jauh (yang membutuhkan akses root).
Jan
27

Saya memiliki masalah serupa dan menambahkan baris di bawah ini di /etc/default/localefile saya :

LC_CTYPE="en_US.UTF-8"
LC_ALL="en_US.UTF-8"
LANG="en_US.UTF-8"

Saya mendapatkan ini dari pos ini: Bagaimana cara memperbaiki masalah lokal saya?

Sand1512
sumber
3
Nah, dengan melakukan itu Anda berakhir dengan konfigurasi lokal yang sangat berantakan. /etc/environmenttidak dimaksudkan untuk mengatur lokal di Ubuntu; /etc/default/localeaku s. Juga, dalam kasus desktop Anda tidak boleh, pernah ditetapkan secara LC_ALLterus-menerus. Cara Anda akan membuat UI untuk mengontrol pengaturan bahasa / lokal di desktop, seperti Dukungan Bahasa, tidak berguna.
Gunnar Hjalmarsson
Ini sebenarnya berfungsi. Setelah reboot.
TranslucentCloud
Logout dan Login, seharusnya berfungsi
Sand1512
19

hanya dengan ini bekerja untukku

sudo dpkg-reconfigure locales
sudo locale-gen
Jonathan Rodriguez
sumber
2
Sebenarnya hanya sudo dpkg-reconfigure localesdiperlukan karena menggunakan gen lokal.
Etienne Gautier
9
export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales
Hardik Gajjar
sumber
Saya menjalankan contoh Vultr yang hampir bersih dengan isu-isu seperti dalam pertanyaan, melihat ke lingkungan vars dan semuanya tampak baik-baik saja. Namun, sudo dpkg-reconfigure localesmelakukan sesuatu yang pasti telah hilang. Ssh sesi saya sekarang OK. Terima kasih!
Jonas
6

Output dari localeperintah menunjukkan bahwa Anda memiliki garis yang salah ini di lingkungan Anda:

LC_CTYPE="UTF-8"

("UTF-8" bukan nama lokal yang valid.)

Biasanya berasal dari /etc/default/locale. Silakan hapus baris itu, jika ada di sana, dan login kembali.

Jika tidak berasal dari sana, itu bisa berasal dari konfigurasi shell Anda, atau jika Anda login jarak jauh melalui SSH, dari konfigurasi mesin klien.

Gunnar Hjalmarsson
sumber
Apakah saya mengubah LC_CTYPE ke utf8?
Mave
@ Lucas: Tidak, itu akan sama buruknya. Karena LANG diatur, Anda cukup menghapus seluruh baris yang dimulai dengan LC_CTYPE.
Gunnar Hjalmarsson
Jika Anda ingin mengatur LC_TYPE, Anda juga harus mengaturnya ke "en_US.UTF-8".
Jika itu berasal dari konfigurasi mesin klien, Anda dapat menambahkan lokal di server dengan dpkg-reconfigure locales.
Paul Rougieux
5

Perintah ini menyelamatkan hidupku

sudo echo "LC_ALL=en_US.UTF-8" >> /etc/environment
sudo echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
sudo echo "LANG=en_US.UTF-8" > /etc/locale.conf
sudo locale-gen en_US.UTF-8
Taras Vaskiv
sumber
5
File dibuka sebelumnya sudo. Redirect tidak akan berfungsi kecuali Anda sudah root.
Martin Thornton
3

File / etc / default / locale dapat memiliki baris tambahan (tetapi tidak perlu): Contoh file dapat terlihat seperti ini:

#  File generated by update-locale
LANG=en_US.UTF-8
LANGUAGE="en_IN:en

Untuk memilah dan berhasil membuat dan mengkonfigurasi ulang lokal, hapus atau komentar semua baris dari file ini kecuali:

LANG=en_US.UTF-8

File akhirnya akan terlihat seperti:

#  File generated by update-locale
LANG=en_US.UTF-8
# LANGUAGE="en_IN:en

Setelah ini, jalankan dpkg-reconfigure locales, pilih en_US.UTF-8 ketika diminta untuk memilih lokal, dan Anda harus siap. Anda akan menerima Generation complete.pesan saat proses selesai.

Ambar
sumber
0

Saya berhasil menyebabkan ini sendiri ketika memigrasi file dot direktori home ke mesin baru, dan saya gagal mengidentifikasi penyebabnya untuk sementara waktu karena mencari file LC_tetapi tidak LOC.

The ~/.bashrcfile I disalin memiliki berikut:

export LOCPATH=/var/guix/profiles/per-user/root/guix-profile/lib/locale

(nilai tertentu di sini adalah karena percobaan sebelumnya dengan GNU Guix pada mesin lama; tetapi fakta yang relevan adalah bahwa variabel lingkungan ditetapkan ke jalur yang sekarang tidak valid.)

Ini menghasilkan kesalahan berikut ketika menjalankan berbagai program:

Warning: locale not supported by C library, locale unchanged

Dan kesalahan ini saat menjalankan locale:

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

Menghapus (atau mengomentari) LOCPATHsaluran menyelesaikan masalah saya.

phils
sumber
0

jalankan saja yang berikut ini:

sudo apt-get upgrade

itu akan menghasilkan semua lokasi, lalu menetapkan default ke AS:

export LC_ALL="en_US.UTF-8"
Hosein Basafa
sumber