When I run perl
, I get the warning:
perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LANG = "en_US.UTF-8" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C").
How do I fix it?
~/.pam_environment
Here is how to solve it on Mac OS X v10.7 (Lion) or Cygwin (Windows 10):
Add the following lines to your bashrc or bash_profile file on the host machine:
# Setting for the new UTF-8 terminal support in Lion
export LC_CTYPE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
If you are using Z shell (zsh), edit file zshrc:
# Setting for the new UTF-8 terminal support in Lion
LC_CTYPE=en_US.UTF-8
LC_ALL=en_US.UTF-8
Your OS doesn't know about en_US.UTF-8
.
You didn't mention a specific platform, but I can reproduce your problem:
% uname -a OSF1 hunter2 V5.1 2650 alpha % perl -e exit perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LC_ALL = (unset), LANG = "en_US.UTF-8" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C").
My guess is you used ssh to connect to this older host from a newer desktop machine. It's common for /etc/ssh/sshd_config
to contain
AcceptEnv LANG LC_*
which allows clients to propagate the values of those environment variables into new sessions.
The warning gives you a hint about how to squelch it if you don't require the full-up locale:
% env LANG=C perl -e exit %
or with Bash:
$ LANG=C perl -e exit $
For a permanent fix, choose one of
On the older host, set the LANG environment variable in your shell's initialization file. Modify your environment on the client side, e.g., rather than ssh hunter2, use the command LANG=C ssh hunter2. If you have administrator rights, stop ssh from sending the environment variables by commenting out the SendEnv LANG LC_* line in the local /etc/ssh/ssh_config file. (Thanks to this answer. See Bug 1285 for OpenSSH for more.)
dpkg-reconfigure locales
the message is gone.
service ssh reload
, which takes a fraction of a second, and doesn't even cause the current ssh session to terminate.
If you are creating a rootfs using debootstrap you will need to generate the locales. You can do this by running:
# (optional) enable missing locales
sudo nano /etc/locale.gen
# then regenerate
sudo locale-gen
This tip comes from, https://help.ubuntu.com/community/Xen
$ echo en_US UTF-8 >> /etc/locale.gen
first.
locale-gen
does not take arguments. It reads from /etc/locale.gen
.
sudo locale-gen en_US.UTF-8
# en_US.UTF-8 UTF-8
.
Use:
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
It works for Debian. I don't know why - but locale-gen had not results.
Important! It's a temporary solution. It has to be run for each session.
.bashrc
file.
local-gen
only processes locales that are uncommented in /etc/local.gen
. You may need to do echo en_US UTF-8 >> /etc/locale.gen
first.
LC_CTYPE
This generally means you haven't properly set up locales on your Linux box.
On Debian or Ubuntu, that means you need to do
$ sudo locale-gen $ sudo dpkg-reconfigure locales
See also man locale-gen.
sudo locale-gen es_UY.UTF-8
For macOS & Mac OS X users only
I was getting the same warning while using Git
To resolve this warning Uncheck the Set locale environment variable on startup
option and restart your terminal. Below screen shot represents my terminal settings.
https://i.stack.imgur.com/y5nUH.png
It is simple fix in Ubuntu. You have to generate the Locales from scratch, running the following commands from the command line:
sudo locale-gen en_US en_US.UTF-8
sudo dpkg-reconfigure locales
This should create the locales and then re-configure them.
pt_BR pt_BR.UTF-8
- Thanks.
Adding the following to /etc/environment
fixed the problem for me on Debian and Ubuntu (of course, modify to match the locale you want to use):
LANGUAGE=en_US.UTF-8
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
/etc/environment
is deprecated and should instead be set in /etc/default/locale
. Both seems to work for now.
LC_CTYPE
I am now using this:
$ cat /etc/environment
...
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
Then log out of SSH session and log in again.
Old answer:
Only this helped me:
$ 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
On Debian, after much searching, this did the trick.
First:
sudo apt-get purge locales
Then:
sudo aptitude install locales
And the famous:
sudo dpkg-reconfigure locales
This rids the system of locales, then re-installs locales and downgrades libc6 from 2.19 to 2.13 which is the issue. Then it configures locales again.
dpkg-reconfigure locales
is all that is needed. sudo
if you are a sudo type guy, or do it as root. Then select your locale according to what you have in your shell environment.
We will set locales that are not unset after reboot.
First open the Bash file and edit it:
nano .bashrc
Add these lines to the file:
export LC_ALL="en_US.UTF-8"
export LANG="en_US.UTF-8"
export LANGUAGE="en_US.UTF-8"
Activate the change by reloading Bash:
source ~/.bashrc
Test results:
locale
For Ubuntu use this,
#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
It worked for me.
/etc/default/locale
and putting only the definition of the vars (removing the word export) and restarting the server
If you use Mac OS X v10.10 (Yosemite) or above to connect in your server Linux, you can try these steps.
Keep your file /etc/ssh/sshd-config original Put on your ~/.bash_profile export LANG="en_US" export LC_ALL=$LANG.UTF-8 Run dpkg-reconfigure locales And select "en_US.UTF-8"
For Debian users, I have this problem after modifying my locale to change machine's language. This is what I did:
Modify .bashrc: export LANG=fr_FR.UTF-8 export LC_ALL=fr_FR.UTF-8 Uncomment line fr_FR.UTF-8 in file etc/locale.gen -> sudo locale-gen to generate the missing package sudo update-locale sudo dpkg-reconfigure locales to configure my locale to fr_FR.UTF-8 Add extra lines to the etc/default/locale file: LANGUAGE=en_US.UTF-8 LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 LC_TYPE=en_US.UTF-8 Reboot my computer and everything works fine
You need to configure locale appropriately in /etc/default/locale
, logout, login, and then run the regular commands
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
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_ALL to default locale: No such file or directory
Solution:
Try this (uk_UA.UTF-8 is my current locale. Write your locale, for example en_US.UTF-8 !)
sudo locale-gen uk_UA.UTF-8
and this.
sudo dpkg-reconfigure locales
sudo nano /etc/locale.gen
Uncomment the locales you want to use (e.g. en_US.UTF-8 UTF-8
):
Then run:
sudo /usr/sbin/locale-gen
Source: Configuring Locales
For me, I fixed this error by editing the .bashrc file, adding exports. Add after the initial comments.
Add language support.
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
Adding the correct locale to ~/.bashrc
, ~/.bash_profile
, /etc/environment
and the like will solve the problem, however it is not recommended, as it overrides the settings from /etc/default/locale
, which is confusing at best and may lead to the locales not being applied consistently at worst.
Instead, one should edit /etc/default/locale
directly, which may look something like this:
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE=en_US
The change will take effect the next time you log in. You can get the new locale in an existing shell by sourcing /etc/default/locale
like this:
$ . /etc/default/locale
locale-gen
For anyone connecting to DigitalOcean or some other Cloud hosting provider from the iTerm2.app on macOS v10.13 (High Sierra) and getting this error on some commands:
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").
This fixed the problem for me:
https://i.stack.imgur.com/Yvtj6.png
Add missing locales to file .bash_profile:
echo "export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8">>~/.bash_profile
Then source your .bash_profile file:
source ~/.bash_profile
For Ubuntu Server and Debian:
No need to create exports in bashrc or dealing with dpkg-reconfigure.
Just replace the contents of /etc/default/locale
with:
LANGUAGE=en_US.UTF-8
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
Following the accepted answer:
LANG=C ssh hunter2.
LC_ALL=C ssh hunter2
on the client side did the trick for me.
With zsh ohmyzsh I added this to the .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
By removing the line export LANG=en_US.UTF-8
Reopened a new tab and SSHed in, worked for me :)
Oh My Zsh is a delightful, open source, community-driven framework for managing your Zsh configuration. It comes bundled with thousands of helpful functions, helpers, plugins, themes, and a few things that make you shout...
ohmyz.sh
Debian GNU/Linux 11 (bullseye)
I encountered this issue after creating a brand new VM instance in GCP.
Basically, I have just run the following
$ sudo apt-get update
$ sudo apt-get upgrade
Here I have got the error
https://i.stack.imgur.com/92aEv.png
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_CTYPE = "UTF-8",
LC_TERMINAL = "iTerm2",
LANG = "C"
are supported and installed on your system.
Here is how I fixed it.
Install the locales first.
$ sudo apt-get install locales
Open the locale file (use your favorite editor).
$ sudo nano /etc/default/locale
Add the following and save it.
LANGUAGE=en_US.UTF-8
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
Run the following.
$ sudo localedef -i en_US -f UTF-8 en_US.UTF-8
Restart your terminal.
Run the command to test and close it via ctrl + d.
$ perl
Note: I created an instance to just test my solution in order to ensure. Please let me know if it doesn't work for you.
https://i.stack.imgur.com/cycYN.png
I hope it helps you.
Add LC_ALL="en_GB.utf8"
to /etc/environment
and reboot. That's all.
Export the variable
$ 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
Next run
$ sudo locale-gen
$ sudo dpkg-reconfigure locales
When you run dpkg-reconfigure locales
it asks you to choose the locales, choose en_US.UTF-8 . If you run this by selecting all locales, it will take some time to configure.
In my case, with Debian 8.6 (Jessie), I had to change settings in:
/etc/ssh/ssh_config` for `#AcceptEnv LANG LC_*
and
sshd_config
for #SendEnv LANG LC_*
Then restart the ssh
service.
At last, I did:
locale-gen en_US.UTF-8
and dpkg-reconfigure locales
Source of the problem
I experienced this, logging in from one machine to another via ssh
. The remote machine didn’t have the locale files, that I had on my local machine. You can either disable the forwarding of the locale from your local machine to the remote machine (in the file /etc/ssh/sshd_config
remove the line AcceptEnv LANG LC_CTYPE …
) or install the locale (changing it is not necessary in this case).
Installing
On Fedora, Red Hat Linux, and CentOS I used
sudo dnf install langpacks-de
for the German (de) language packs. I logged out, in, and it worked.
Search for other langpacks with
dnf search langpacks-
Changing/Activating
To list available locales I used
localectl list-locales
And to set a new one
sudo localectl set-locale de_DE.utf8
As always, the devil is in the detail...
On Mac OS X v10.7.5 (Lion), to fix some Django error, in my ~/.bash_profile
I've set:
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
And in turn for a long time I got that warning when using Perl.
My bad! As I've realized much later, my system is en_US.UTF-8
! I fixed it simply by changing from
export LANG=en_EN.UTF-8
to
export LANG=en_US.UTF-8
Success story sharing
LC_ALL
overwrites all other variables, I’d rather setLANG=de_AT.UTF-8
and individual variables likeLC_MESSAGES=en_US.UTF-8
. If a variable is not set it falls back toLANG
. You can also eg.unset LC_CTYPE
to force it fall back toLANG
.~/.bashrc
solved it for me... then must reload usingsource ~/.bashrc
... Thnks <3