Как мне исправить проблему с локалью?
Я получаю это сообщение каждый раз, когда делаю что-то вроде запуска или остановки службы.
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
Как я могу исправить эту ошибку?
20 ответов
Первый забег 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), выйдя и войдя снова. Все эти предложения не сработали для меня, пока я не вошел в систему....
Я застрял в странном состоянии, когда моя локальная машина настроена на es
и так удаленная машина (через vagrant
) был предоставлен в необработанном состоянии. Поэтому мне пришлось использовать руководство export=
только для облегчения успешного dpkg-reconfigure
, Тогда система в порядке.
export LC_ALL="en_US.UTF-8"
sudo dpkg-reconfigure locales
Для Ubuntu 12.10 ничего из вышеперечисленного не сработало, за исключением решения Раца. Я рекомендую добавить это в ваш файл /etc/bash.bashrc:
export LC_ALL="en_ZA.UTF-8"
export LC_CTYPE="en_ZA.UTF-8"
Я написал bash-скрипт для исправления вышеуказанной проблемы. Приведенные выше ответы полезны, но установка переменных локали путем простого экспорта значений в переменную оболочки будет работать только для сеанса. Я навсегда решил эту проблему, экспортировав переменные локали в файл.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
это код вашей страны.
Текущий принятый ответ не достаточен в стратегии устранения неполадок, потому что вы можете иметь человеческую ошибку. Вы настраиваете свою систему на en_US
но у тебя есть en_GB
включен в/etc/locale.gen
как у меня было в теме здесь для Raspberry Pi 3b. Вы должны включить все свои используемые локали в /etc/locale.gen
,
я имел en_GB.UTF-8 UTF-8
включен только в /etc/locale.gen
, Я бы там только включил en_US.UTF-8 UTF-8
из-за других команд на него бегут. Поэтому я прокомментировал ГБ и США без комментариев, и теперь все работает
masi@raspberrypi:~ $ sudo vim /etc/locale.gen
masi@raspberrypi:~ $ sudo locale-gen
Generating locales (this might take a while)...
en_US.UTF-8... done
Generation complete.
masi@raspberrypi:~ $ 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
Теперь я не получаю эти языковые ошибки ни с какими командами.
Система: Распби Джесси
Аппаратное обеспечение: Raspberry Pi 3b
Как сказано здесь, в вики Debian, вы можете редактировать /etc/locale.gen
и добавьте все локали (или раскомментируйте их, у меня был список всех локалей, но все, кроме той, которую я использовал в качестве комментариев), которую вы хотите поддерживать в своей системе. Затем выполните
sudo dpkg-reconfigure locales
обновить локали в вашей системе. Теперь все локали, которые вы добавили / не прокомментировали в /etc/locale.gen
доступны в вашей системе без каких-либо предупреждений.
Если вы используете среду KDE, проверьте setlocale.sh
файл в ~/.kde/env/
:
$ cat ~/.kde/env/setlocale.sh
export LANG=en_US.UTF-8
export LANGUAGE=en_US:ru:en
Это сработало для меня, когда у меня возникла та же проблема (на основе решения, предоставленного dman):
sudo sh -c "echo -e 'LC_ALL=en_US.UTF-8\nLANG=en_US.UTF-8' >> /etc/environment"
Добавление следующего текста в ~/.profile
работает для меня:
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
Я использую 64-битный сервер Ubuntu 16.04 LTS на Linode.
Вам может понадобиться бежать
sudo dpkg-reconfigure
также для приложения, которое вы установили, в то время как настройки "локали" были недействительными / не совпадают.В то время как системная локаль была неправильно настроена, я установил
vim
, Позже, когда была исправлена локаль системы, я увидел ситуацию, котораяvim
неправильно отображал символы utf-8 как странныеnano
а такжеless
показывали их правильно. Бегsudo dpkg-reconfigure vim
появился, чтобы исправить проблему после того, как системные настройки были исправлены.
Я также заметил то же самое, что уже упоминалось: вам может потребоваться отключить / повторно подключить SSH, чтобы сделать изменения видимыми.
Источник проблемы
Я испытал это, входя с одной машины на другую через
ssh
. На удаленной машине не было файлов локали, которые были у меня на моей локальной машине. Вы можете отключить пересылку языкового стандарта с локального компьютера на удаленный (в файле
/etc/ssh/sshd_config
удалить линию
AcceptEnv LANG LC_CTYPE …
) или установить локаль (менять в этом случае не нужно).
Установка
В Fedora, RHEL, Redhat, CentOS я использовал
sudo dnf install langpacks-de
для немецких языковых пакетов. Вышел из системы, и это сработало.
Искать другие языковые пакеты с
dnf search langpacks-
Изменение / Активация
Чтобы перечислить доступные локали, я использовал
localectl list-locales
И установить новый
sudo localectl set-locale de_DE.utf8
удалите локали с помощью localepurge, которые вам не нужны, и перезагрузите компьютер
apt install localepurge