Як виправити проблему з мовою?


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   

Як виправити цю помилку?




Просте і постійне виправлення для всіх користувачів: askubuntu.com/questions/881742/…
Гальвані

Відповіді:


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
не працювали для мене
Умаїр

4
Це працювало для мене в ряді систем. Чи є спосіб уникнути цього питання в нещодавно встановлених системах?
Брайлі Крістофер Окслі

13
@UmairAyub, можливо, у вас є кілька невідомих локалів, спробуйте це: для y в $ (locale | cut -d '=' -f 2 | sort | uniq); do locale-gen $ y; Зроблено. Це створить локаль для кожного з ваших визначень
Іван Буттіноні,

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

Чомусь його бракувало. Виходи для локальних та інших команд виглядали так, як змінні були правильно визначені. Іншими словами, не сприймайте як належне, всі основні речі декларуються там, де його потрібно декларувати.


115
Так, жоден інший не працював, окрім цього, можливо, завдяки оновленій версії. Але я вважаю за краще це ставити /etc/default/locale.
Naveed

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
НЕ ЗАБУДУЙТЕ ЗАЛОГУВАННЯ І ПОВТОРЕННЯ ВХОД!
SMMousavi

149

Вони повинні зникнути після видачі:

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

dpkg-reconfigureперенастроює пакети після їх встановлення. Передайте назви пакету чи пакунків для перенастроювання. Він буде задавати питання щодо конфігурації, як і коли пакет був встановлений вперше.


9
Я радий, що мої неприємності рік тому допомогли вам виправити це;)
Rinzwind

1
Чи не повинен цей локал генеруватися за замовчуванням? Я маю в виду en, en_AU, en_CA, en_GBприсутні за замовчуванням , але не en_US?
Даніель Серодіо

@Rinzwind Дякую велике за ваші зусилля! Я вибачаюся; Я повинен був краще сформулювати своє питання. Що я мав намір запитати: Чому потрібно переконфігурувати пакет локалів після створення нових локалів? Мені здається, що локалі працюють навіть без них 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) Дякую! :)
gideon

Цей працював для мене із зображенням Ubuntu 12.04 мого дигіталоцена.
Інан

2
це вирішило мою проблему. Я маю задати питання: чому ж LC_ALL не була встановлена ​​командою loca-gen, як інші відповіді, сказані вище цього?
alexserver

Дивно, все рішення вище для мене не спрацювало, але це було! Після експорту LC_ALLя могла нарешті використати sudo dpkg-reconfigure locales.
sobi3ch

нарешті, спробувавши багато хитрощів, це для мене робочий на kubuntu 14.04.3 lts. Дякую!
Йона

94

Це поширена проблема, якщо ви підключаєтесь віддалено, тому рішення не пересилати свою локальну мову. Редагуйте /etc/ssh/ssh_configта коментуйте SendEnv LANG LC_*рядок.


6
Я пробував інші відповіді, але забув, що зв’язувався віддалено, поки не побачив вашої відповіді. Проблема викликала різні локалі на ssh сервері та клієнті.
Hieu

2
На OSX (підключення до ubuntu) він знаходиться/etc/ssh_config
Мічіель де Маре

Один з них: 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надані значення.


4
Це законно! Не забудьте вийти / перезавантажити оболонку, інакше ви не побачите змін. Не забудьте ознайомитись із затвердженою відповіддю для створення та перенастроювання локалів.
Ерік Живкович

1
Запуск localeвсе ще не показує жодних значень utf.
Серін

@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
Я отримував проблему з ОП коли-небудь, коли я використовував apt-get на Ubuntu 12.04. Це прекрасно вирішило це, не редагуючи жодних файлів.
Дебют

"language-pack-en-base - це вже найновіша версія."
karlingen

Вихід та вхід можуть допомогти
SMMousavi

Працював для мене в ubuntu chrootпід debian. Дякую :)
Wyatt8740

18

Не забудьте вийти з сеансу SSH (або свого X11), вийшовши та знову ввійти в систему. Усі ці пропозиції не спрацювали для мене, якщо я не ввійшов у систему….


2
Цей коментар повинен отримати більше оновлень або хоча б факт повинен бути висвітлений у кожній відповіді.
ni8mr

11

Для Ubuntu 12.10 жодне з перерахованих вище не працювало, за винятком рішення ratzs. Рекомендую додати це у файл /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дисплеї mojibake.
Орієнтуватися

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ваш код країни.


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 Wiki , ви можете редагувати /etc/locale.genта додавати всі локалі (або коментувати їх, у мене був список усіх локалів, окрім усіх, крім того, який я використовував як коментарі), для якого ви хочете мати підтримку у вашій системі. Потім виконати

sudo dpkg-reconfigure locales

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


3

Якщо ви використовуєте середовище KDE, перевірте setlocale.shфайл у ~/.kde/env/:

$ cat ~/.kde/env/setlocale.sh 
export LANG=en_US.UTF-8
export LANGUAGE=en_US:ru:en

це врятувало мою дупу .... дякую! Неймовірно, у скільки місць встановлено це лайно локалі ... і як у світі KDE вдається викрутити речі, змішавши два мої різні локалі (is_IS для місця розташування, грошей тощо та en_EN для мови у неіснуючу is_EN locale)! Grmpfh.
StFS

2
  1. Можливо, вам доведеться запустити sudo dpkg-reconfigureтакож встановлену програму, коли параметри "locale" недійсні / не відповідають.

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

    sudo dpkg-reconfigure vim
    

    з'явилася помилка після виправлення системних налаштувань.

  2. Я також помітив те саме, що вже згадувалося: Вам може знадобитися відключити / підключити SSH, щоб зміни були видимими.


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"

Я не був зовсім впевнений, як додати URL-адресу до коментаря. @EliahKagan
pythonhunter

1
Немає проблем - дата / часова позначка поруч із коментарем - це те, що посилається на нього безпосередньо. ... Отже, я помітив коментар Glarrain (закликаючи >замість цього >>) здається відповіді на дман. Я насправді не знаю, який спосіб є правильним чи найкращим, але якщо ви маєте про це розуміння, ви можете розширити цю відповідь додатковою інформацією. (Не потрібно це робити.)
Елія Каган
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.