Bagaimana cara memperbaiki masalah lokal saya?

506

Saya mendapatkan pesan ini setiap kali saya melakukan sesuatu seperti memulai atau menghentikan layanan.

perl: warning: Setting locale failed.   
perl: warning: Please check that your locale settings:   
        LANGUAGE = "en_US:en",   
        LC_ALL = (unset),   
        LC_MESSAGES = "en_US.UTF-8",   
        LANG = "en_US.UTF-8"   
    are supported and installed on your system.   
perl: warning: Falling back to the standard locale ("C").   
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   
(Reading database ... 21173 files and directories currently installed.)  
Removing bind9 ...  
 * Stopping domain name service... bind9                                        [ OK ]
Processing triggers for man-db ...   
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   

Bagaimana cara memperbaiki kesalahan ini?

HackToHell
sumber
Perbaikan mudah dan permanen untuk semua pengguna: askubuntu.com/questions/881742/…
Galvani

Jawaban:

513

Pertama kali menjalankan localedaftar apa yang saat ini ditetapkan untuk akun pengguna saat ini:

$ locale
LANG=C
LANGUAGE=
LC_CTYPE=fi_FI.UTF-8
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE=fi_FI.UTF-8
LC_MONETARY="C"
LC_MESSAGES=fi_FI.UTF-8
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=

Kemudian buat lokal yang hilang dan konfigurasi ulang lokal untuk memperhatikan:

$ sudo locale-gen "en_US.UTF-8"
Generating locales...
  en_US.UTF-8... done
Generation complete.

$ sudo dpkg-reconfigure locales
Generating locales...
  en_US.UTF-8... up-to-date
Generation complete.

Sekarang Anda tidak akan melihat kesalahan lagi!

Otto Kekäläinen
sumber
220
tidak bekerja untuk saya
Umair
4
Ini berhasil bagi saya di sejumlah sistem. Apakah ada cara untuk menghindari masalah ini pada sistem yang baru diinstal?
Brylie Christopher Oxley
13
@UmairAyub mungkin Anda memiliki lebih dari satu lokal yang tidak diketahui, coba ini: untuk y dalam $ (lokal | cut -d '=' -f 2 | urutkan | uniq); lakukan locale-gen $ y; Selesai akan menghasilkan lokal untuk setiap definisi yang Anda miliki
Ivan Buttinoni
3
Logout dan Login dapat membantu
SMMousavi
4
@Umair Ada risiko tinggi kesalahan manusia dalam masalah ini. Sistem Anda dikonfigurasikan en_GBsecara default, tetapi Anda mengaturnya en_US. Anda harus mengomentari en_GBdan membatalkan komentar secara manual en_USdi /etc/locale.gen. Lihat jawaban saya askubuntu.com/a/790373/25388 di perangkat keras Raspberry Pi 3b dan sistem Raspbian Jessie.
Léo Léopold Hertz 준영
366

Tidak ada yang disarankan di atas berfungsi dalam kasus saya (Ubuntu Server 12.04LTS). Yang akhirnya membantu adalah meletakkan ke file /etc/environment:

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

Untuk beberapa alasan itu hilang. Output untuk lokal dan perintah lain muncul seperti variabel didefinisikan dengan benar. Dengan kata lain jangan menerima begitu saja semua hal-hal dasar dinyatakan di mana ia harus dinyatakan.

Marcin
sumber
115
Ya, tidak ada yang berfungsi selain yang ini, mungkin karena versi yang diperbarui. Tapi saya lebih suka memasukkan ini ke dalam /etc/default/locale.
Naveed
27
Diperbarui /etc/default/localedan tidak ada lagi peringatan. Terima kasih
ohho
7
Yap, yang lain tidak bekerja untuk saya. Yang ini. Ini adalah satu-liner yang saya gunakan untuk memperbarui tanpa pengawasan ini. sudo sh -c "echo 'LC_ALL=en_US.UTF-8\nLANG=en_US.UTF-8' >> /etc/environment"
dman
12
@ user163207 solusi Anda salah karena ditambahkan (alih-alih menimpa), ini bukan file yang disarankan, dan echoperlu dijalankan dengan interpretasi backslash escapes diaktifkan. Ini sama dengan milik Anda tetapi dengan sh -c "echo -e 'LANG=en_US.UTF-8\nLC_ALL=en_US.UTF-8' > /etc/default/locale"
perbaikan yang
13
JANGAN LUPA MENEMUKAN DAN MASUK-MASUK!
SMMousavi
149

Mereka harus menghilang setelah mengeluarkan:

sudo locale-gen en_US en_US.UTF-8
sudo dpkg-reconfigure locales 

dpkg-reconfiguremengkonfigurasi ulang paket setelah diinstal. Berikan nama paket atau paket untuk mengkonfigurasi ulang. Ini akan menanyakan pertanyaan konfigurasi, seperti ketika paket pertama kali diinstal.

Rinzwind
sumber
9
Saya senang masalah saya setahun yang lalu membantu Anda memperbaiki ini;)
Rinzwind
1
Bukankah seharusnya lokal ini dibuat secara default? Maksudku en, en_AU, en_CA, en_GByang hadir secara default tapi tidak en_US?
Daniel Serodio
@Rinzwind Terima kasih banyak atas usaha Anda! Saya minta maaf; Saya seharusnya mengatakan pertanyaan saya dengan lebih baik. Yang ingin saya tanyakan adalah: Mengapa perlu mengkonfigurasi ulang paket locales setelah membuat locales baru? Sepertinya saya bekerja bahkan tanpa lokal dpkg-reconfigure.
Victor
Menggunakan Ubuntu 14.04, dalam wadah Docker, jadi tidak ada yang diatur. Django makemessagemembutuhkan ini. Ini bekerja dengan sempurna! Terima kasih.
Justin
1
Saya menyadari bahwa raspbian berada di luar ruang lingkup di sini, tetapi saya pikir saya akan menyebutkan bahwa saya harus keluar dan masuk sebelum LC_ALLditetapkan dengan benar.
MatrixManAtYrService
119

Cukup tambahkan berikut ini ke .bashrcfile Anda (dengan asumsi Anda menggunakan bash)

export LC_ALL="en_US.UTF-8"
ratz
sumber
2
Perbaikan manis ini berhasil untuk saya di gambar Amazon-EC2 saya (Sedang menjalankan RHEL AMI default mereka) Terima kasih banyak! :)
gideon
Yang ini bekerja untuk saya dengan gambar Ubuntu 12.04 digitalocean saya.
Inan
2
ini memperbaiki masalah saya. Saya harus mengajukan pertanyaan: mengapa LC_ALL tidak diset oleh perintah locale-gen seperti jawaban lain yang disebutkan di atas ini?
alexserver
Aneh, semua solusi di atas tidak bekerja untuk saya tetapi yang ini berhasil! Setelah mengekspor LC_ALLsaya akhirnya bisa menggunakan sudo dpkg-reconfigure locales.
sobi3ch
akhirnya setelah mencoba banyak trik, ini yang berfungsi untuk saya di kubuntu 14.04.3 lts. Terima kasih!
Jonah
94

Ini adalah masalah umum jika Anda menghubungkan dari jarak jauh, jadi solusinya adalah tidak meneruskan lokal Anda. Edit /etc/ssh/ssh_configdan komentari SendEnv LANG LC_*baris.

pengguna249697
sumber
6
Saya mencoba jawaban lain, tetapi lupa saya menghubungkan dari jauh sampai saya melihat jawaban Anda. Lokasi berbeda di ssh server dan klien yang menyebabkan masalah.
Hieu
2
Pada OSX (terhubung ke ubuntu) di/etc/ssh_config
Michiel de Mare
One-liner untuk melakukan ini: sed -e '/SendEnv/ s/^#*/#/' -i /etc/ssh/ssh_config(berguna untuk penyediaan server)
Albin
Saya tidak dapat mengatur LC_ALL pada mesin lokal tapi itu memperbaiki masalah saya dengan server jarak jauh, terima kasih.
Alexander Shlenchack
1
Mungkin perlu dicatat bahwa Anda harus mengedit file pada mesin lokal bukan pada remote.
Clashsoft
72

Ada perintah untuk itu:

sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8

Itu pembaruan /etc/default/localedengan nilai-nilai yang disediakan.

sgtpep
sumber
4
Ini legit! Jangan lupa untuk keluar / memuat kembali shell Anda, atau Anda tidak akan melihat perubahannya. Jangan lupa untuk memeriksa jawaban yang disetujui untuk menghasilkan dan mengkonfigurasi ulang lokal.
Erik Zivkovic
1
Menjalankan localemasih tidak menunjukkan nilai utf.
Cerin
@Cerin: Myybe, panggilan ke locale-gentidak ada. Sebelumnya, kita harus melakukan apt-get install locales.
koppor
1
Ini tidak akan mengubah LANG untuk root shell di Ubuntu 16.04, karena ditolak di /root/.profile.
Willem
32

Apa yang berhasil bagi saya pada jam 12.10 adalah ini:

apt-get install language-pack-en-base  

Ini setelah dpkg-reconfigure localestidak membuahkan hasil.

George Answerology
sumber
2
Ini jawaban terbaik. Bukannya pengaturan saya salah, tetapi sebenarnya tidak ada. Saya pikir ini mirip dengan masalah OP juga ( "Tidak ada berkas atau direktori" cukup jelas jika lokal Anda adalah diatur tepat!).
Terobosan
1
Saya mendapatkan masalah OPs ketika saya menggunakan apt-get di Ubuntu 12.04. Ini menyelesaikannya dengan sempurna tanpa harus mengedit file apa pun.
Deepend
"language-pack-en-base sudah merupakan versi terbaru."
karlingen
Logout dan Login dapat membantu
SMMousavi
Bekerja untuk saya di ubuntu di chrootbawah debian. Terima kasih :)
Wyatt8740
18

Jangan lupa keluar dari sesi SSH Anda (atau X11 Anda) dengan keluar dan masuk kembali. Semua saran ini tidak berfungsi untuk saya kecuali saya masuk kembali ....

Michael R. Hines
sumber
2
Komentar ini harus mendapatkan lebih banyak upvotes atau setidaknya fakta perlu disorot dalam setiap jawaban.
ni8mr
11

Untuk Ubuntu 12.10 tidak ada yang di atas berfungsi kecuali untuk solusi ratzs. Saya sarankan menambahkan ini ke file /etc/bash.bashrc Anda:

export LC_ALL="en_ZA.UTF-8"
export LC_CTYPE="en_ZA.UTF-8"
Lovemore Nalube
sumber
Dari semua solusi di atas. Ini satu-satunya yang bekerja untuk saya.
JohnnyQ
11

Saya terjebak dalam keadaan aneh di mana mesin lokal saya diatur ke esdan mesin remote (via vagrant) telah disediakan dalam keadaan tidak ditangani. Karena itu, saya harus menggunakan manual export=hanya untuk memfasilitasi yang sukses dpkg-reconfigure. Maka sistemnya baik-baik saja.

export LC_ALL="en_US.UTF-8"
sudo dpkg-reconfigure locales
Charney Kaye
sumber
Terbaik! Karena dpkg-recofiguremenampilkan mojibake.
Orient
9

Saya menulis skrip bash untuk memperbaiki masalah di atas. Jawaban di atas bermanfaat tetapi mengatur variabel lokal dengan hanya mengekspor nilai-nilai dalam variabel shell akan bekerja hanya untuk satu sesi. Saya secara permanen memecahkan masalah ini dengan mengekspor variabel lokal di file .bash_profile. Anda juga dapat menggunakan /etc/profilefile sebagai ganti .bash_profile.

echo "export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8">>~/.bash_profile

Jangan lupa untuk sourceyang .bash_profiledan mengikuti skrip di setup yang mudah.

Ajeet Khan
sumber
8

Anda dapat mencoba:

export LANGUAGE=ru_RU.UTF-8
export LC_CTYPE=ru_RU.UTF-8
export LC_NUMERIC=ru_RU.UTF-8
export LC_TIME=ru_RU.UTF-8
export LC_COLLATE=ru_RU.UTF-8
export LC_MONETARY=ru_RU.UTF-8
export LC_MESSAGES=ru_RU.UTF-8
export LC_PAPER=ru_RU.UTF-8
export LC_NAME=ru_RU.UTF-8
export LC_ADDRESS=ru_RU.UTF-8
export LC_TELEPHONE=ru_RU.UTF-8
export LC_MEASUREMENT=ru_RU.UTF-8
export LC_IDENTIFICATION=ru_RU.UTF-8
export LC_ALL=ru_RU.UTF-8

dimana ru_RUkode negara kamu

Koss
sumber
7

Jawaban yang diterima saat ini tidak cukup dalam strategi pemecahan masalah karena Anda dapat memiliki kesalahan manusia. Anda mengatur sistem Anda ke en_UStetapi Anda telah en_GBmengaktifkan /etc/locale.genseperti saya di utas di sini untuk Raspberry Pi 3b. Anda harus mengaktifkan semua lokal bekas Anda /etc/locale.gen.

Saya en_GB.UTF-8 UTF-8hanya mengaktifkan /etc/locale.gen. Saya seharusnya ada di sana hanya diaktifkan en_US.UTF-8 UTF-8karena perintah lain dijalankan untuk itu. Jadi saya berkomentar GB dan US uncommented, dan semuanya berfungsi sekarang

masi@raspberrypi:~ $ sudo vim /etc/locale.gen

masi@raspberrypi:~ $ sudo locale-gen 
Generating locales (this might take a while)...
  en_US.UTF-8... done
Generation complete.

masi@raspberrypi:~ $ sudo a2enmod rewrite && a2enmod headers && a2enmod ssl
Module rewrite already enabled
Module headers already enabled
Considering dependency setenvif for ssl:
Module setenvif already enabled
Considering dependency mime for ssl:
Module mime already enabled
Considering dependency socache_shmcb for ssl:
Module socache_shmcb already enabled
Module ssl already enabled

Sekarang, saya tidak mendapatkan kesalahan lokal dengan perintah apa pun.

Sistem: Raspbian Jessie
Hardware: Raspberry Pi 3b

Léo Léopold Hertz 준영
sumber
6

Seperti yang dikatakan di sini di Debian Wiki , Anda dapat mengedit /etc/locale.gendan menambahkan semua lokal (atau menghapus tanda komentar pada mereka, saya memiliki daftar semua lokal tetapi semua kecuali yang saya gunakan sebagai komentar) Anda ingin memiliki dukungan untuk pada sistem Anda. Kemudian, jalankan

sudo dpkg-reconfigure locales

untuk memperbarui lokasi di sistem Anda. Sekarang, semua lokal yang Anda tambahkan / hapus komentar /etc/locale.gentersedia di sistem Anda tanpa peringatan apa pun.

msrd0
sumber
3

Jika Anda menggunakan lingkungan KDE, periksa setlocale.shfile di ~/.kde/env/:

$ cat ~/.kde/env/setlocale.sh 
export LANG=en_US.UTF-8
export LANGUAGE=en_US:ru:en
MaximKostrikin
sumber
ini menyelamatkan pantatku .... terima kasih! Sulit dipercaya berapa banyak tempat omong kosong lokal ini ditetapkan ... dan bagaimana di dunia KDE berhasil mengacaukan segalanya dengan mencampurkan dua lokal saya yang berbeda (is_IS untuk lokasi, uang, dll, dan en_EN untuk bahasa menjadi is_EN yang tidak ada) lokal)! Grmpfh.
StFS
2
  1. Anda mungkin perlu menjalankan sudo dpkg-reconfigurejuga untuk aplikasi yang telah Anda instal sementara pengaturan "lokal" tidak valid / tidak cocok.

    Sementara sistem lokal pengaturan saya menginstal salah vim. Kemudian ketika sistem lokal diperbaiki saya melihat situasi yang vimmenunjukkan karakter utf-8 salah sebagai simbol aneh nanodan lessmenunjukkannya dengan benar. Lari

    sudo dpkg-reconfigure vim
    

    tampaknya memperbaiki masalah setelah pengaturan sistem diperbaiki.

  2. Saya juga memperhatikan hal yang sama seperti yang telah disebutkan: Anda mungkin perlu memutuskan / menghubungkan kembali SSH untuk membuat perubahan terlihat.

ajaaskel
sumber
2

Menambahkan teks berikut ini ~/.profileberfungsi untuk saya:

export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8

Saya menggunakan server Ubuntu 16.04 LTS 64-bit di Linode.

Jingguo Yao
sumber
2

Ini bekerja untuk saya ketika saya memiliki masalah yang sama (berdasarkan solusi yang diberikan oleh dman ):

sudo sh -c "echo -e 'LC_ALL=en_US.UTF-8\nLANG=en_US.UTF-8' >> /etc/environment"
pythonhunter
sumber
Saya tidak yakin bagaimana cara menambahkan url ke komentar. @EliahKagan
pythonhunter
1
Tidak masalah - tanggal / cap waktu di sebelah komentar adalah tautan langsung ke komentar tersebut. ... Jadi, saya perhatikan komentar glarrain (meminta >alih - alih >>) sepertinya balasan untuk dman. Saya sebenarnya tidak tahu jalan mana yang benar atau terbaik, tetapi jika Anda memiliki wawasan tentang ini, Anda dapat memperluas jawaban ini dengan informasi lebih lanjut. (Anda tidak perlu melakukannya.)
Eliah Kagan