Jak naprawić ostrzeżenie o ustawieniach regionalnych z Perla?


595

Kiedy biegnę perl, pojawia się ostrzeżenie:

perl: ostrzeżenie: Ustawienie regionalne nie powiodło się.
perl: ostrzeżenie: Sprawdź, czy ustawienia regionalne:
    JĘZYK = (rozbrojony),
    LC_ALL = (nieustawiony),
    LANG = „en_US.UTF-8”
są obsługiwane i zainstalowane w twoim systemie.
perl: ostrzeżenie: Powrót do standardowych ustawień regionalnych („C”).

Jak to naprawić?


Co się stało, gdy sprawdziłeś ustawienia regionalne, takie jak komunikat o błędzie?
brian d foy

3
zamiast instalować ustawienia regionalne, możesz także zmienić ustawienia regionalne. Na moim Ubuntu jest to zrobione dla jednego użytkownika przez edycję~/.pam_environment
Janus Troelsen

Na moim ODROID-C1 z systemem Ubuntu problemem był rzeczywiście plik ~ / .pam_environment. Niektóre zmienne to es_US.UTF-8 zamiast en_US.UTF-8. Dziękuję Ci.
f1vefour

Mam to na Cygwin \ Babun. Naprawiła go tylko ponowna instalacja Perla.
Lucas Soares

Odpowiedzi:


449

Twój system operacyjny nie wie o tym en_US.UTF-8.

Nie wspomniałeś o konkretnej platformie, ale mogę odtworzyć Twój problem:

% uname -a
OSF1 hunter2 V5.1 2650 alfa
Wyjście% perl -e
perl: ostrzeżenie: Ustawienie regionalne nie powiodło się.
perl: ostrzeżenie: Sprawdź, czy ustawienia regionalne:
    LC_ALL = (nieustawiony),
    LANG = „en_US.UTF-8”
    są obsługiwane i zainstalowane w twoim systemie.
perl: ostrzeżenie: Powrót do standardowych ustawień regionalnych („C”).

Domyślam się, że użyłeś ssh do połączenia się ze starszym hostem z nowszej maszyny stacjonarnej. Często /etc/ssh/sshd_configzawiera

AcceptEnv LANG LC_*

co pozwala klientom propagować wartości tych zmiennych środowiskowych do nowych sesji.

Ostrzeżenie daje podpowiedź, jak je zmiażdżyć, jeśli nie potrzebujesz pełnych ustawień regionalnych:

% env LANG = C perl -e wyjście
%

lub z bash:

$ LANG = C perl -e wyjście
$ 

Aby uzyskać stałą poprawkę, wybierz jedną z opcji

  1. Na starszym hoście ustaw LANGzmienną środowiskową w pliku inicjującym powłokę.
  2. Zmodyfikuj swoje środowisko po stronie klienta, np. Zamiast ssh hunter2używać polecenia LANG=C ssh hunter2.
  3. Jeśli masz uprawnienia administratora, powstrzymaj ssh przed wysyłaniem zmiennych środowiskowych, komentując SendEnv LANG LC_*wiersz w pliku lokalnym /etc/ssh/ssh_config . (Dzięki tej odpowiedzi . Zobacz Bug 1285 dla OpenSSH, aby uzyskać więcej.)

22
Dzięki! Miałem ten komunikat o błędzie podczas łączenia się z git na mój serwer. Po dodaniu de_CH.UTF-8 (nie był tam obsługiwany, ale używany lokalnie) z dpkg-reconfigure localeskomunikatem zniknął.
Simon A. Eugster,

82
Miałem ten problem od wieków ... usunięcie „AcceptEnv LANG LC_ *” z sshd_config w końcu go rozwiązało. Dzięki za podpowiedź!
madc

2
@Greg Bacon, czy nie byłoby też przypadków, w których chciałbyś ustawić zmienne środowiskowe w całym systemie, na przykład poprzez utworzenie pliku środowiska / etc /? help.ubuntu.com/community/…
fraxture

25
@HermannIngjaldsson, przynajmniej na Ubuntu (12.10), nie było potrzeby restartowania serwera (po usunięciu „AcceptEnv LANG LC_ *”). Właśnie przeładowałem ssh config:, service ssh reloadco zajmuje ułamek sekundy i nawet nie powoduje zakończenia bieżącej sesji ssh.
noamtm

3
dołącz „eksport LC_ALL = C”, a następnie „source ~ / .bashrc” w systemie klienta, aby rozwiązać problem.
EffectiveMatrix

476

Oto jak rozwiązać ten problem w systemie Mac OS Lion (10.7) lub Cygwin (Windows 10):

Dodaj następujące wiersze do pliku bashrc lub bash_profile na komputerze hosta:

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

Jeśli używasz zsh, edytuj zshrc:

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

6
Dzięki, szukałem rozwiązania tego problemu przez długi czas i zawsze myślałem, że jest to problem w mojej konfiguracji serwera Ubuntu, i wydawało się, że nie było rozwiązania, które pomogło (wszystkie te rzeczy związane z rekonfiguracją dkpg (
Teemu Kurppa

5
Ponieważ LC_ALLzastępuje wszystkie inne zmienne, wolałbym ustawić LANG=de_AT.UTF-8i indywidualne zmienne jak LC_MESSAGES=en_US.UTF-8. Jeśli zmienna nie jest ustawiona, wraca do LANG. Możesz także np. unset LC_CTYPEaby zmusić go do powrotu LANG.
David

4
Umieszczenie tych linii w .bashrc nie działało, ale bash_profile rozwiązało to! Musiałem utworzyć plik.
Hermann Ingjaldsson

5
Umieszczenie tych linii w ~/.bashrcrozwiązaniu go dla mnie ... to trzeba przeładować za pomocą source ~/.bashrc... Thnks <3
Enissay

5
Dzięki, działało to dobrze na ZSH i wtyczce oh-my-zsh pod Mac OS X El Capitan, na dole ~ / .zshrc: LC_CTYPE = en_US.UTF-8 LC_ALL = en_US.UTF-8
Valerio Schiavoni

207

Jeśli tworzysz rootfs za pomocą debootstrap, musisz wygenerować ustawienia narodowe. Możesz to zrobić, uruchamiając:

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

# then regenerate
sudo locale-gen

Ta wskazówka pochodzi z https://help.ubuntu.com/community/Xen


28
To jest dla mnie prawdziwa poprawka.
Afriza N. Arief

5
locale-gen nie przyjmuje żadnych argumentów (przynajmniej w stabilnej wersji Debiana). Zamiast tego edytuj plik /etc/locale.gen, aby odkomentować wybrane ustawienia narodowe, a następnie uruchom sudo locale-gen
Sam Watkins

2
naprawionoUbuntu Server
Paschalis

5
W Debianie może być konieczne $ echo en_US UTF-8 >> /etc/locale.gennajpierw.
akhmed

1
Na Gentoo (przynajmniej) locale-gennie przyjmuje argumentów. Czyta z /etc/locale.gen.
Pistos

142

Posługiwać się:

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

Działa dla Debiana . Nie wiem dlaczego - ale gen locale nie przyniósł rezultatów.

Ważny! To rozwiązanie tymczasowe. Musi być uruchamiany dla każdej sesji.


13
Ten działał dla mnie. Właśnie włożyłem to do mojego .bashrcpliku.
Anirudh Ramanathan

2
Pracowałem też dla mnie. Musiałem tylko ustawić dwa ustawienia (LANGUAGE i LC_ALL), które pojawiły się nieustawione w ostrzeżeniach Perla
laurent

2
W systemie Debian local-genprzetwarza tylko te ustawienia narodowe, w których nie ma komentarza /etc/local.gen. Być może musisz to zrobić echo en_US UTF-8 >> /etc/locale.gennajpierw.
akhmed

działało to dla mnie na elementarnym systemie operacyjnym Freaya (opartym na Ubuntu)
valkirilov

1
LC_ C TYP może być?
mixel

139

Ogólnie oznacza to, że nie skonfigurowałeś poprawnie ustawień narodowych na swoim Linux-ie.

W systemie Debian lub Ubuntu oznacza to, że musisz to zrobić

$ sudo locale-gen
$ sudo dpkg-rekonfiguruj ustawienia regionalne

Zobacz także gen locale-człowieka .


30
nie rozwiązuje tutaj problemu
Somatik

6
dpkg-rekonfiguruj ustawienia narodowe - naprawiłem problem dla mnie, debian 7.1
newUserNameHere

4
dpkg-rekonfiguracja ustawień narodowych kończy się niepowodzeniem z tymi samymi komunikatami o błędach ustawień regionalnych języka perl, które próbuje się naprawić w pierwszej kolejności !!!!
matteo

10
Działa to dla mnie w Ubuntu 14.04, chociaż najpierw musiałem dodać brakujące ustawienia narodowe zsudo locale-gen es_UY.UTF-8
alf

2
@matteo Tylko za pierwszym razem, zanim naprawi błąd. Spróbuj ponownie i powinno to zostać naprawione.
Zero3,

91

Tylko dla użytkowników macOS i Mac OS X.

Otrzymywałem to samo ostrzeżenie podczas korzystania z Git

Aby rozwiązać to ostrzeżenie Odznacz z Set locale environment variable on startupopcji i ponownym uruchomieniu terminala. Poniższy zrzut ekranu przedstawia moje ustawienia terminala.

wprowadź opis zdjęcia tutaj


3
Wow, takie proste i naprawiło moje problemy! Dzięki!
Michał

3
Próbowałem wszystkich innych, ale ten zrobił to dla mnie. Używam iTerm i ma tę samą opcję kodowania znaków.
Michael Morrison,

2
Niestety łamie to ZSH (tabulacja przestała działać)
Christian

1
To całkowicie rozwiązuje problem w systemie Mac OS. Nawiasem mówiąc, to zaczęło mi się dziać zaraz po aktualizacji do macOS Sierra. To rozwiązało dla mnie ten problem.
Paulo Malvar,

1
to naprawiło mój problem. zaczęło mi się to dziać po aktualizacji do Mac OS X High Sierra od Sierra.
Lucian Irimie

36

Jest to prosta poprawka w Ubuntu. Musisz wygenerować ustawienia regionalne od zera, uruchamiając następujące polecenia z wiersza poleceń:

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

To powinno utworzyć ustawienia narodowe, a następnie je ponownie skonfigurować.


Działa to dobrze nawet przy użyciu pt_BR pt_BR.UTF-8- Dzięki.
Marcos Freitas

29

Dodanie następujących elementów, aby /etc/environmentnaprawić problem dla mnie w Debianie i Ubuntu (oczywiście zmodyfikuj, aby dopasować do ustawień regionalnych, których chcesz użyć):

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

7
.. Dostałem ostrzeżenie, że ustawienie locale w /etc/environmentjest nieaktualne i powinno być ustawione /etc/default/locale. Oba wydają się na razie działać.
joscarsson

powinno byćLC_CTYPE
aexl

25

Teraz używam tego:

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

Następnie wyloguj się z sesji SSH i zaloguj się ponownie.

Stara odpowiedź:

Tylko to pomogło mi:

$ 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

Bardzo mi to działało na Ubuntu 15.04, wielkie dzięki.
Goke Obasa,

22

na Debianie po wielu poszukiwaniach udało się.

pierwszy:

sudo apt-get purge locales

następnie:

sudo aptitude install locales

i słynny:

sudo dpkg-reconfigure locales

Spowoduje to usunięcie systemu ustawień regionalnych, a następnie ponowne zainstalowanie ustawień regionalnych i obniżenie poziomu libc6 z 2.19 do 2.13, co jest problemem. Następnie ponownie konfiguruje ustawienia narodowe.


4
dpkg-reconfigure localesjest wszystkim, czego potrzeba. sudojeśli jesteś typem sudo lub zrób to jako root. Następnie wybierz ustawienia regionalne zgodnie z tym, co masz w środowisku powłoki.
mknaf

6
dpkg-rekonfiguruj ustawienia regionalne POWINNY być wszystkim, czego potrzeba. Po wypróbowaniu tego 100 razy i rozejrzeniu się po Internecie i to wszystko, co widziałeś, a problem nadal nie rozwiąże się sam, wypróbuj powyższe. Potem wróć i głosuj za tym. :)
tkjef

1
wreszcie odpowiedź na ten problem bez hackowania, zdecydowanie powinna być zaakceptowana!
php_nub_qq

17

To jest szybka odpowiedź. Ustawimy ustawienia narodowe, które nie zostaną rozbrojone po ponownym uruchomieniu. Najpierw otwórz plik bash i edytuj go:

nano .bashrc

dodaj te linie do pliku:

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

aktywuj zmianę poprzez przeładowanie bash:

source ~/.bashrc

Wyniki testów :

locale

Jedyny, który dla mnie działa, Raspbian i serwer Ubuntu 16.04 :)
Liso

13

W przypadku Ubuntu użyj tego,

#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

Pracował dla mnie.


Działa to również dla mnie, usuwając całą zawartość pliku /etc/default/localei umieszczając tylko definicję zmiennych (usuwając eksport słów) i ponownie uruchamiając serwer
Edenshaw

12

Jeśli używasz systemu Mac OS X 10.10 (Yosemite) lub nowszego do łączenia się z serwerem Linux, możesz spróbować wykonać następujące czynności.

  1. Zachowaj oryginalny plik / etc / ssh / sshd-config

  2. Umieść swój ~ / .bash_profile

    export LANG="en_US"
    export LC_ALL=$LANG.UTF-8
  3. Biegać

    dpkg-reconfigure locales

    I wybierz „en_US.UTF-8”


10
sudo nano /etc/locale.gen

Odkomentuj ustawienia regionalne, których chcesz używać (np en_US.UTF-8 UTF-8 ):

Następnie uruchomić:

sudo /usr/sbin/locale-gen

Źródło: http://people.debian.org/~schultmc/locales.html


Firma, dla której pracuję w USA, obsługuje serwer git, który ma międzynarodowych klientów. Tłum GB skarżył się, że ich klony git nad ssh będą miały problemy z powodu różnic regionalnych. To zastosowane na serwerze naprawiło dla nich ten problem.
Therealstubot

10

Musisz odpowiednio skonfigurować ustawienia regionalne /etc/default/locale, wylogować się, zalogować , a następnie uruchomić zwykłe polecenia

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
te kroki zadziałały dla mnie (serwer Ubuntu 14.04). głównym celem było wylogowanie i ponowne zalogowanie.
liberborn,

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

Rozwiązanie:

Spróbuj tego ( uk_UA.UTF-8 to moja bieżąca lokalizacja. Napisz swoją lokalizację, na przykład en_US.UTF-8 !)

sudo locale-gen uk_UA.UTF-8

i to.

sudo dpkg-reconfigure locales

Dziękuję, to rozwiązało mój problem, po zrobieniu tego i ponownej instalacji.
madprops

8

dla mnie naprawiam ten błąd podczas edycji eksportu pliku .bashrc. Dodaj po wstępnych komentarzach.

Dodaj obsługę języka.

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

Z poważaniem,


6

Dodanie do prawidłowego ustawienia regionalne ~/.bashrc, ~/.bash_profile, /etc/environmenta jak będzie rozwiązać ten problem, jednak nie jest zalecane, ponieważ zastępuje ustawienia z /etc/default/locale, co jest mylące najlepiej i może prowadzić do lokalizacjach nie są stosowane konsekwentnie w najgorszym.

Zamiast tego należy edytować /etc/default/localebezpośrednio, co może wyglądać mniej więcej tak:

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

Zmiana zacznie obowiązywać przy następnym logowaniu. Możesz uzyskać nowe ustawienia regionalne w istniejącej powłoce, korzystając z następujących źródeł /etc/default/locale:

$ . /etc/default/locale

1
po tym kroku należy ponownie uruchomić system
Ghanshyam Bagul

Możesz po prostu skomentować w wybranej lokalizacji w „/etc/locale.gen”, a następnie uruchomić:locale-gen
Dave Everitt

5

Dla każdego łączącego się z DigitalOcean lub innym dostawcą hostingu w chmurze z iTerm2.app na MacOS High Sierra i otrzymującym ten błąd w przypadku niektórych poleceń:

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").

To rozwiązało problem:

wprowadź opis zdjęcia tutaj

Wiem, że ten wątek jest stary, ale może ktoś uzna to za przydatne. Wiem, jak to może być denerwujące.


Tak, to było to ustawienie w iterm2! Dzięki!
Brian Olsen,

4

Po zaakceptowanej odpowiedzi:

LANG = C ssh hunter2.

LC_ALL = C ssh hunter2

po stronie klienta wykonał dla mnie lewę.


Pracował dla mnie na OSX 10.10.3, podczas gdy tylko „LANG = C” nie wystarczyło. Dzięki Alex!
Christian

4

W przypadku zsh ohmyzsh dodałem to do .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

Usuwając linię export LANG=en_US.UTF-8

Ponownie otworzyłem nową kartę i SSHed, działało dla mnie :)


3

Dodaj LC_ALL="en_GB.utf8"do /etc/environmenti uruchom ponownie. To wszystko.


2

Jak zawsze diabeł tkwi w szczegółach ...

W systemie Mac OS X 10.7.5 (Lion), aby naprawić błąd Django , ~/.bash_profileustawiłem:

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

I z kolei przez długi czas otrzymałem to ostrzeżenie, używając Perla.

Mój błąd! Jak zauważyłem znacznie później, mój system jest en_US.UTF-8! Naprawiłem to po prostu, zmieniając z

export LANG=en_EN.UTF-8

do

export LANG=en_US.UTF-8


2

Wszystkie poprzednie odpowiedzi są błędne. Komunikat jest jasny - brak ustawień regionalnych. Rozwiązaniem jest dodanie odpowiednich ustawień regionalnych. Robisz to, edytując plik /etc/locale.gen, usuń znak # przed ustawieniami narodowymi zgłaszanymi jako brakujące, a następnie wydając polecenie:

$ sudo locale-gen

To faktycznie wygeneruje ustawienia regionalne określone w /etc/locale.gen i dlatego komunikat nie zostanie wyświetlony.


To jest po prostu odpowiedź i pracował nad starożytnym Debianie (6) dla mnie. Cała reszta jest zbyt skomplikowana i trochę nie na tropie.
Dave Everitt

2

w moim przypadku z debian8.6 musiałem zmienić ustawienia w:

/etc/ssh/ssh_config dla #AcceptEnv LANG LC_*

i sshd_config dla#SendEnv LANG LC_*

następnie uruchom ponownie usługę ssh.

w końcu zrobił

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


2

Dodaj brakujące ustawienia narodowe do .bash_profile

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

Następnie zdobądź swój .bash_profile

source ~/.bash_profile

1

W moim przypadku było to wyjście:

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

Rozwiązaniem było:

sudo locale-gen ro_RO.UTF-8

1

sshdomyślnie zastępuje zmienne regionalne LC. Zobacz /etc/ssh/sshd_config:

AcceptEnv LANG LC_*

Może więc musisz ustawić te zmienne w lokalnej powłoce.


1

Dla mnie na Ubuntu 16.04 (Xenial Xerus) działało:

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

Następnie uruchom ponownie ...

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.