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

596

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

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

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

Xain
источник
Что произошло, когда вы проверили настройки локали, как показано в сообщении об ошибке?
Брайан Д. Фой
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 не было результатов.

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

artemn
источник
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

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

jfreak53
источник
Это работало нормально для меня, даже используя 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
joscarsson
источник
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
warvariuc
источник
Это работало хорошо для меня на Ubuntu 15.04, большое спасибо.
Гоке Обаса
22

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

первый:

sudo apt-get purge locales

тогда:

sudo aptitude install locales

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

sudo dpkg-reconfigure locales

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

tkjef
источник
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

Работал на меня.

Amjith
источник
Это также сработало для меня, удалив весь контент в файле /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»

dsandrade
источник
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
glarrain
источник
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
bogdanvlviv
источник
Спасибо, это решило мою проблему, после этого и переустановки.
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

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

LandiLeite
источник
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
Nuvanda
источник
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и перезагрузиться. Это все.

zires
источник
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_*

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

garaboncias
источник
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

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

Александар Павич
источник