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

482

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

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

  • 0
    Какая ОС? Какое распределение?
  • 0
    Что произошло, когда вы проверили настройки локали, например, в сообщении об ошибке?
Показать ещё 3 комментария
Теги:
locale

36 ответов

404
Лучший ответ

Ваша ОС не знает о 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_* в локальном /etc/ssh/ssh_config. (Благодаря этому ответу. См. Ошибку 1285 для OpenSSH для получения дополнительной информации.)
  • 18
    Спасибо! У меня было это сообщение об ошибке при соединении с git к моему серверу. После добавления de_CH.UTF-8 (не поддерживается там, но использовался локально) с dpkg-reconfigure locales сообщение исчезло.
  • 76
    У меня была эта проблема целую вечность, ... удаление "AcceptEnv LANG LC_ *" из sshd_config окончательно решило ее. Спасибо за подсказку!
Показать ещё 8 комментариев
426

Вот как это можно решить на 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 (
  • 4
    Поскольку LC_ALL перезаписывает все остальные переменные, я бы предпочел установить LANG=de_AT.UTF-8 и отдельные переменные, такие как LC_MESSAGES=en_US.UTF-8 . Если переменная не установлена, она возвращается к LANG . Вы также можете, например. unset LC_CTYPE чтобы заставить его вернуться к LANG .
Показать ещё 11 комментариев
186

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

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

# then regenerate
sudo locale-gen

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

  • 24
    Это реальное решение для меня.
  • 4
    locale-gen не принимает никаких аргументов (по крайней мере, в стабильной Debian). Вместо этого отредактируйте /etc/locale.gen, чтобы раскомментировать нужные вам локали, затем запустите sudo locale-gen
Показать ещё 6 комментариев
124

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

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

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

  • 11
    Этот работал для меня. Я просто положил его в мой файл .bashrc .
  • 2
    У меня тоже сработало. Мне нужно было только установить две настройки (LANGUAGE и LC_ALL), которые оказались неустановленными в предупреждениях Perl
Показать ещё 8 комментариев
122

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

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

$ sudo locale-gen
$ sudo dpkg-reconfigure locales

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

  • 25
    не решает проблему здесь
  • 6
    dpkg -conconfigure locales - исправил проблему для меня, debian 7.1
Показать ещё 10 комментариев
85

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

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

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

Изображение 7730

  • 2
    Ух, так просто и исправили мои проблемы! Спасибо!
  • 3
    Я попробовал все остальные, но этот сделал это для меня. Я использую iTerm, и у него та же опция кодировки символов.
Показать ещё 4 комментария
34

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

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

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

  • 0
    Это работало нормально для меня, даже используя pt_BR pt_BR.UTF-8 - Спасибо.
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
  • 0
    Это работало нормально для меня на Ubuntu 15.04, большое спасибо.
21

на 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. Затем выберите ваш язык в соответствии с тем, что у вас есть в вашей оболочке.
  • 6
    dpkg-перенастроить локали ДОЛЖНЫ быть все, что нужно. После того, как вы попробовали это 100 раз и осмотрели Интернет, и это все, что вы видели, и проблема все равно не решится сама, попробуйте описанное выше. Тогда вернись и проголосуй за это. :)
21

Добавление следующего в /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
  • 5
    .. Я получил предупреждение о том, что настройка локали в /etc/environment устарела и должна быть установлена в /etc/default/locale . Оба, кажется, работают на данный момент.
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

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

  • 0
    Это также сработало для меня, удалив весь контент в файле /etc/default/locale и поместив только определение vars (удалив слово export) и перезапустив сервер
11

Если вы используете 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"

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). главное было выйти и снова войти в систему.
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
  • 0
    Спасибо, это решило мою проблему, после этого и переустановки.
  • 0
    @madprops спасибо :)
Показать ещё 2 комментария
9
sudo nano /etc/locale.gen

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

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

sudo /usr/sbin/locale-gen

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

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

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

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

  • 0
    Это помогло мне. Спасибо!
  • 0
    хорошее, простое решение, исправил мою проблему, спасибо!
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").

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

Изображение 7731

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

  • 0
    Это подходит для меня! Спасибо, что поделились этим
  • 0
    Да это был параметр в iterm2! Спасибо!
4

Следуя принятому ответу:

LANG = C ssh hunter2.

LC_ALL = C ssh hunter2

на стороне клиента помогло.

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

Добавление правильного языкового стандарта в ~/.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
    необходимо перезагрузить систему после этого шага
  • 1
    Хороший вопрос, обновлено.
3

С 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, работал у меня:)

3

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

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
2

Как всегда, дьявол подробно...

Вкл 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
1

В 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 в моем конкретном случае было бы неприятностью)

1

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

/etc/ssh/ssh_config для #AcceptEnv LANG LC_*

и sshd_config для #SendEnv LANG LC_*

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

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

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

1

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

$ sudo locale-gen

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

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

Затем перезагрузитесь...

1

Если вам не нужна проблема с локалью, вы можете установить PERL_BADLANG=0. Конечно, это может привести к неправильной локализации.

1

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

AcceptEnv LANG LC_*

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

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
0

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

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

Как указывалось в других ответах, ssh должен передавать локальные локальные компьютеры удаленному хосту. Например, если у вас установлены австралийские локали (например, en_AU.UFT-8), и вы подключаетесь к только что настроенному серверу Ubuntu, который поставляется только с en_US.UTF-8 вы получите это предупреждение.

Для решения этой проблемы у вас есть несколько вариантов:

  1. Установите требуемые языковые стандарты на удаленном хосте, чтобы они соответствовали языковым настройкам, настроенным на вашем клиенте.

  2. Измените конфигурацию SSH, чтобы НЕ передавать переменные среды ваших клиентов. Я бы не рекомендовал это.

  3. Переопределите локаль на удаленной машине, экспортировав настройки локали из .bashrc и друзей.

0

Я потратил много времени, пытаясь решить эту проблему, и, наконец, нашел ее в Фиксация проблемы локали в Debian-mirror.

0

Другой ответ Git:

Источником проблемы может быть сервер Git. Если все остальное не удается, попробуйте выполнить dpkg-reconfigure locales (или что-то подходящее для вашего распространения) на сервере.

Кредиты: этот совет от Фиксация досадного perl: предупреждение: установка локали не удалось на сервере Ubuntu и решила проблему в моем случае.

0

Если вы используете chroot в CentOS, попробуйте вручную скопировать /usr/lib/locale в среду chroot для учетной записи, в которой возникла эта проблема.

  • 0
    Куда их скопировать?
  • 0
    Скопируйте его в среду chroot учетной записи, с которой у вас возникли проблемы. В моем случае (с Plesk) это было в /var/www/vhosts/[domain]/usr/lib/ , но вам придется определить этот путь для вашего сервера / учетной записи.
-2

Попробуйте переустановить:

localess apt-get install --reinstall locales

Подробнее в Как изменить локаль по умолчанию

Ещё вопросы

Сообщество Overcoder
Наверх
Меню