Как исправить мою проблему с локалью?
Я получаю это сообщение каждый раз, когда я делаю что-то вроде запуска или остановки службы.
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = "en_US:en",
LC_ALL = (unset),
LC_MESSAGES = "en_US.UTF-8",
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
(Reading database ... 21173 files and directories currently installed.)
Removing bind9 ...
* Stopping domain name service... bind9 [ OK ]
Processing triggers for man-db ...
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
Как исправить эту ошибку?
19 ответов
Сначала запустите locale
, чтобы указать, какие локали определены в текущей учетной записи пользователя:
$ locale
LANG=C
LANGUAGE=
LC_CTYPE=fi_FI.UTF-8
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE=fi_FI.UTF-8
LC_MONETARY="C"
LC_MESSAGES=fi_FI.UTF-8
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=
Затем создайте отсутствующий локаль и перенастройте локали, чтобы заметить:
$ sudo locale-gen "en_US.UTF-8"
Generating locales...
en_US.UTF-8... done
Generation complete.
$ sudo dpkg-reconfigure locales
Generating locales...
en_US.UTF-8... up-to-date
Generation complete.
Теперь вы больше не увидите никаких ошибок!
В моем случае ничего не было сказано (Ubuntu Server 12.04LTS). Что наконец помогло
помещал в файл /etc/environment
:
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
По какой-то причине он отсутствовал. Выходы для локали и других команд выглядели так, как будто они были правильно определены. Другими словами, не считайте само собой разумеющимся, все основные вещи объявляются там, где они должны быть объявлены.
Они должны исчезнуть после выпуска:
sudo locale-gen en_US en_US.UTF-8
sudo dpkg-reconfigure locales
dpkg-reconfigure
реконфигурирует пакеты после того, как они уже были
установлен. Передайте им имена пакета или пакетов для перенастройки.
Он будет задавать вопросы конфигурации, как если бы пакет был
сначала установлена.
Просто добавьте следующее в свой .bashrc
файл (при условии, что вы используете bash)
export LC_ALL="en_US.UTF-8"
Это обычная проблема, если вы подключаетесь удаленно, поэтому решение состоит в том, чтобы не перенаправлять ваш язык. Измените /etc/ssh/ssh_config
и закомментируйте строку SendEnv LANG LC_*
.
Для этого есть команда:
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
Он обновляет /etc/default/locale
с предоставленными значениями.
То, что работало для меня в 12.10, было следующим:
apt-get install language-pack-en-base
Это произошло после того, как dpkg-reconfigure locales
не дал никаких результатов.
Не забудьте выйти из сеанса SSH (или вашего X11), снова и снова войти в систему. Все эти предложения не сработали для меня, если я не вернусь назад ....
Для Ubuntu 12.10 ни одно из вышеописанных действий, кроме решения ratzs. Я рекомендую добавить это в файл /etc/bash.bashrc:
export LC_ALL="en_ZA.UTF-8"
export LC_CTYPE="en_ZA.UTF-8"
Я застрял в странном состоянии, когда моя локальная машина настроена на es
, и поэтому удаленный компьютер (через vagrant
) был предоставлен в состоянии без обращения , Поэтому мне пришлось использовать руководство export=
только для облегчения успешного dpkg-reconfigure
. Тогда система в порядке.
export LC_ALL="en_US.UTF-8"
sudo dpkg-reconfigure locales
Я написал скрипт bash , чтобы исправить вышеуказанную проблему. Вышеуказанные ответы полезны, но установка переменных языка путем простого экспорта значений в переменной оболочки будет работать только для сеанса. Я надолго решил эту проблему, экспортировав переменные locale в файл .bash_profile. Вы также можете использовать /etc/profile
файл вместо .bash_profile
.
echo "export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8">>~/.bash_profile
Не забывайте source
.bash_profile
и следуйте сценарий в простой настройке.
Вы можете попробовать:
export LANGUAGE=ru_RU.UTF-8
export LC_CTYPE=ru_RU.UTF-8
export LC_NUMERIC=ru_RU.UTF-8
export LC_TIME=ru_RU.UTF-8
export LC_COLLATE=ru_RU.UTF-8
export LC_MONETARY=ru_RU.UTF-8
export LC_MESSAGES=ru_RU.UTF-8
export LC_PAPER=ru_RU.UTF-8
export LC_NAME=ru_RU.UTF-8
export LC_ADDRESS=ru_RU.UTF-8
export LC_TELEPHONE=ru_RU.UTF-8
export LC_MEASUREMENT=ru_RU.UTF-8
export LC_IDENTIFICATION=ru_RU.UTF-8
export LC_ALL=ru_RU.UTF-8
, где ru_RU
- код вашей страны.
Как сказано здесь, в Вики-версии Debian , вы можете редактировать /etc/locale.gen
и добавить все локали (или раскомментировать их, у меня был список всех локалей, кроме всех тех, которые я использовал в качестве комментариев), которые вы хотите получить в своей системе. Затем выполните
sudo dpkg-reconfigure locales
, чтобы обновить локали в вашей системе. Теперь все локали, которые вы добавили /раскомментировали в /etc/locale.gen
, доступны в вашей системе без каких-либо предупреждений.
Текущий принятый ответ недостаточен в стратегии устранения неполадок, поскольку у вас может быть человеческая ошибка.
Вы настроите свою систему на en_US
, но у вас есть en_GB
включен в /etc/locale.gen
, как у меня в потоке здесь для малины Pi 3b.
У вас должно быть все используемые вами локали в /etc/locale.gen
.
Я использовал en_GB.UTF-8 UTF-8
только в /etc/locale.gen
. Мне нужно было включить только en_US.UTF-8 UTF-8
из-за того, что для него выполняются другие команды. Поэтому я прокомментировал ГБ и раскоментировал США, и теперь все работает
[email protected]:~ $ sudo vim /etc/locale.gen
[email protected]:~ $ sudo locale-gen
Generating locales (this might take a while)...
en_US.UTF-8... done
Generation complete.
[email protected]:~ $ sudo a2enmod rewrite && a2enmod headers && a2enmod ssl
Module rewrite already enabled
Module headers already enabled
Considering dependency setenvif for ssl:
Module setenvif already enabled
Considering dependency mime for ssl:
Module mime already enabled
Considering dependency socache_shmcb for ssl:
Module socache_shmcb already enabled
Module ssl already enabled
Теперь я не получаю эти ошибки локали с любыми командами.
Система: Raspbian Jessie
Аппаратное обеспечение: малина Pi 3b
Если вы используете среду KDE, проверьте файл setlocale.sh
в ~/.kde/env/
:
$ cat ~/.kde/env/setlocale.sh
export LANG=en_US.UTF-8
export LANGUAGE=en_US:ru:en
-
Вам может потребоваться запустить
sudo dpkg-reconfigure
также для приложения, которое вы установили, в то время как настройки «locale» были недопустимыми /не соответствующими.В то время как языковой стандарт системы был неправильно настроен, я установил
vim
. Позже, когда система была исправлена, я увидел ситуацию, когдаvim
отображал символы utf-8 некорректно как странные символы, в то время какnano
иless
показывали их правильно. Выполнениеsudo dpkg-reconfigure vim
появился исправление проблемы после исправления системных настроек.
-
Я также заметил то же самое, что уже упоминалось: вам может потребоваться отключить /повторно подключить SSH, чтобы сделать видимыми изменения.
Добавление следующего текста в ~/.profile
работает для меня:
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
Я использую 64-битный сервер Ubuntu 16.04 LTS на Linode.
Это сработало для меня, когда у меня была такая же проблема (на основе решения предоставлено dman ):
sudo sh -c "echo -e 'LC_ALL=en_US.UTF-8\nLANG=en_US.UTF-8' >> /etc/environment"
У меня возникла проблема с запуском темы «Agnoster» с oh-my-zsh
на моей рабочей станции docker
с аналогичными сообщениями об ошибках. (Это быстрее, чем wsl
IMO, и я могу установить docker.sock в этот контейнер с помощью Hyper-V
VM, управляемой Docker For Windows
, что позволяет мне делать вещи докеров)
Сочетание некоторых предложений из ответов помогло исправить это для меня.
Я добавил это в мой Dockerfile
RUN apt-get install -y locales
RUN sudo locale-gen "en_US.UTF-8"
RUN echo 'LANG="en_US.UTF-8"' > /etc/profile.d/locale.sh
RUN echo 'LANGUAGE="en_US.UTF-8"' >> /etc/profile.d/locale.sh
RUN echo 'LC_ALL="en_US.UTF-8"' >> /etc/profile.d/locale.sh