Как мне исправить проблему с локалью?

506

Я получаю это сообщение каждый раз, когда делаю что-то вроде запуска или остановки службы.

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   

Как я могу исправить эту ошибку?

HackToHell
источник
Связанный: Как установить язык?
Лусио
Простое и постоянное исправление для всех пользователей: askubuntu.com/questions/881742/…
Galvani

Ответы:

513

Сначала запустите, 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.

Теперь вы не увидите больше ошибок!

Отто Кекяляйнен
источник
220
не работал для меня
Umair
4
Это сработало для меня в ряде систем. Есть ли способ избежать этой проблемы на вновь установленных системах?
Брайли Кристофер Оксли
13
@UmairAyub может быть, у вас более одной неизвестной локали, попробуйте это: для y в $ (locale | cut -d '=' -f 2 | sort | uniq); do locale-gen $ y; done Это создаст локаль для каждого вашего определения
Иван Буттинони
3
Выход из системы и логин могут помочь
SMMousavi
4
@ Umair В этой проблеме высокий риск ошибки человека. Ваша система настроена en_GBпо умолчанию, но вы настроили ее на en_US. Вы должны вручную комментировать en_GBи раскомментировать en_USв /etc/locale.gen. Смотрите мой ответ askubuntu.com/a/790373/25388 в аппаратной части Raspberry Pi 3b и в системе Raspbian Jessie.
Лео Леопольд Герц 준영
366

Ничто из предложенного выше не сработало в моем случае (Ubuntu Server 12.04LTS). Что в итоге помогло - это положить в файл /etc/environment:

LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8

По какой-то причине этого не было. Выходные данные для локали и других команд выглядели так, как будто переменные были правильно определены. Другими словами, не принимайте как должное, все основные вещи объявляются там, где они должны быть объявлены.

Marcin
источник
115
Да, никто другой не работал, кроме этого, возможно, из-за обновленной версии. Но я предпочитаю вставить это /etc/default/locale.
Навид
27
Обновлено /etc/default/localeи больше никаких предупреждений. Спасибо
ох,
7
Да, другие не работали на меня. Этот сделал. Вот одна строка, которую я использовал для автоматического обновления этого. sudo sh -c "echo 'LC_ALL=en_US.UTF-8\nLANG=en_US.UTF-8' >> /etc/environment"
Дман
12
@ user163207 Ваше решение неверно, поскольку оно добавляется (вместо перезаписи), это не рекомендуемый файл и echoдолжно запускаться с включенной интерпретацией обратной косой черты. Это то же самое, что и у вас, но с вышеупомянутым исправленным:sh -c "echo -e 'LANG=en_US.UTF-8\nLC_ALL=en_US.UTF-8' > /etc/default/locale"
glarrain
13
НЕ ЗАБУДЬТЕ ЗАЙТИ И ЗАЙТИ!
С.М.Мусави
149

Они должны исчезнуть после выдачи:

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

dpkg-reconfigureпереконфигурирует пакеты после того, как они уже установлены. Передайте ему имена пакетов или пакетов для перенастройки. Он будет задавать вопросы о конфигурации, как при первой установке пакета.

Rinzwind
источник
9
Я рад, что мои проблемы год назад помогли тебе исправить это;)
Rinzwind
1
Разве эта локаль не должна генерироваться по умолчанию? Я имею в виду en, en_AU, en_CA, en_GBприсутствуют по умолчанию , но не en_US?
Даниэль Серодио
@Rinzwind Большое спасибо за ваши усилия! Я действительно сожалею; Я должен был сформулировать свой вопрос лучше. Я хотел спросить: почему необходимо переконфигурировать пакет locales после генерации новых локалей? Мне кажется, что локали работают даже без dpkg-reconfigure.
Виктор
Использование Ubuntu 14.04 в контейнере Docker, поэтому ничего не было установлено. Джанго makemessageнуждается в этом. Это сработало отлично! Благодарю.
Джастин
1
Я понимаю, что raspbian здесь выходит за рамки, но я подумал, что должен упомянуть, что мне нужно было выйти из системы и войти в систему, прежде чем LC_ALLбыла правильно установлена.
MatrixManAtYrService
119

Просто добавьте следующее в ваш .bashrcфайл (если вы используете bash)

export LC_ALL="en_US.UTF-8"
Рац
источник
2
Это сладкое исправление сработало для меня на моем образе Amazon-EC2 (запускалась их стандартная RHEL AMI) Большое спасибо! :)
Гидеон
Этот работал для меня с изображением Ubuntu 12.04 моего digitalocean.
Инан
2
это решило мою проблему. Я должен задать вопрос: почему LC_ALL не был установлен командой locale-gen, как другие ответы, упомянутые выше этого?
alexserver
Странно, но все вышеперечисленное решение не сработало для меня, но это сработало! После экспорта LC_ALLя смог наконец использовать sudo dpkg-reconfigure locales.
sobi3ch
наконец, после того, как я попробовал много трюков, это рабочий для меня на kubuntu 14.04.3 lts. Спасибо!
Иона
94

Это распространенная проблема, если вы подключаетесь удаленно, поэтому решение состоит в том, чтобы не пересылать язык. Отредактируйте /etc/ssh/ssh_configи закомментируйте SendEnv LANG LC_*строку.

user249697
источник
6
Я пытался найти другие ответы, но забыл, что подключался удаленно, пока не увидел ваш ответ. Различные локали на сервере и клиенте ssh вызывали проблему.
Hieu
2
На OSX (подключение к Ubuntu) он находится в/etc/ssh_config
Michiel de Mare
Один вкладыш для этого: sed -e '/SendEnv/ s/^#*/#/' -i /etc/ssh/ssh_config(полезно для подготовки сервера)
Альбин
Я не мог установить LC_ALL на машине локали, но это исправило мою проблему с удаленным сервером, спасибо.
Александр Шленчак
1
Вероятно, стоит отметить, что вы должны редактировать файл на локальной машине, а не на удаленной.
Clashsoft
72

Для этого есть команда:

sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8

Он обновляется /etc/default/localeс предоставленными значениями.

sgtpep
источник
4
Это законно! Не забудьте выйти / перезагрузить свою оболочку, иначе вы не увидите изменений. Не забудьте проверить одобренный ответ для создания и перенастройки локалей.
Эрик Живкович
1
Запуск по- localeпрежнему не показывает никаких значений UTF.
Cerin
@Cerin: Myybe, вызов locale-genотсутствует. Раньше надо делать apt-get install locales.
Коппор
1
Это не изменит LANG для корневой оболочки в Ubuntu 16.04, так как это отменено в /root/.profile.
Виллем
32

Что сработало для меня 12.10, так это:

apt-get install language-pack-en-base  

Это было после того, как не dpkg-reconfigure localesдали никаких результатов.

Георгий Ответология
источник
2
Это лучший ответ. Дело не в том, что мои локали были настроены неправильно, но на самом деле их не было. Я думаю , что это похоже на проблемы в ФП, как хорошо ( «Нет такого файла или каталога» довольно ясно , если локаль будет установлена правильно!).
Прорыв
1
У меня возникала проблема с OP, когда я использовал apt-get в Ubuntu 12.04. Это решило проблему без необходимости редактировать какие-либо файлы.
Зависит от
"language-pack-en-base - это уже самая новая версия".
Карлинген
Выход из системы и логин могут помочь
SMMousavi
У меня работало в убунту chrootпод дебианом. Спасибо :)
Wyatt8740
18

Не забудьте выйти из сеанса SSH (или X11), выйдя и войдя снова. Все эти предложения не сработали для меня, пока я не вошел в систему ....

Майкл Р. Хайнс
источник
2
Этот комментарий должен получить больше голосов или хотя бы факт должен быть выделен в каждом ответе.
ni8mr
11

Для Ubuntu 12.10 ничего из вышеперечисленного не сработало, за исключением решения Раца. Я рекомендую добавить это в ваш файл /etc/bash.bashrc:

export LC_ALL="en_ZA.UTF-8"
export LC_CTYPE="en_ZA.UTF-8"
Лавмор Налубе
источник
Из всех решений выше. Это единственное, что сработало для меня.
JohnnyQ
11

Я застрял в странном состоянии, в котором настроен мой локальный компьютер, esи поэтому удаленный компьютер (через vagrant) был переведен в необработанное состояние. Поэтому мне пришлось использовать руководство export=только для того, чтобы облегчить успех dpkg-reconfigure. Тогда система в порядке.

export LC_ALL="en_US.UTF-8"
sudo dpkg-reconfigure locales
Чарни Кэй
источник
Лучший! Благодаря dpkg-recofigureдисплеям моджибаке.
Ориент
9

Я написал 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

Аджит Хан
источник
8

Ты можешь попробовать:

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код вашей страны

Koss
источник
7

Текущий принятый ответ не достаточен в стратегии устранения неполадок, потому что вы можете иметь человеческую ошибку. Вы настроили свою систему на, 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

Теперь я не получаю эти языковые ошибки ни с какими командами.

Система: Raspbian Jessie
Оборудование: Raspberry Pi 3b

Лео Леопольд Герц 준영
источник
6

Как сказано здесь, в вики Debian , вы можете редактировать /etc/locale.genи добавлять все локали (или раскомментировать их, у меня был список всех локалей, но все, кроме той, которую я использовал в качестве комментариев), которую вы хотите поддерживать в своей системе. Затем выполните

sudo dpkg-reconfigure locales

обновить локали в вашей системе. Теперь все локали, которые вы добавили / комментировали /etc/locale.gen, доступны в вашей системе без каких-либо предупреждений.

msrd0
источник
3

Если вы используете среду KDE, проверьте setlocale.shфайл в ~/.kde/env/:

$ cat ~/.kde/env/setlocale.sh 
export LANG=en_US.UTF-8
export LANGUAGE=en_US:ru:en
MaximKostrikin
источник
это спасло мою задницу .... спасибо! Невероятно, сколько мест в этом дерьме локалей устанавливается ... и как в мире KDE удается все испортить, смешивая два разных языка (is_IS для местоположения, деньги и т. Д. И en_EN для языка в несуществующий is_EN) локаль)! Grmpfh.
StFS
2
  1. Вам также может потребоваться запустить sudo dpkg-reconfigureприложение, которое вы установили, в то время как настройки «локали» были недействительными / не совпадали.

    В то время как система была неправильно настроена, я установил vim. Позже, когда системный языковой стандарт был исправлен, я увидел ситуацию, vimкогда символы utf-8 неправильно отображались как странные символы, nanoи lessотображали их правильно. Бег

    sudo dpkg-reconfigure vim
    

    появился, чтобы исправить проблему после того, как системные настройки были исправлены.

  2. Я также заметил то же самое, что уже упоминалось: вам может потребоваться отключить / повторно подключить SSH, чтобы сделать изменения видимыми.

ajaaskel
источник
2

Добавление следующего текста ~/.profileработает для меня:

export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8

Я использую 64-битный сервер Ubuntu 16.04 LTS на Linode.

Цзинго Яо
источник
2

Это сработало для меня, когда у меня возникла та же проблема (на основе решения, предоставленного dman ):

sudo sh -c "echo -e 'LC_ALL=en_US.UTF-8\nLANG=en_US.UTF-8' >> /etc/environment"
pythonhunter
источник
Я не совсем уверен, как добавить URL к комментарию. @EliahKagan
питонхантер
1
Нет проблем - дата / время рядом с комментарием - это то, что связано с ним напрямую. ... Итак, я заметил, что комментарий Гларрэйна (призывая >вместо >>) кажется ответом на комментарий Дмана. Я на самом деле не знаю, какой путь правильный или лучший, но если у вас есть какое-либо понимание этого, вы можете расширить этот ответ с дополнительной информацией. (Вы не должны, хотя.)
Элия ​​Каган