Як виправити Perl попередження про налаштування місцевості?


596

Коли я біжу perl, отримую попередження:

perl: попередження: Не вдалося встановити локаль.
perl: попередження: Перевірте, чи налаштовано ваш локальний каталог:
    МОВА = (не встановлено),
    LC_ALL = (не встановлено),
    LANG = "en_US.UTF-8"
підтримуються та встановлюються у вашій системі.
perl: попередження: Повернення до стандартної локалі ("C").

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


Що сталося, коли ви перевірили параметри локалі, як вам повідомило повідомлення про помилку?
Брайан d foy

3
замість того, щоб встановлювати локаль, ви також можете змінити локаль. У моєму полі Ubuntu це зроблено для одного користувача шляхом редагування~/.pam_environment
Janus Troelsen

У моєму ODROID-C1 під керуванням Ubuntu проблема справді була файлом ~ / .pam_environment. Деякі зі змінних були es_US.UTF-8 замість en_US.UTF-8. Дякую.
f1vefour

Я отримав це на Cygwin \ Babun. Виправлено це лише перевстановлення perl.
Лукас Соарес

Відповіді:


449

Ваша ОС не знає про це en_US.UTF-8.

Ви не згадали про конкретну платформу, але я можу відтворити вашу проблему:

% unme -a
OSF1 мисливець2 V5.1 2650 альфа
% perl -e вихід
perl: попередження: Не вдалося встановити локаль.
perl: попередження: Перевірте, чи налаштовано ваш локальний каталог:
    LC_ALL = (не встановлено),
    LANG = "en_US.UTF-8"
    підтримуються та встановлюються у вашій системі.
perl: попередження: Повернення до стандартної локалі ("C").

Я здогадуюсь, ви використовували ssh для підключення до цього старшого хоста з новішої настільної машини. Це звичайно, /etc/ssh/sshd_configщоб містити

AcceptEnv LANG LC_*

що дозволяє клієнтам поширювати значення цих змінних середовища в нові сеанси.

Попередження дає вам підказку про те, як його розім’яти, якщо вам не потрібна локальна система:

% env LANG = C perl -e вихід
%

або з bash:

$ LANG = C perl -e вихід
$ 

Для постійного виправлення виберіть один із

  1. На старшому хості встановіть LANGзмінну середовища у файлі ініціалізації вашої оболонки.
  2. Змініть своє оточення на стороні клієнта, наприклад , замість того ssh hunter2, щоб використовувати команду LANG=C ssh hunter2.
  3. Якщо у вас є права адміністратора, припиніть ssh надсилати змінні середовища, коментуючи SendEnv LANG LC_*рядок у локальному /etc/ssh/ssh_config файлі. (Завдяки цій відповіді . Докладніше див. У програмі Bug 1285 для OpenSSH.)

22
Дякую! У мене виникло це повідомлення про помилку під час підключення з git до мого сервера. Після додавання de_CH.UTF-8 (не підтримувався там, але використовується локально) з dpkg-reconfigure localesповідомленням не буде.
Саймон А. Егстер

82
У мене ця проблема була віком, ... видалення "AcceptEnv LANG LC_ *" з sshd_config остаточно її вирішило. Дякую за підказку!
madc

2
@Greg Bacon, Чи не трапляться також випадки, коли ви хочете встановити систему змінних довкілля у всьому світі, наприклад, створивши файл / etc / environment? help.ubuntu.com/community/…
фіксація

25
@HermannIngjaldsson, принаймні в Ubuntu (12.10), не потрібно було перезавантажувати сервер (після видалення "AcceptEnv LANG LC_ *"). Я щойно перезавантажив ssh config:, service ssh reloadякий займає частку секунди, і навіть не спричиняє завершення поточного сеансу ssh.
noamtm

3
додати 'export LC_ALL = C', потім 'source ~ / .bashrc' у клієнтській системі вирішити проблему.
EffectiveMatrix

476

Ось як це вирішити на Mac OS Lion (10.7) або Cygwin (Windows 10):

Додайте наступні рядки до bashrc або bash_profile на хост-машині:

# Setting for the new UTF-8 terminal support in Lion
export LC_CTYPE=en_US.UTF-8
export LC_ALL=en_US.UTF-8

Якщо ви використовуєте zsh, відредагуйте zshrc:

# Setting for the new UTF-8 terminal support in Lion
LC_CTYPE=en_US.UTF-8
LC_ALL=en_US.UTF-8

6
Дякую, я довго шукав рішення цієї проблеми, і я завжди вважав, що це проблема в моїй конфігурації сервера Ubuntu, і здавалося, що не знайшлося рішення, яке допоможе (усі ті речі, які переконфігурують dkpg (
Teemu Kurppa

5
Оскільки LC_ALLперезаписуються всі інші змінні, я вважаю за краще встановити LANG=de_AT.UTF-8й окремі змінні LC_MESSAGES=en_US.UTF-8. Якщо змінна не встановлена, вона повертається до LANG. Ви також можете, наприклад. unset LC_CTYPEщоб змусити його відпасти назад LANG.
Девід

4
Розміщення цих рядків у .bashrc не працювало, але bash_profile вирішив це! Мені довелося створити файл.
Герман Інгяльдссон

5
Вклавши ці рядки в ~/.bashrcрозв’язане це для мене ... потім треба перезавантажити, використовуючи source ~/.bashrc... Thnks <3
Enissay

5
Дякую, це спрацювало чудово на ZSH та плагіні oh-my-zsh під Mac OS X El Capitan, внизу ~ / .zshrc: LC_CTYPE = en_US.UTF-8 LC_ALL = en_US.UTF-8
Valerio Schiavoni

207

Якщо ви створюєте rootfs за допомогою debootstrap, вам потрібно буде генерувати локалі. Це можна зробити, виконавши:

# (optional) enable missing locales
sudo nano /etc/locale.gen

# then regenerate
sudo locale-gen

Ця порада походить від https://help.ubuntu.com/community/Xen


28
Це справжнє виправлення для мене.
Афріза Н. Короткий

5
locale-gen не бере жодних аргументів (принаймні, у стабільній Debian). Натомість відредагуйте /etc/locale.gen, щоб відміняти потрібні локалі, а потім запустіть sudo locale-gen
Сем Уоткінс

2
зафіксованоUbuntu Server
Пашаліс

5
На Debian вам може знадобитися $ echo en_US UTF-8 >> /etc/locale.genспочатку.
ахмед

1
На Gentoo (принаймні) locale-genаргументів не бере. Це читається з /etc/locale.gen.
Пістос

142

Використання:

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

Це працює для Debian . Я не знаю чому - але локальний рід не мав результатів.

Важливо! Це тимчасове рішення. Він повинен запускатися для кожного сеансу.


13
Цей працював на мене. Я просто помістив його у свій .bashrcфайл.
Аніруд Рамананат

2
Працював і для мене. Мені довелося лише встановити два налаштування (LANGUAGE та LC_ALL), які виявились невстановленими у попередженнях Perl
laurent

2
У Debian local-genобробляють лише локалі, котрі не коментовані /etc/local.gen. Вам може знадобитися зробити echo en_US UTF-8 >> /etc/locale.genспочатку.
ахмед

це працювало для мене на Elementary OS Freaya (на базі Ubuntu)
valkirilov

1
LC_ C ТИП може бути?
міксель

139

Це, як правило, означає, що ви неправильно налаштували локалі у вашому Linux-вікні.

У Debian або Ubuntu це означає, що вам потрібно зробити

$ sudo locale-gen
$ sudo dpkg-переналаштування локалів

Див. Також місцевий рід людини .


30
не вирішує тут питання
Somatik

6
dpkg-переконфігуруйте локалі - виправлено проблему для мене, debian 7.1
newUserNameHere

4
dpkg-перенастроювання локалів виходить з ладу з тими ж повідомленнями про помилки локальної локальної мережі, які намагаються виправити в першу чергу !!!!
Маттео

10
Це працювало для мене в Ubuntu 14.04, хоча мені довелося спочатку додати пропущений локалsudo locale-gen es_UY.UTF-8
alf

2
@matteo Лише перший раз, перш ніж виправити помилку. Спробуйте ще раз, і це має бути виправлено.
Нуль3

92

Тільки для користувачів macOS та Mac OS X

Я отримував таке ж попередження під час використання Git

Щоб усунути це попередження , зніміть з Set locale environment variable on startupопції і перезавантажити термінал. Знизу на екрані представлені мої налаштування терміналу.

введіть тут опис зображення


3
Ого, такі прості і виправлені мої проблеми! Дякую!
Міхал

3
Я спробував усі інші, але цей зробив це для мене. Я використовую iTerm, і він має той самий варіант кодування символів.
Майкл Моррісон

2
На жаль, це зриває ZSH (вкладки перестали працювати)
Крістіан

1
Це повністю робить фокус для Mac OS. До речі, це починається зі мною відразу після оновлення до macOS Sierra. І це все вирішило для мене це питання.
Пауло Мальвар

1
це вирішило мою проблему. це почало траплятися зі мною, після оновлення до Mac OS X High Sierra з Сьєрри.
Lucian Irimie

36

Це просто виправити в Ubuntu. Ви повинні генерувати Локалі з нуля, виконуючи наступні команди з командного рядка:

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

Це має створити локалі та потім їх знову налаштувати.


Це добре працювало для мене, навіть використовуючи pt_BR pt_BR.UTF-8- Спасибі.
Маркос Фрейтас

29

Додаючи наступне, щоб /etc/environmentвирішити проблему для мене на Debian і Ubuntu (звичайно, змінити, щоб відповідати локалі, яку ви хочете використовувати):

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

7
.. У мене з’явилося попередження: мовлення локальних налаштувань у /etc/environmentзастарілому і замість цього слід встановити /etc/default/locale. Обидва, здається, зараз працюють.
joscarsson

має бутиLC_CTYPE
aexl

25

Зараз я використовую це:

$ cat /etc/environment
...
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8

Потім вийдіть із сеансу SSH та ввійдіть знову.

Стара відповідь:

Тільки це мені допомогло:

$ locale
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=ru_RU.UTF-8
LC_TIME=ru_RU.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=ru_RU.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=ru_RU.UTF-8
LC_NAME=ru_RU.UTF-8
LC_ADDRESS=ru_RU.UTF-8
LC_TELEPHONE=ru_RU.UTF-8
LC_MEASUREMENT=ru_RU.UTF-8
LC_IDENTIFICATION=ru_RU.UTF-8
LC_ALL=

$ sudo su

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

# locale-gen en_US.UTF-8
Generating locales...
  en_US.UTF-8... up-to-date
Generation complete.

# dpkg-reconfigure locales
Generating locales...
  en_AG.UTF-8... done
  en_AU.UTF-8... done
  en_BW.UTF-8... done
  en_CA.UTF-8... done
  en_DK.UTF-8... done
  en_GB.UTF-8... done
  en_HK.UTF-8... done
  en_IE.UTF-8... done
  en_IN.UTF-8... done
  en_NG.UTF-8... done
  en_NZ.UTF-8... done
  en_PH.UTF-8... done
  en_SG.UTF-8... done
  en_US.UTF-8... up-to-date
  en_ZA.UTF-8... done
  en_ZM.UTF-8... done
  en_ZW.UTF-8... done
Generation complete.

# exit

$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE="en_US.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=en_US.UTF-8

Це добре працювало для мене на Ubuntu 15.04, велике спасибі.
Goke Obasa

22

на Debian після багатьох пошуків це зробило свою справу.

спочатку:

sudo apt-get purge locales

тоді:

sudo aptitude install locales

і відомі:

sudo dpkg-reconfigure locales

Це позбавляє систему локалів, після чого перевстановлює локалі та знижує рівень libc6 з 2.19 до 2.13, в чому полягає проблема. Потім знову налаштовує локалі.


4
dpkg-reconfigure localesце все, що потрібно. sudoякщо ви хлопець типу судо, або робіть це як root. Потім виберіть свою локальну залежність відповідно до наявних у вашому середовищі оболонок.
mknaf

6
dpkg-перенастроювання локалів ДОЛЖЕН бути всім, що потрібно. Після того, як ви пробували це 100 разів і оглянули Інтернет, і це все, що ви бачили, і проблема все ще не вирішить себе, спробуйте вище. Тоді поверніться і підтвердіть це. :)
tkjef

1
нарешті, безрезультатна відповідь на цю проблему, безумовно, має бути прийнятою!
php_nub_qq

17

Це швидка відповідь. Ми встановимо локалі, які не скидаються після перезавантаження. Спочатку відкрийте файл bash і відредагуйте його:

nano .bashrc

додайте у файл ці рядки:

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

активувати зміни, перезавантаживши bash:

source ~/.bashrc

результати тесту:

locale

Єдиний, який працює для мене, Raspbian і сервер ubuntu 16.04 :)
Liso

13

Для Ubuntu використовуйте це,

#export LANGUAGE=en_US.UTF-8
#export LC_ALL=en_US.UTF-8
#export LANG=en_US.UTF-8
#export LC_TYPE=en_US.UTF-8

Працювали для мене.


Це також працювало для мене, видаливши весь вміст у файлі /etc/default/localeі поставивши лише визначення vars (видаливши слово Export) та перезапустивши сервер
Edenshaw

12

Якщо ви використовуєте Mac OS X v10.10 (Yosemite) або вище для підключення на своєму сервері Linux, ви можете спробувати ці кроки.

  1. Зберігайте файл / etc / ssh / sshd-config оригінальним

  2. Поставте свій ~ / .bash_profile

    export LANG="en_US"
    export LC_ALL=$LANG.UTF-8
  3. Біжи

    dpkg-reconfigure locales

    І виберіть "en_US.UTF-8"


10
sudo nano /etc/locale.gen

Відкоментуйте локалі, які ви хочете використовувати (наприклад, en_US.UTF-8 UTF-8 ):

Потім запустіть:

sudo /usr/sbin/locale-gen

Джерело: http://people.debian.org/~schultmc/locales.html


Компанія, в якій я працюю в США, розміщує сервер git, який має міжнародних клієнтів. Натовп ГБ поскаржився, що їх клони git over ssh матимуть проблеми через відмінності в локалі. Це застосовано на сервері, для цього виправлено цю проблему.
Therealstubot

10

Вам потрібно налаштувати локаль належним чином в /etc/default/locale, виходу з системи, входу в систему , а потім запустити звичайні команди

root@host:~# echo -e 'LANG=en_US.UTF-8\nLC_ALL=en_US.UTF-8' > /etc/default/locale
root@host:~# exit
local-user@local:~$ ssh root@host
root@host:~# locale-gen en_US.UTF-8
root@host:~# dpkg-reconfigure locales

4
ці кроки працювали для мене (сервер Ubuntu 14.04). головним моментом було вийти з системи та знову увійти.
ліберборн

9
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_ALL to default locale: No such file or directory

Рішення:

Спробуйте це ( uk_UA.UTF-8 - це моя поточна мова. Напишіть свою мову, наприклад, en_US.UTF-8 !)

sudo locale-gen uk_UA.UTF-8

і це.

sudo dpkg-reconfigure locales

Дякую, що це вирішило мою проблему, зробивши це та перевстановившись.
madprops

8

для мене я виправляю цю помилку під час редагування .bashrc-файлу додати експорт. Додати після первинних коментарів.

Додати мовний супорт.

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

Добрі регіони,


6

Додавання правильних локал ~/.bashrc, ~/.bash_profile, /etc/environmentтощо буде вирішити цю проблему, однак це не рекомендується, так як він перевизначає налаштування з /etc/default/locale, які збивають з толком в кращому випадку може призвести до Локаль не застосовуються послідовно в гіршому випадку.

Натомість слід редагувати /etc/default/localeбезпосередньо, що може виглядати приблизно так:

LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE=en_US

Ця зміна набере чинності наступного разу, коли ви ввійдете в систему. Ви можете отримати новий локал у існуючій оболонці шляхом пошуку /etc/default/localeтаким чином:

$ . /etc/default/locale

1
потрібно перезапустити систему після цього кроку
Ghanshyam Bagul

Ви можете просто прокоментувати потрібну мову у "/etc/locale.gen", а потім запустити:locale-gen
Дейв Еверітт

5

Для всіх, хто підключається до DigitalOcean або якогось іншого постачальника послуг хостингових послуг від iTerm2.app на MacOS High Sierra та отримує цю помилку в деяких командах:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LC_CTYPE = "UTF-8",
    LANG = "en_US.UTF-8"
  are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_US.UTF-8").

Це вирішило для мене проблему:

введіть тут опис зображення

Я знаю, що ця тема стара, але, можливо, хтось знайде цю корисну. Я знаю, наскільки це може бути прикро.


Такий параметр був у iterm2! Дякую!
Брайан Олсен

4

Після прийнятої відповіді:

LANG = C ssh мисливець2.

LC_ALL = C ssh мисливець2

з боку клієнта зробив для мене трюк.


Працював для мене на OSX 10.10.3, тоді як лише "LANG = C" було недостатньо. Дякую Алекс!
Крістіан

4

З zsh ohmyzsh я додав це до .zshrc:

 # You may need to manually set your language environment
 LANGUAGE=en_US.UTF-8
 LANG=en_US.UTF-8
 LC_CTYPE=en_US.UTF-8
 LC_ALL=en_US.UTF-8

Видаляючи лінію export LANG=en_US.UTF-8

Відкрила нову вкладку і SSHed, працювала для мене :)


3

Додати LC_ALL="en_GB.utf8"до /etc/environmentта перезавантажити. Це все.


2

Як завжди, чорт у деталях ...

На Mac OS X v10.7.5 (Lion), щоб виправити помилку Django , ~/.bash_profileя встановив:

export LANG=en_EN.UTF-8
export LC_COLLATE=$LANG
export LC_CTYPE=$LANG
export LC_MESSAGES=$LANG
export LC_MONETARY=$LANG
export LC_NUMERIC=$LANG
export LC_TIME=$LANG
export LC_ALL=$LANG

А в свою чергу я довго отримував це попередження при використанні Perl.

Моє ліжко! Як я зрозумів набагато пізніше, моя система є en_US.UTF-8! Я виправив це, просто переходячи з

export LANG=en_EN.UTF-8

до

export LANG=en_US.UTF-8


2

Усі попередні відповіді неправильні. Повідомлення зрозуміле - локаль відсутній. Рішення полягає в тому, щоб додати відповідну локаль. Виконайте це, відредагувавши файл /etc/locale.gen, видаліть знак # перед місцевістю, про яку повідомляється як про відсутнім, та видавши команду:

$ sudo locale-gen

Це фактично генерує локалі, вказані в /etc/locale.gen, і тому повідомлення не відображатиметься.


Це просто відповідь і працював на стародавньому Debian (6) для мене. Всі решта надмірно складні і трохи позашляхові.
Дейв Еверітт

2

у моєму випадку з debian8.6 мені довелося змінити налаштування у:

/etc/ssh/ssh_config для #AcceptEnv LANG LC_*

і sshd_configдля#SendEnv LANG LC_*

потім перезапустіть службу ssh.

нарешті, зробив

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


2

Додайте відсутні файли у .bash_profile

echo "export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8">>~/.bash_profile

Потім джерело вашого .bash_profile

source ~/.bash_profile

1

У моєму випадку це був результат:

LANGUAGE = (unset),
LC_ALL = (unset),
LC_PAPER = "ro_RO.UTF-8",
LC_ADDRESS = "ro_RO.UTF-8",
....

Рішення було:

sudo locale-gen ro_RO.UTF-8

1

sshза замовчуванням перезаписує змінні локалі LC. Дивіться /etc/ssh/sshd_config:

AcceptEnv LANG LC_*

Тому, можливо, вам потрібно встановити ці змінні у вашій локальній оболонці.


1

Для мене на Ubuntu 16.04 (Xenial Xerus) працювало наступне:

root@host:~#locale-gen en_GB.UTF-8
root@host:~#localectl set-locale LANG=en_GB.UTF-8,LC_ALL=en_GB.UTF-8

Потім перезавантажте ...

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