Как исправить предупреждение о настройке локали из Perl? - PullRequest
541 голосов
/ 23 марта 2010

Когда я запускаю 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").

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

Ответы [ 36 ]

440 голосов
/ 14 сентября 2011

Вот как решить эту проблему на 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
410 голосов
/ 24 марта 2010

Ваша ОС не знает о 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
$ 

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

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

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

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

# then regenerate
sudo locale-gen

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

133 голосов
/ 23 марта 2010

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

В Debian или Ubuntu это означает, что вам нужно выполнить

$ sudo locale-gen
$ sudo dpkg-reconfigure locales

См. Также man locale-gen .

130 голосов
/ 17 марта 2014

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

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 не было результатов.

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

88 голосов
/ 17 декабря 2013

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

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

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

enter image description here

35 голосов
/ 31 декабря 2014

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

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

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

25 голосов
/ 25 февраля 2015

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

$ 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
25 голосов
/ 26 января 2014

Добавление следующего к /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
20 голосов
/ 18 сентября 2014

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

первый:

sudo apt-get purge locales

, то:

sudo aptitude install locales

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

sudo dpkg-reconfigure locales

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

...