Как исправить предупреждение о настройке локали из Perl?


596

Когда я бегу perl, я получаю предупреждение:

perl: warning: сбой при настройке локали.
Perl: предупреждение: пожалуйста, проверьте, что ваши настройки локали:
    ЯЗЫК = (не установлено),
    LC_ALL = (не установлено),
    LANG = "en_US.UTF-8"
поддерживаются и устанавливаются в вашей системе.
perl: warning: возврат к стандартной локали («C»).

Как мне это исправить?


Что произошло, когда вы проверили настройки локали, как показано в сообщении об ошибке?
Брайан Д. Фой

3
вместо установки локали вы также можете изменить локаль. На моей коробке с Ubuntu это делается для одного пользователя путем редактирования~/.pam_environment
Янус Троелсен

На моем ODROID-C1 под управлением Ubuntu проблема действительно была в файле ~ / .pam_environment. Некоторые из переменных были es_US.UTF-8 вместо en_US.UTF-8. Спасибо.
f1vefour

Я получил это на Cygwin \ Babun. Только переустановка perl исправила это.
Лукас Соареш

Ответы:


449

Ваша ОС не знает о en_US.UTF-8.

Вы не упомянули конкретную платформу, но я могу воспроизвести вашу проблему:

% uname -a
OSF1 hunter2 V5.1 2650 alpha
% perl -e выход
perl: warning: сбой при настройке локали.
Perl: предупреждение: пожалуйста, проверьте, что ваши настройки локали:
    LC_ALL = (не установлено),
    LANG = "en_US.UTF-8"
    поддерживаются и устанавливаются в вашей системе.
perl: warning: возврат к стандартной локали («C»).

Я предполагаю, что вы использовали ssh для подключения к этому старому хосту с более новой настольной машины. Это обычно для /etc/ssh/sshd_configсодержания

AcceptEnv LANG LC_*

что позволяет клиентам распространять значения этих переменных среды в новые сеансы.

Предупреждение дает вам подсказку о том, как его устранить, если вам не нужен полный языковой стандарт:

% env LANG = C perl -e выход
%

или с bash:

$ LANG = C perl -e выход
$ 

Для постоянного исправления выберите один из

  1. На старом хосте установите LANGпеременную окружения в файле инициализации вашей оболочки.
  2. Измените свою среду на стороне клиента, например , вместо ssh hunter2использования команды LANG=C ssh hunter2.
  3. Если у вас есть права администратора, остановите ssh от отправки переменных окружения, закомментировав SendEnv LANG LC_*строку в локальном /etc/ssh/ssh_config файле. (Благодаря этому ответу . См. Ошибку 1285 для OpenSSH для получения дополнительной информации.)

22
Спасибо! У меня было это сообщение об ошибке при соединении с git к моему серверу. После добавления de_CH.UTF-8 (там не поддерживается, но используется локально) dpkg-reconfigure localesсообщение исчезло.
Саймон Эугстер

82
У меня была эта проблема целую вечность, ... удаление "AcceptEnv LANG LC_ *" из sshd_config окончательно решило ее. Спасибо за подсказку!
MadC

2
@ Грег Бэкон, не будет ли случаев, когда вы захотите установить переменные среды в масштабе всей системы, например, создав файл / etc / environment? help.ubuntu.com/community/…
фракция

25
@HermannIngjaldsson, по крайней мере в Ubuntu (12.10), не было необходимости перезагружать сервер (после удаления «AcceptEnv LANG LC_ *»). Я только что перезагрузил конфигурацию ssh: она service ssh reloadзанимает доли секунды и даже не приводит к завершению текущего сеанса ssh.
noamtm

3
добавьте 'export LC_ALL = C', затем 'source ~ / .bashrc' в клиентской системе, чтобы решить проблему.
EffectiveMatrix

476

Вот как это решить на 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

6
Спасибо, я долго искал решение этой проблемы, и я всегда думал, что это проблема в конфигурации моего сервера Ubuntu, и казалось, что не было решения, которое помогло (все эти вещи dkpg-reconfigure (
Teemu Kurppa)

5
Поскольку LC_ALLперезаписывают все другие переменные, я бы предпочел установить LANG=de_AT.UTF-8и отдельные переменные, как LC_MESSAGES=en_US.UTF-8. Если переменная не установлена, она возвращается к LANG. Вы также можете, например. unset LC_CTYPEзаставить его отступить LANG.
Дэвид

4
Поместить эти строки в .bashrc не получилось, но bash_profile решил это! Я должен был создать файл.
Герман Ингальдссон

5
Помещение этих строк ~/.bashrcрешило это для меня ... затем необходимо перезагрузить, используя source ~/.bashrc... Thnks <3
Enissay

5
Спасибо, это отлично работало на ZSH и плагине oh-my-zsh под Mac OS X El Capitan, внизу ~ / .zshrc: LC_CTYPE = en_US.UTF-8 LC_ALL = en_US.UTF-8
Валерио Скьявони

207

Если вы создаете rootfs с помощью debootstrap, вам нужно сгенерировать локали. Вы можете сделать это, запустив:

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

# then regenerate
sudo locale-gen

Этот совет взят из https://help.ubuntu.com/community/Xen


28
Это реальное решение для меня.
Afriza N. Arief

6
locale-gen не принимает никаких аргументов (по крайней мере, в стабильной Debian). Вместо этого отредактируйте /etc/locale.gen, чтобы раскомментировать нужные вам локали, затем запустите sudo locale-gen
Сэм Уоткинс,

2
зафиксированоUbuntu Server
Paschalis

5
В Debian вам может понадобиться сделать $ echo en_US UTF-8 >> /etc/locale.genсначала.
Ахмед

1
На Gentoo (как минимум) locale-genне принимает аргументов. Это читает от /etc/locale.gen.
Пистос

142

Использование:

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

Это работает для Debian . Я не знаю почему - но у locale-gen не было результатов.

Важный! Это временное решение. Он должен быть запущен для каждого сеанса.


13
Этот работал для меня. Я просто положил это в мой .bashrcфайл.
Анируд Раманатан

2
У меня тоже сработало. Мне нужно было только установить две настройки (LANGUAGE и LC_ALL), которые казались неустановленными в предупреждениях Perl
Laurent

2
В Debian local-genобрабатываются только те локали, которые не прокомментированы в /etc/local.gen. Возможно, вам придется сделать в echo en_US UTF-8 >> /etc/locale.genпервую очередь.
Ахмед

это сработало для меня на Elementary OS Freaya (на основе Ubuntu)
valkirilov

1
LC_ C TYPE может быть?
миксель

139

Как правило, это означает, что вы неправильно настроили локали на вашем Linux-компьютере.

На Debian или Ubuntu это означает, что вам нужно сделать

$ sudo locale-gen
$ sudo dpkg-переконфигурировать локали

Смотрите также man locale-gen .


30
не
решает

6
dpkg-reconfigure locales - исправил проблему для меня, debian 7.1
newUserNameHere

4
Сбой dpkg-переконфигурировать локали с теми же сообщениями об ошибках локали perl, которые сначала пытаются исправить !!!!
Маттео

10
Это работало для меня в Ubuntu 14.04, хотя мне сначала нужно было добавить отсутствующий языкsudo locale-gen es_UY.UTF-8
alf

2
@matteo Только в первый раз, прежде чем исправить ошибку. Попробуйте еще раз, и это должно быть исправлено.
Zero3

92

Только для пользователей MacOS и Mac OS X

Я получал то же предупреждение при использовании Git

Чтобы устранить это предупреждение , снимите с Set locale environment variable on startupопции и перезагрузить терминал. Ниже скриншот представляет мои настройки терминала.

введите описание изображения здесь


3
Ух, так просто и исправили мои проблемы! Спасибо!
Михал

3
Я попробовал все остальные, но этот сделал это для меня. Я использую iTerm, и у него та же опция кодировки символов.
Майкл Моррисон

2
К сожалению, это нарушает ZSH (табуляция перестала работать)
Кристиан

1
Это полностью помогает Mac OS. Кстати, это начало происходить со мной сразу после обновления до macOS Sierra. И это решило эту проблему для меня.
Пауло Малвар

1
это решило мою проблему. это начало происходить со мной после обновления до Mac OS X High Sierra от Sierra.
Лучиан Ирими

36

Это просто исправить в Ubuntu. Вы должны сгенерировать Locales с нуля, выполнив следующие команды из командной строки:

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

Это должно создать локали, а затем перенастроить их.


Это работало нормально для меня, даже используя pt_BR pt_BR.UTF-8- Спасибо.
Маркос Фрейтас

29

Чтобы /etc/environmentисправить эту проблему в Debian и Ubuntu, добавьте следующее (конечно, измените в соответствии с языком, который вы хотите использовать):

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

7
.. Я получил предупреждение о том, что настройка языка в /etc/environmentустарела и должна быть установлена ​​в /etc/default/locale. Оба, кажется, работают на данный момент.
Йоскарссон

должно бытьLC_CTYPE
AEXL

25

Я сейчас использую это:

$ 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

Это работало хорошо для меня на Ubuntu 15.04, большое спасибо.
Гоке Обаса

22

на Debian после долгих поисков это сработало.

первый:

sudo apt-get purge locales

тогда:

sudo aptitude install locales

и знаменитый:

sudo dpkg-reconfigure locales

Это освобождает систему локалей, затем переустанавливает локали и понижает libc6 с 2.19 до 2.13, что является проблемой. Затем снова настраивает локали.


4
dpkg-reconfigure localesэто все что нужно. sudoесли вы парень типа sudo или делаете это как root. Затем выберите ваш язык в соответствии с тем, что у вас есть в вашей оболочке.
mknaf

6
dpkg-перенастроить локали ДОЛЖНЫ быть все, что нужно. После того, как вы попробовали это 100 раз и осмотрели Интернет, и это все, что вы видели, и проблема все равно не решится сама, попробуйте описанное выше. Тогда вернись и проголосуй за это. :)
tkjef

1
наконец, не взломанный ответ на эту проблему, безусловно, должен быть принят!
php_nub_qq

17

Это быстрый ответ. Мы установим локали, которые не сбрасываются после перезагрузки. Сначала откройте файл 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

Единственный, который работает для меня, Raspbian и Ubuntu Server 16.04 :)
Liso

13

Для 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 (удалив экспорт слова) и перезапустив сервер
Edenshaw

12

Если вы используете Mac OS X v10.10 (Yosemite) или выше для подключения к вашему серверу Linux, вы можете попробовать эти шаги.

  1. Держите ваш файл / etc / ssh / sshd-config оригинальным

  2. Положите на ~ / .bash_profile

    export LANG="en_US"
    export LC_ALL=$LANG.UTF-8
  3. Запустить

    dpkg-reconfigure locales

    И выберите «en_US.UTF-8»


10
sudo nano /etc/locale.gen

Раскомментируйте локали, которые вы хотите использовать (например en_US.UTF-8 UTF-8):

Затем запустите:

sudo /usr/sbin/locale-gen

Источник: http://people.debian.org/~schultmc/locales.html


Компания, в которой я работаю в США, имеет сервер git, у которого есть международные клиенты. Толпа GB жаловалась, что их git-клоны по ssh будут иметь проблемы из-за различий в локалях. Это применяется на сервере, исправил эту проблему для них.
Therealstubot

10

Вам необходимо соответствующим образом настроить язык в /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

4
эти шаги работали для меня (Ubuntu server 14.04). главное было выйти и снова войти в систему.
liberborn

9
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

Спасибо, это решило мою проблему, после этого и переустановки.
MadProps

8

для меня я исправляю эту ошибку, редактируя экспорт файла добавления файла .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

Доброго времени суток,


6

Добавление правильных локал ~/.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

1
нужно перезагрузить систему после этого шага
Ghanshyam Bagul

Вы можете просто прокомментировать нужную локаль в "/etc/locale.gen" и запустить: locale-gen
Дейв Эверитт

5

Для тех, кто подключается к 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").

Это решило проблему для меня:

введите описание изображения здесь

Я знаю, что эта ветка старая, но, возможно, кто-то найдет это полезным. Я знаю, как это может раздражать.


Да это был параметр в iterm2! Спасибо!
Брайан Олсен

4

После принятого ответа:

LANG = C ssh hunter2.

LC_ALL = C ssh hunter2

на стороне клиента сделал свое дело для меня.


У меня работало на OSX 10.10.3, пока не хватало только «LANG = C». Спасибо Алекс!
Кристиан

4

С 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

Открыл новую вкладку и включил SSH, у меня сработало :)


3

Добавить LC_ALL="en_GB.utf8"к /etc/environmentи перезагрузиться. Это все.


2

Как всегда, дьявол кроется в деталях ...

В Mac OS 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


2

Все предыдущие ответы неверны. Сообщение ясно - отсутствует локаль. Решение заключается в добавлении соответствующей локали. Вы делаете это, редактируя файл /etc/locale.gen, удаляя знак # перед локалью, о которой сообщается, что она отсутствует, и затем вводите команду:

$ sudo locale-gen

Это фактически сгенерирует локали, указанные в /etc/locale.gen, и поэтому сообщение не будет отображаться.


Это просто ответ и работал на древнем Debian (6) для меня. Все остальные слишком сложны и немного не в себе.
Дейв Эверитт

2

в моем случае с debian8.6 мне пришлось изменить настройки в:

/etc/ssh/ssh_config за #AcceptEnv LANG LC_*

и sshd_configдля#SendEnv LANG LC_*

затем перезапустите службу SSH.

наконец, сделал

locale-gen en_US.UTF-8 а также dpkg-reconfigure locales


2

Добавить недостающие локали в .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

1

В моем случае это был вывод:

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

Решение было:

sudo locale-gen ro_RO.UTF-8

1

sshпо умолчанию перезаписывает переменные локали LC. Смотрите /etc/ssh/sshd_config:

AcceptEnv LANG LC_*

Поэтому, возможно, вам нужно установить эти переменные в вашей локальной оболочке.


1

Для меня на 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

Затем перезагрузите компьютер ...

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.