Неможливо встановити 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.