Неможливо встановити LC_CTYPE на локальну мову за замовчуванням: Немає такого файлу чи каталогу


54

У мене є точне запитання, як це, але рішення немає. Я спробував, але це не працює

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

$ locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE=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=

$ locale -a
locale: Cannot set LC_CTYPE to default locale: No such file or directory
C
C.UTF-8
en_US.utf8
POSIX

Це через невідповідність en_US.UTF-8 та en_US.utf8?

Як виправити?


Чи читали ви це askubuntu.com/a/229512/387382 ?
Геліо

Відповіді:


53

Відкрийте термінал і запустіть команду нижче:

export LC_ALL="en_US.UTF-8"

Це працює, але чому?
Ю Цзяао

16
Це нічого не вирішує, оскільки змінна знищується в кінці сеансу ..
Етьєн Готьє


Прекрасне рішення в таких маленьких словах. Лол!
Редбоб

1
При експорті цього -bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
вару

36

Ця ж проблема (LC_CTYPE = UTF-8, що невірно) може статися, коли ви входите через ssh з Mac у вікно Linux, і ваш термінал автоматично встановлює змінні середовища. Для цього є прапорець. Зніміть його, і ви добре підете. В iTerm це в профілі-> Вкладка терміналів.


2
в iTerm відключити прапорець "Налаштування> Профілі> За замовчуванням> Термінал> Навколишнє середовище> Автоматично встановити змінні локалі"
ecerulm

1
-1: Хоча це може працювати, це надзвичайно інвазивно. Ви також можете вплинути на поведінку вашого локального терміналу, а також на поведінку кожного хоста, до якого ви підключаєтесь. Хоча ваші висновки вірні, краще використовувати ssh_config, щоб він не надсилав LC_ * для хостів, які, як відомо, мають проблеми.
Макс Рійд

3
Чи можете ви, будь ласка, додати свою власну відповідь, розширивши її додатковими поясненнями, чому це потенційно впливає на поведінку вашого локального терміналу та як сказати ssh_config не надсилати LC_ *. Тому що ти просто -1 моя відповідь без реального пояснення.
raarts

Якщо ви під’єднуєтесь до MacOS за допомогою терміналу, перейдіть у розділ Налаштування терміналу> Додатково та зніміть прапорець "Встановити змінні середовища локальної системи при запуску".
javaxian

Що, здається, трапляється так: у вашій локальній системі у вас встановлено деякий локал, потім ви переходите до іншої системи, на якій не встановлено цю локаль. Клієнт-термінал скаже віддаленій системі, яка у вас локаль, а віддалена система не зможе відповісти запитуваною мовою. У вас є два способи виправити це: або ви змінюєте, що запитуєте, або додаєте запитуваний локаль до віддаленої системи (що вимагає кореневого доступу).
січня

27

У мене була подібна проблема, і я додав рядки нижче у свій /etc/default/localeфайл:

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

Я отримав це з цієї публікації: Як виправити проблему з мовою?


3
Ну, тим самим у вас виходить дуже брудна конфігурація локалів. /etc/environmentне призначений для встановлення локалів в Ubuntu; /etc/default/localeє. Крім того, у випадку робочого столу, якого ви ніколи не повинні встановлювати LC_ALLпостійно. Ваш спосіб зробить безкорисними користувальницькі інтерфейси для керування налаштуваннями мови та мови на робочому столі, наприклад, підтримка мови.
Gunnar Hjalmarsson

Це насправді працює. Після перезавантаження.
TranslucentCloud

Вихід та вхід, це має працювати
Sand1512


9
export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales

Я запускав майже чистий екземпляр Vultr з питаннями, як у запитанні, заглядав у зміни середовища і все виглядало гаразд. Однак sudo dpkg-reconfigure localesзробив щось, чого, мабуть, бракувало. Мої сеанси ssh зараз добре. Дякую!
Йонас

6

Вихід з localeкоманди вказує на те, що у вашому оточенні є цей неправильний рядок:

LC_CTYPE="UTF-8"

("UTF-8" не є дійсною локальною назвою.)

Зазвичай він походить /etc/default/locale. Видаліть цей рядок, якщо він є, і повторіть його.

Якщо він не надходить звідти, він може виходити з конфігурації оболонки або якщо ви віддалено входите через SSH, з конфігурації клієнтської машини.


Чи потрібно змінити LC_CTYPE на utf8?
Mave

@Lucas: Ні, це було б так само погано. Оскільки LANG встановлений, ви можете просто видалити весь рядок, який починається з LC_CTYPE.
Gunnar Hjalmarsson

Якщо ви хочете встановити LC_TYPE, вам слід також встановити його на "en_US.UTF-8".

Якщо це походить від конфігурації клієнтської машини, ви можете додати локаль на сервері за допомогою dpkg-reconfigure locales.
Пол Рудьо

5

Ці команди врятували мені життя

sudo echo "LC_ALL=en_US.UTF-8" >> /etc/environment
sudo echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
sudo echo "LANG=en_US.UTF-8" > /etc/locale.conf
sudo locale-gen en_US.UTF-8

5
Файли відкриваються раніше sudo. Переадресації не працюватимуть, якщо ви вже не отримали root.
Мартін Торнтон

3

Файл / etc / default / locale може мати додаткові (але непотрібні) рядки: Приклад файлу може виглядати так:

#  File generated by update-locale
LANG=en_US.UTF-8
LANGUAGE="en_IN:en

Щоб впорядкувати та успішно генерувати та переконфігурувати локалі, видаліть чи прокоментуйте всі рядки із цього файлу, крім:

LANG=en_US.UTF-8

Нарешті файл повинен виглядати так:

#  File generated by update-locale
LANG=en_US.UTF-8
# LANGUAGE="en_IN:en

Після цього запустіть dpkg-reconfigure locales, виберіть en_US.UTF-8, коли з’явиться запит на вибір місцевості, і вам слід добре поїхати. Ви отримаєте Generation complete.повідомлення, коли процес завершиться.


0

Мені вдалося викликати це самостійно під час перенесення точкових файлів домашнього каталогу на нову машину, і мені не вдалося на деякий час визначити причину за рахунок пошуку файлів, LC_але ні LOC.

~/.bashrcФайл я скопіював мав наступне:

export LOCPATH=/var/guix/profiles/per-user/root/guix-profile/lib/locale

(особливе значення тут було у зв'язку з попередніми експериментами з GNU Guix на старій машині; але відповідний факт полягає лише в тому, що змінна середовища була встановлена ​​на недійсний шлях.)

Це призвело до наступної помилки під час запуску різних програм:

Warning: locale not supported by C library, locale unchanged

І ці помилки при запуску locale:

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

Видалення (або коментування) LOCPATHрядка вирішило мої проблеми.


0

просто запустіть наступне:

sudo apt-get upgrade

він створить усі локати, а потім встановить за замовчуванням US:

export LC_ALL="en_US.UTF-8"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.