Когда я запускаю perl
, я получаю предупреждение:
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").
Как это исправить?
Ваша ОС не знает о en_US.UTF-8
.
Вы не упомянули конкретную платформу, но я могу воспроизвести вашу проблему:
% 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").
Я предполагаю, что вы использовали ssh для подключения к этому старому хосту с более новой настольной машины. Обычно /etc/ssh/sshd_config
содержит
AcceptEnv LANG LC_*
что позволяет клиентам распространять значения этих переменных среды в новые сеансы.
Предупреждение дает вам подсказку о том, как его устранить, если вам не нужен полный языковой стандарт:
% env LANG=C perl -e exit %
или с bash:
$ LANG=C perl -e exit $
Для постоянного исправления выберите один из
LANG
в файле инициализации оболочки.ssh hunter2
, используйте команду LANG=C ssh hunter2
.SendEnv LANG LC_*
в локальном /etc/ssh/ssh_config
. (Благодаря этому ответу. См. Ошибку 1285 для OpenSSH для получения дополнительной информации.)dpkg-reconfigure locales
сообщение исчезло.
Вот как это можно решить на Mac OS Lion (10.7) или Cygwin (Windows 10):
Добавьте следующие строки в ваш bashrc или bash_profile на главной машине:
# Setting for the new UTF-8 terminal support in Lion
export LC_CTYPE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
Если вы используете zsh, отредактируйте zshrc:
# Setting for the new UTF-8 terminal support in Lion
LC_CTYPE=en_US.UTF-8
LC_ALL=en_US.UTF-8
LC_ALL
перезаписывает все остальные переменные, я бы предпочел установить LANG=de_AT.UTF-8
и отдельные переменные, такие как LC_MESSAGES=en_US.UTF-8
. Если переменная не установлена, она возвращается к LANG
. Вы также можете, например. unset LC_CTYPE
чтобы заставить его вернуться к LANG
.
Если вы создаете rootfs, используя debootstrap, вам нужно будет создать локали. Вы можете сделать это, выполнив:
# (optional) enable missing locales
sudo nano /etc/locale.gen
# then regenerate
sudo locale-gen
Этот совет исходит из https://help.ubuntu.com/community/Xen
Использование:
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
Он работает для Debian. Я не знаю почему, но locale-gen не имел результатов.
Внимание! Это временное решение. Он должен запускаться для каждой сессии.
.bashrc
.
Это означает, что вы неправильно настроили локали в своем Linux-поле.
В Debian или Ubuntu это означает, что вам нужно сделать
$ sudo locale-gen $ sudo dpkg-reconfigure locales
См. также man locale-gen.
Я получал то же предупреждение при использовании Git
Чтобы устранить это предупреждение, снимите флажок с Set locale environment variable on startup
и перезапустите терминал. Ниже скриншот представляет мои настройки терминала.
Это простое исправление в Ubuntu. Вы должны сгенерировать Locales с нуля, выполнив следующие команды из командной строки:
sudo locale-gen en_US en_US.UTF-8
sudo dpkg-reconfigure locales
Это должно создавать локали, а затем повторно настраивать их.
pt_BR pt_BR.UTF-8
- Спасибо.
Теперь я использую это:
$ cat /etc/environment
...
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
Затем выйдите из сеанса SSH и войдите снова.
Старый ответ:
Только это помогло мне:
$ 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
на Debian после долгих поисков это сделало трюк.
первый:
sudo apt-get purge locales
то
sudo aptitude install locales
и знаменитый:
sudo dpkg-reconfigure locales
Это устраняет систему локалей, а затем повторно устанавливает локали и понижает libc6 с 2.19 до 2.13, что является проблемой. Затем снова настраивает локали.
dpkg-reconfigure locales
- это все, что нужно. sudo
если вы парень типа sudo или делаете это как root. Затем выберите ваш язык в соответствии с тем, что у вас есть в вашей оболочке.
Добавление следующего в /etc/environment
устраняет проблему для меня на Debian и Ubuntu (конечно, измените, чтобы соответствовать языку, который вы хотите использовать):
LANGUAGE=en_US.UTF-8
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
LC_TYPE=en_US.UTF-8
/etc/environment
устарела и должна быть установлена в /etc/default/locale
. Оба, кажется, работают на данный момент.
Для Ubuntu используйте это,
#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
Работал на меня.
/etc/default/locale
и поместив только определение vars (удалив слово export) и перезапустив сервер
Если вы используете Mac X v10.10 (Yosemite) или выше для подключения на своем сервере Linux, вы можете попробовать эти шаги.
Сохраните файл /etc/ssh/sshd -config оригинал
Наденьте свой файл ~/.bash_profile
export LANG="en_US"
export LC_ALL=$LANG.UTF-8
Run
dpkg-reconfigure locales
И выберите "en_US.UTF-8"
Вам необходимо правильно настроить локаль в /etc/default/locale
, выходе, входе в систему, а затем запустить регулярные команды
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
Решение:
Попробуйте ( uk_UA.UTF-8 мой текущий язык. Напишите свой язык, например en_US.UTF-8!)
sudo locale-gen uk_UA.UTF-8
и это.
sudo dpkg-reconfigure locales
sudo nano /etc/locale.gen
Раскомментируйте локали, которые вы хотите использовать (например, en_US.UTF-8 UTF-8
):
Затем запустите:
sudo /usr/sbin/locale-gen
для меня я исправляю эту ошибку, редактируя экспорт файла добавления файла .bashrc. Добавьте после первоначальных комментариев.
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
Доброго времени суток,
Для тех, кто подключается к DigitalOcean или другому провайдеру облачного хостинга из приложения iTerm2.app на MacOS High Sierra и получает эту ошибку по некоторым командам:
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").
Это решило проблему для меня:
Я знаю, что эта ветка старая, но, возможно, кто-то найдет это полезным. Я знаю, как это может раздражать.
Следуя принятому ответу:
LANG = C ssh hunter2.
LC_ALL = C ssh hunter2
на стороне клиента помогло.
Добавление правильного языкового стандарта в ~/.bashrc
, ~/.bash_profile
, /etc/environment
и т.п. Решит проблему, однако это не рекомендуется, так как переопределяет параметры из /etc/default/locale
, что приводит к путанице в наилучшим образом и может привести к тому, что локали не будут применяться последовательно в худшем случае.
Вместо этого нужно отредактировать /etc/default/locale
напрямую, что может выглядеть примерно так:
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE=en_US
Изменение вступит в силу при следующем входе в систему. Вы можете получить новую локаль в существующей оболочке, выбрав /etc/default/locale
следующим образом:
$ . /etc/default/locale
С zsh ohmyzsh я добавил это к .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
Удалив строку export LANG=en_US.UTF-8
Открыл новую вкладку и SSHed, работал у меня:)
Добавьте LC_ALL="en_GB.utf8"
в /etc/environment
и перезагрузитесь. Это все.
Добавьте отсутствующие локали в .bash_profile
echo "export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8">>~/.bash_profile
Затем введите свой .bash_profile
source ~/.bash_profile
Как всегда, дьявол подробно...
Вкл Mac X v10.7.5 (Lion), чтобы исправить некоторые Django, в моем ~/.bash_profile
я установил:
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
И, в свою очередь, долгое время я получал это предупреждение при использовании Perl.
Мой плохой! Как я понял намного позже, моя система en_US.UTF-8
!
Я исправил это просто, изменив
export LANG=en_EN.UTF-8
к
export LANG=en_US.UTF-8
В Arch Linux с использованием британской клавиатуры/локали у меня была следующая ошибка:
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LANG = "en_US.utf8"
Экспорт моих локалей в /etc/profile
не исправил его.
Однако я исправил это, отредактировав /etc/locale.gen
, а также включив
локаль en_US.utf8
, которую perl
ожидал найти и запустить local-gen
.
(я использую pac-manager, который использует целую кучу модулей perl
от AUR, поэтому переустановка perl
в моем конкретном случае было бы неприятностью)
в моем случае, с debian8.6, мне пришлось изменить настройки в:
/etc/ssh/ssh_config
для #AcceptEnv LANG LC_*
и
sshd_config
для #SendEnv LANG LC_*
затем перезапустите службу ssh.
наконец, сделал
locale-gen en_US.UTF-8
и dpkg-reconfigure locales
Все предыдущие ответы неверны. Сообщение ясно - отсутствует локаль. Решение состоит в том, чтобы добавить соответствующий языковой стандарт. Вы можете это сделать, отредактировав файл /etc/locale.gen, удалите знак # перед локалью, который будет передан как отсутствующий, а затем выполните команду:
$ sudo locale-gen
Это приведет к генерации локалей, указанных в файле /etc/locale.gen, и поэтому сообщение не будет отображаться.
Для меня на Ubuntu 16.04 (Xenial Xerus) работало:
root@host:~#locale-gen en_GB.UTF-8
root@host:~#localectl set-locale LANG=en_GB.UTF-8,LC_ALL=en_GB.UTF-8
Затем перезагрузитесь...
Если вам не нужна проблема с локалью, вы можете установить PERL_BADLANG=0
. Конечно, это может привести к неправильной локализации.
ssh
по умолчанию заменяет языковые переменные LC. См. /etc/ssh/sshd_config
:
AcceptEnv LANG LC_*
Поэтому, возможно, вам нужно установить эти переменные в своей локальной оболочке.
В моем случае это был результат:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_PAPER = "ro_RO.UTF-8",
LC_ADDRESS = "ro_RO.UTF-8",
....
Решение:
sudo locale-gen ro_RO.UTF-8
Это быстрый ответ. Мы установим локали, которые не сбрасываются после перезагрузки. Сначала откройте файл bash и отредактируйте его:
nano .bashrc
добавьте эти строки в файл:
export LC_ALL="en_US.UTF-8"
export LANG="en_US.UTF-8"
export LANGUAGE="en_US.UTF-8"
активировать изменение путем перезагрузки bash:
source .bashrc
результаты теста:
locale
Если эта проблема возникает при подключении через ssh к удаленному хосту, возможно, в удаленной системе отсутствуют определенные локали. Я не собираюсь повторять, как устанавливать и настраивать языковые стандарты, так как это уже было хорошо объяснено другими ответами.
Как указывалось в других ответах, ssh должен передавать локальные локальные компьютеры удаленному хосту. Например, если у вас установлены австралийские локали (например, en_AU.UFT-8
), и вы подключаетесь к только что настроенному серверу Ubuntu, который поставляется только с en_US.UTF-8
вы получите это предупреждение.
Для решения этой проблемы у вас есть несколько вариантов:
Установите требуемые языковые стандарты на удаленном хосте, чтобы они соответствовали языковым настройкам, настроенным на вашем клиенте.
Измените конфигурацию SSH, чтобы НЕ передавать переменные среды ваших клиентов. Я бы не рекомендовал это.
Переопределите локаль на удаленной машине, экспортировав настройки локали из .bashrc и друзей.
Я потратил много времени, пытаясь решить эту проблему, и, наконец, нашел ее в Фиксация проблемы локали в Debian-mirror.
Другой ответ Git:
Источником проблемы может быть сервер Git. Если все остальное не удается, попробуйте выполнить dpkg-reconfigure locales
(или что-то подходящее для вашего распространения) на сервере.
Кредиты: этот совет от Фиксация досадного perl: предупреждение: установка локали не удалось на сервере Ubuntu и решила проблему в моем случае.
Если вы используете chroot в CentOS, попробуйте вручную скопировать /usr/lib/locale
в среду chroot для учетной записи, в которой возникла эта проблема.
/var/www/vhosts/[domain]/usr/lib/
, но вам придется определить этот путь для вашего сервера / учетной записи.
Попробуйте переустановить:
localess apt-get install --reinstall locales
Подробнее в Как изменить локаль по умолчанию