Bagaimana cara memperbaiki peringatan pengaturan lokal dari Perl?


596

Saat saya berlari perl, saya mendapat peringatan:

perl: peringatan: Pengaturan lokal gagal.
perl: warning: Periksa apakah pengaturan lokal Anda:
    LANGUAGE = (tidak disetel),
    LC_ALL = (tidak disetel),
    LANG = "en_US.UTF-8"
didukung dan diinstal pada sistem Anda.
perl: peringatan: Jatuh kembali ke lokal standar ("C").

Bagaimana saya memperbaikinya?


Apa yang terjadi ketika Anda memeriksa pengaturan lokal seperti pesan kesalahan kepada Anda?
brian d foy

3
alih-alih memasang lokal, Anda juga dapat mengubah lokal. Di kotak Ubuntu saya, ini dilakukan untuk satu pengguna dengan mengedit~/.pam_environment
Janus Troelsen

Pada ODROID-C1 saya yang menjalankan Ubuntu masalahnya memang file ~ / .pam_environment. Beberapa variabel adalah es_US.UTF-8, bukan en_US.UTF-8. Terima kasih.
f1vefour

Saya mendapatkan ini di Cygwin \ Babun. Hanya menginstal ulang perl yang memperbaikinya.
Lucas Soares

Jawaban:


449

OS Anda tidak tahu en_US.UTF-8.

Anda tidak menyebutkan platform tertentu, tetapi saya dapat mereproduksi masalah Anda:

% uname -a
Pemburu OSF1 V5.1 2650 alpha
% perl -e keluar
perl: peringatan: Pengaturan lokal gagal.
perl: warning: Periksa apakah pengaturan lokal Anda:
    LC_ALL = (tidak disetel),
    LANG = "en_US.UTF-8"
    didukung dan diinstal pada sistem Anda.
perl: peringatan: Jatuh kembali ke lokal standar ("C").

Dugaan saya adalah Anda menggunakan ssh untuk terhubung ke host lama ini dari mesin desktop yang lebih baru. Biasa /etc/ssh/sshd_configmengandung

AcceptEnv LANG LC_*

yang memungkinkan klien untuk menyebarkan nilai-nilai variabel lingkungan ke dalam sesi baru.

Peringatan itu memberi Anda petunjuk tentang cara memadamkannya jika Anda tidak memerlukan lokal lengkap:

% env LANG = C perl -e keluar
%

atau dengan bash:

$ LANG = C perl -e keluar
$ 

Untuk perbaikan permanen, pilih salah satu

  1. Pada host yang lebih lama, setel LANGvariabel lingkungan di file inisialisasi shell Anda.
  2. Ubah lingkungan Anda di sisi klien, misal , daripada ssh hunter2menggunakan perintah LANG=C ssh hunter2.
  3. Jika Anda memiliki hak admin, hentikan ssh dari mengirimkan variabel lingkungan dengan mengomentari SendEnv LANG LC_*baris di file lokal /etc/ssh/ssh_config . (Terima kasih atas jawaban ini . Lihat Bug 1285 untuk OpenSSH untuk lebih lanjut.)

22
Terima kasih! Saya mendapat pesan kesalahan ini saat menghubungkan dengan git ke server saya. Setelah menambahkan de_CH.UTF-8 (tidak didukung di sana tetapi digunakan secara lokal) dengan dpkg-reconfigure localespesan hilang.
Simon A. Eugster

82
Saya memiliki masalah ini selama berabad-abad, ... menghapus "AcceptEnv LANG LC_ *" dari sshd_config akhirnya menyelesaikannya. Terima kasih atas petunjuknya!
madc

2
@Greg Bacon, Tidakkah ada juga kasus di mana Anda ingin mengatur variabel lingkungan sistem yang luas, misalnya dengan membuat file / etc / environment? help.ubuntu.com/community/…
lampiran

25
@HermannIngjaldsson, setidaknya di Ubuntu (12.10), tidak perlu me-reboot server (setelah menghapus "AcceptEnv LANG LC_ *"). Saya baru saja memuat ssh config:, service ssh reloadyang membutuhkan sepersekian detik, dan bahkan tidak menyebabkan sesi ssh saat ini berakhir.
noamtm

3
tambahkan 'ekspor LC_ALL = C' lalu 'sumber ~ / .bashrc' di sistem klien menyelesaikan masalah.
EffectiveMatrix

476

Berikut ini cara menyelesaikannya di Mac OS Lion (10.7) atau Cygwin (Windows 10):

Tambahkan baris berikut ke bashrc atau bash_profile di mesin host:

# Setting for the new UTF-8 terminal support in Lion
export LC_CTYPE=en_US.UTF-8
export LC_ALL=en_US.UTF-8

Jika Anda menggunakan zsh, edit zshrc:

# Setting for the new UTF-8 terminal support in Lion
LC_CTYPE=en_US.UTF-8
LC_ALL=en_US.UTF-8

6
Terima kasih, saya sudah mencari solusi untuk masalah ini untuk waktu yang lama, dan saya selalu berpikir itu adalah masalah dalam konfigurasi server Ubuntu saya, dan sepertinya tidak ada solusi yang membantu (semua hal yang mengatur ulang dkpg (
Teemu Kurppa

5
Karena LC_ALLmenimpa semua variabel lain, saya lebih suka mengatur LANG=de_AT.UTF-8dan variabel individual suka LC_MESSAGES=en_US.UTF-8. Jika suatu variabel tidak disetel itu kembali ke LANG. Anda juga bisa misalnya. unset LC_CTYPEuntuk memaksanya jatuh kembali ke LANG.
David

4
Menempatkan baris-baris itu di .bashrc tidak berfungsi, tetapi bash_profile menyelesaikannya! Saya harus membuat file.
Hermann Ingjaldsson

5
Menyelesaikan masalah ini ~/.bashrcuntuk saya ... maka harus memuat ulang menggunakan source ~/.bashrc... Thnks <3
Enissay

5
Terima kasih, ini bekerja dengan baik pada ZSH dan plugin oh-my-zsh di bawah Mac OS X El Capitan, di bagian bawah ~ / .zshrc: LC_CTYPE = en_US.UTF-8 LC_ALL = en_US.UTF-8
Valerio Schiavoni

207

Jika Anda membuat rootf menggunakan debootstrap, Anda perlu membuat locales. Anda dapat melakukan ini dengan menjalankan:

# (optional) enable missing locales
sudo nano /etc/locale.gen

# then regenerate
sudo locale-gen

Tip ini berasal dari, https://help.ubuntu.com/community/Xen


28
Ini adalah perbaikan nyata bagi saya.
Afriza N. Arief

6
locale-gen tidak mengambil argumen apa pun (setidaknya di Debian stable). Alih-alih, edit /etc/locale.gen untuk menghilangkan tanda komentar pada locales yang Anda inginkan, kemudian jalankan sudo locale-gen
Sam Watkins

2
diperbaikiUbuntu Server
Paschalis

5
Pada Debian, Anda mungkin perlu melakukannya $ echo en_US UTF-8 >> /etc/locale.genterlebih dahulu.
akhmed

1
Di Gentoo (setidaknya), locale-gentidak perlu argumen. Bunyinya dari /etc/locale.gen.
Pistos

142

Menggunakan:

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

Ini bekerja untuk Debian . Saya tidak tahu mengapa - tetapi gen lokal tidak membuahkan hasil.

Penting! Ini solusi sementara. Itu harus dijalankan untuk setiap sesi.


13
Yang ini berhasil untuk saya. Saya hanya memasukkannya ke .bashrcfile saya .
Anirudh Ramanathan

2
Bekerja untuk saya juga. Saya hanya perlu mengatur dua pengaturan (LANGUAGE dan LC_ALL) yang muncul tidak disetel dalam peringatan Perl
laurent

2
Di Debian, local-genhanya proses lokal yang tidak diomentari di /etc/local.gen. Anda mungkin perlu melakukan echo en_US UTF-8 >> /etc/locale.genterlebih dahulu.
akhmed

ini bekerja untuk saya di Elementary OS Freaya (berbasis Ubuntu)
valkirilov

1
LC_ C TYPE mungkin?
mixel

139

Ini umumnya berarti Anda belum mengatur lokal dengan benar pada kotak Linux Anda.

Di Debian atau Ubuntu, itu artinya Anda perlu melakukannya

$ sudo locale-gen
$ sudo dpkg-konfigurasi ulang lokal

Lihat juga man locale-gen .


30
tidak memperbaiki masalah di sini
Somatik

6
dpkg-reconfigure locales - memperbaiki masalah untuk saya, debian 7.1
newUserNameHere

4
dpkg-reconfigure locales gagal sendiri dengan pesan galat perl lokal yang sama yang seseorang coba perbaiki di tempat pertama !!!!
matteo

10
Ini bekerja untuk saya di Ubuntu 14.04, meskipun saya harus menambahkan lokal yang hilang terlebih dahulu dengansudo locale-gen es_UY.UTF-8
alf

2
@matteo Hanya pertama kali, sebelum memperbaiki kesalahan. Coba lagi, dan itu harus diperbaiki.
Zero3

92

Untuk pengguna macOS & Mac OS X saja

Saya mendapatkan peringatan yang sama saat menggunakan Git

Untuk mengatasi peringatan ini Hapus tanda centang pada Set locale environment variable on startuppilihan dan restart terminal Anda. Cuplikan layar di bawah ini mewakili pengaturan terminal saya.

masukkan deskripsi gambar di sini


3
Wow, sangat sederhana dan memperbaiki masalah saya! Terima kasih!
Michal

3
Saya mencoba semua yang lain tetapi yang ini berhasil untuk saya. Saya menggunakan iTerm dan memiliki opsi pengkodean karakter yang sama.
Michael Morrison

2
Sayangnya ini merusak ZSH (tabbing berhenti bekerja)
Christian

1
Ini benar-benar melakukan trik untuk Mac OS. Ngomong-ngomong, ini mulai terjadi pada saya setelah ditingkatkan ke macOS Sierra. Dan ini memang memperbaiki masalah ini untuk saya.
Paulo Malvar

1
ini memperbaiki masalah saya. itu mulai terjadi pada saya, setelah memperbarui ke Mac OS X High Sierra dari Sierra.
Lucian Irimie

36

Ini adalah perbaikan sederhana di Ubuntu. Anda harus membuat Lokal dari awal, menjalankan perintah berikut dari baris perintah:

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

Ini harus membuat lokal dan kemudian mengkonfigurasi ulang.


Ini bekerja dengan baik untuk saya bahkan menggunakan pt_BR pt_BR.UTF-8- Terima kasih.
Marcos Freitas

29

Menambahkan hal berikut untuk /etc/environmentmemperbaiki masalah saya di Debian dan Ubuntu (tentu saja, ubah agar sesuai dengan lokal yang ingin Anda gunakan):

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

7
.. Saya mendapat peringatan yang mengatakan pengaturan lokal /etc/environmentsudah usang dan sebaliknya harus ditetapkan /etc/default/locale. Keduanya tampaknya berfungsi untuk saat ini.
joscarsson

seharusnyaLC_CTYPE
aexl

25

Saya sekarang menggunakan ini:

$ cat /etc/environment
...
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8

Kemudian keluar dari sesi SSH dan masuk lagi.

Jawaban lama:

Hanya ini yang membantu saya:

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

$ sudo su

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

# locale-gen en_US.UTF-8
Generating locales...
  en_US.UTF-8... up-to-date
Generation complete.

# dpkg-reconfigure locales
Generating locales...
  en_AG.UTF-8... done
  en_AU.UTF-8... done
  en_BW.UTF-8... done
  en_CA.UTF-8... done
  en_DK.UTF-8... done
  en_GB.UTF-8... done
  en_HK.UTF-8... done
  en_IE.UTF-8... done
  en_IN.UTF-8... done
  en_NG.UTF-8... done
  en_NZ.UTF-8... done
  en_PH.UTF-8... done
  en_SG.UTF-8... done
  en_US.UTF-8... up-to-date
  en_ZA.UTF-8... done
  en_ZM.UTF-8... done
  en_ZW.UTF-8... done
Generation complete.

# exit

$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE="en_US.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=en_US.UTF-8

Ini bekerja dengan baik untuk saya di Ubuntu 15.04, terima kasih banyak.
Goke Obasa

22

pada Debian setelah banyak mencari ini berhasil.

pertama:

sudo apt-get purge locales

kemudian:

sudo aptitude install locales

dan yang terkenal:

sudo dpkg-reconfigure locales

Ini rids sistem lokal, kemudian menginstal ulang lokal dan menurunkan libc6 dari 2,19 ke 2,13 yang merupakan masalah. Kemudian konfigurasikan kembali locales.


4
dpkg-reconfigure localeshanya itu yang dibutuhkan. sudojika Anda adalah tipe pria sudo, atau lakukan sebagai root. Kemudian pilih lokal Anda sesuai dengan apa yang Anda miliki di lingkungan shell Anda.
mknaf

6
local-configurasi dpkg HARUS menjadi semua yang dibutuhkan. Setelah Anda mencobanya 100 kali dan melihat-lihat internet dan hanya itu yang Anda lihat dan masalahnya masih belum selesai, coba di atas. Kemudian kembali dan angkat suara ini. :)
tkjef

1
akhirnya jawaban non-hack untuk masalah ini, pasti harus diterima!
php_nub_qq

17

Ini jawaban cepat. Kami akan mengatur lokal yang tidak disetel setelah reboot. Pertama buka file bash dan edit:

nano .bashrc

tambahkan baris ini ke file:

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

aktifkan perubahan dengan memuat ulang bash:

source ~/.bashrc

hasil tes :

locale

Satu-satunya yang bekerja untuk saya, Raspbian dan server ubuntu 16.04 :)
Liso

13

Untuk Ubuntu gunakan ini,

#export LANGUAGE=en_US.UTF-8
#export LC_ALL=en_US.UTF-8
#export LANG=en_US.UTF-8
#export LC_TYPE=en_US.UTF-8

Bekerja untukku.


Ini juga bekerja untuk saya, dengan menghapus semua konten dalam file /etc/default/localedan hanya meletakkan definisi vars (menghapus kata ekspor) dan me-restart server
Edenshaw

12

Jika Anda menggunakan Mac OS X v10.10 (Yosemite) atau lebih tinggi untuk terhubung di server Linux Anda, Anda dapat mencoba langkah-langkah ini.

  1. Simpan file Anda / etc / ssh / sshd-config asli

  2. Pakai ~ / .bash_profile Anda

    export LANG="en_US"
    export LC_ALL=$LANG.UTF-8
  3. Lari

    dpkg-reconfigure locales

    Dan pilih "en_US.UTF-8"


10
sudo nano /etc/locale.gen

Batalkan komentar lokal yang ingin Anda gunakan (mis. en_US.UTF-8 UTF-8):

Lalu lari:

sudo /usr/sbin/locale-gen

Sumber: http://people.debian.org/~schultmc/locales.html


Perusahaan tempat saya bekerja di AS memiliki server git yang memiliki pelanggan internasional. Kerumunan GB mengeluh bahwa klon git mereka di atas ssh akan memiliki masalah karena perbedaan lokal. Ini diterapkan pada server memperbaiki masalah ini untuk mereka.
Therealstubot

10

Anda perlu mengonfigurasi lokal secara tepat /etc/default/locale, logout, masuk , dan kemudian jalankan perintah biasa

root@host:~# echo -e 'LANG=en_US.UTF-8\nLC_ALL=en_US.UTF-8' > /etc/default/locale
root@host:~# exit
local-user@local:~$ ssh root@host
root@host:~# locale-gen en_US.UTF-8
root@host:~# dpkg-reconfigure locales

4
langkah-langkah ini berhasil untuk saya (server Ubuntu 14.04). titik utamanya adalah keluar dan masuk lagi.
liberborn

9
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_ALL to default locale: No such file or directory

Larutan:

Coba ini ( uk_UA.UTF-8 adalah lokal saya saat ini. Tulis lokal Anda, misalnya en_US.UTF-8 !)

sudo locale-gen uk_UA.UTF-8

dan ini.

sudo dpkg-reconfigure locales

Terima kasih ini menyelesaikan masalah saya, setelah melakukan ini dan menginstal ulang.
madprops

8

untuk saya, saya memperbaiki kesalahan ini dengan mengedit file .bashrc add export. Tambahkan setelah komentar awal.

Tambahkan dukungan bahasa.

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

Regads yang baik,


6

Menambahkan lokal yang benar untuk ~/.bashrc, ~/.bash_profile, /etc/environmentdan sejenisnya akan memecahkan masalah, namun tidak dianjurkan, karena menimpa pengaturan dari /etc/default/locale, yang membingungkan di terbaik dan bisa menyebabkan lokal tidak diterapkan secara konsisten pada terburuk.

Sebagai gantinya, seseorang harus mengedit /etc/default/localesecara langsung, yang mungkin terlihat seperti ini:

LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE=en_US

Perubahan akan berlaku saat berikutnya Anda masuk. Anda bisa mendapatkan lokal baru di shell yang ada dengan sumber /etc/default/localeseperti ini:

$ . /etc/default/locale

1
perlu me-restart sistem setelah langkah ini
Ghanshyam Bagul

Anda cukup berkomentar di lokal yang diinginkan di "/etc/locale.gen" lalu jalankan:locale-gen
Dave Everitt

5

Bagi siapa pun yang terhubung ke DigitalOcean atau penyedia Cloud hosting lainnya dari iTerm2.app di MacOS High Sierra dan mendapatkan kesalahan ini pada beberapa perintah:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LC_CTYPE = "UTF-8",
    LANG = "en_US.UTF-8"
  are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_US.UTF-8").

Ini memperbaiki masalah bagi saya:

masukkan deskripsi gambar di sini

Saya tahu utas ini sudah lama tetapi mungkin seseorang akan menemukan ini berguna. Saya tahu betapa menjengkelkannya hal ini.


Yup adalah pengaturan ini di iterm2! Terima kasih!
Brian Olsen

4

Mengikuti jawaban yang diterima:

LANG = C ssh hunter2.

LC_ALL = C ssh hunter2

di sisi klien melakukan trik untuk saya.


Bekerja untuk saya di OSX 10.10.3, sementara hanya "LANG = C" tidak cukup. Terima kasih Alex!
Christian

4

Dengan zsh ohmyzsh saya menambahkan ini ke .zshrc:

 # You may need to manually set your language environment
 LANGUAGE=en_US.UTF-8
 LANG=en_US.UTF-8
 LC_CTYPE=en_US.UTF-8
 LC_ALL=en_US.UTF-8

Dengan menghapus garis export LANG=en_US.UTF-8

Membuka kembali tab baru dan masuk SSHed, bekerja untuk saya :)


3

Tambahkan LC_ALL="en_GB.utf8"ke /etc/environmentdan reboot. Itu saja.


2

Seperti biasa, iblis ada di detail ...

Di Mac OS X v10.7.5 (Lion), untuk memperbaiki beberapa kesalahan Django , dalam ~/.bash_profilepengaturan saya, saya telah mengatur:

export LANG=en_EN.UTF-8
export LC_COLLATE=$LANG
export LC_CTYPE=$LANG
export LC_MESSAGES=$LANG
export LC_MONETARY=$LANG
export LC_NUMERIC=$LANG
export LC_TIME=$LANG
export LC_ALL=$LANG

Dan pada gilirannya untuk waktu yang lama saya mendapat peringatan itu saat menggunakan Perl.

Salahku! Seperti yang saya sadari kemudian, sistem saya en_US.UTF-8! Saya memperbaikinya hanya dengan mengubah dari

export LANG=en_EN.UTF-8

untuk

export LANG=en_US.UTF-8


2

Semua jawaban sebelumnya salah. Pesannya jelas - lokal tidak ada. Solusinya adalah menambahkan lokal yang sesuai. Anda melakukannya dengan mengedit file /etc/locale.gen, menghapus tanda # di depan lokal yang dilaporkan hilang dan kemudian mengeluarkan perintah:

$ sudo locale-gen

Ini sebenarnya akan menghasilkan lokal yang ditentukan dalam /etc/locale.gen dan oleh karena itu pesan tidak akan ditampilkan.


Ini hanyalah satu jawaban dan bekerja pada Debian kuno (6) untuk saya. Semua yang lain terlalu rumit dan sedikit keluar jalur.
Dave Everitt

2

dalam kasus saya, dengan debian8.6, saya harus mengubah pengaturan di:

/etc/ssh/ssh_config untuk #AcceptEnv LANG LC_*

dan sshd_configuntuk#SendEnv LANG LC_*

kemudian mulai kembali layanan ssh.

Akhirnya, lakukan

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


2

Tambahkan lokasi yang hilang ke .bash_profile

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

Kemudian sumber .bash_profile Anda

source ~/.bash_profile

1

Dalam kasus saya, ini adalah hasilnya:

LANGUAGE = (unset),
LC_ALL = (unset),
LC_PAPER = "ro_RO.UTF-8",
LC_ADDRESS = "ro_RO.UTF-8",
....

Solusinya adalah:

sudo locale-gen ro_RO.UTF-8

1

sshmenimpa variabel lokal LC secara default. Lihat /etc/ssh/sshd_config:

AcceptEnv LANG LC_*

Jadi mungkin Anda perlu mengatur variabel-variabel ini di shell lokal Anda.


1

Bagi saya, di Ubuntu 16.04 (Xenial Xerus) berikut ini berfungsi:

root@host:~#locale-gen en_GB.UTF-8
root@host:~#localectl set-locale LANG=en_GB.UTF-8,LC_ALL=en_GB.UTF-8

Kemudian reboot ...

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.