Jak naprawić problem z lokalizacją?

506

Otrzymuję ten komunikat za każdym razem, gdy robię coś takiego, jak uruchomienie lub zatrzymanie usługi.

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   

Jak naprawić ten błąd?

HackToHell
źródło
Łatwa i trwała poprawka dla wszystkich użytkowników: askubuntu.com/questions/881742/…
Galvani

Odpowiedzi:

513

Najpierw uruchom, localeaby wyświetlić listę ustawień regionalnych aktualnie zdefiniowanych dla bieżącego konta użytkownika:

$ 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=

Następnie wygeneruj brakujące ustawienia narodowe i ponownie skonfiguruj ustawienia regionalne, aby zwrócić uwagę:

$ 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.

Teraz nie zobaczysz już żadnych błędów!

Otto Kekäläinen
źródło
220
nie działało dla mnie
Umair,
4
To działało dla mnie na wielu systemach. Czy istnieje sposób na uniknięcie tego problemu w nowo zainstalowanych systemach?
Brylie Christopher Oxley,
13
@UmairAyub może mieć więcej niż jedną nieznaną lokalizację, spróbuj tego: dla y w $ (locale | cut -d '=' -f 2 | sort | uniq); do locale-gen $ y; gotowe To wygeneruje ustawienia regionalne dla każdej twojej definicji
Ivan Buttinoni
3
Wylogowanie i logowanie może pomóc
SMMousavi
4
@Umair W tym problemie istnieje wysokie ryzyko błędu ludzkiego. Twój system jest en_GBdomyślnie skonfigurowany , ale możesz go skonfigurować en_US. Musisz ręcznie komentować en_GBi odkomentować en_USw /etc/locale.gen. Zobacz moją odpowiedź askubuntu.com/a/790373/25388 w sprzęcie Raspberry Pi 3b i systemie Raspbian Jessie.
Léo Léopold Hertz
366

Nic sugerowanego powyżej nie działało w moim przypadku (Ubuntu Server 12.04LTS). To, co w końcu pomogło, to wprowadzenie do pliku /etc/environment:

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

Z jakiegoś powodu tego brakowało. Dane wyjściowe dla ustawień regionalnych i innych poleceń wyglądały tak, jakby zmienne zostały poprawnie zdefiniowane. Innymi słowy, nie bierz za pewnik, że wszystkie podstawowe rzeczy są deklarowane tam, gdzie powinny być zadeklarowane.

Marcin
źródło
115
Tak, nikt inny nie działał oprócz tego, być może z powodu zaktualizowanej wersji. Ale wolę to włożyć /etc/default/locale.
Naveed
27
Zaktualizowano /etc/default/localei więcej ostrzeżeń. Dzięki
ohho,
7
Tak, inni mi nie działali. Ten zrobił. Oto linijka, której użyłem do nienadzorowanej aktualizacji tego. sudo sh -c "echo 'LC_ALL=en_US.UTF-8\nLANG=en_US.UTF-8' >> /etc/environment"
dman
12
@ user163207 Twoje rozwiązanie jest niepoprawne, ponieważ dołącza (zamiast nadpisywania), nie jest zalecanym plikiem i echomusi zostać uruchomione z włączoną interpretacją ucieczek odwrotnego ukośnika. Jest to to samo co twoje, ale z wyżej wymienionym ustalonym:sh -c "echo -e 'LANG=en_US.UTF-8\nLC_ALL=en_US.UTF-8' > /etc/default/locale"
glarrain
13
NIE ZAPOMNIJ WYLOGOWAĆ I PONOWNIE ZALOGOWAĆ!
SMMousavi
149

Powinny zniknąć po wydaniu:

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

dpkg-reconfigurerekonfiguruje pakiety po ich zainstalowaniu. Przekaż nazwy pakietów lub pakietów do rekonfiguracji. Zadaje pytania konfiguracyjne, podobnie jak w przypadku pierwszej instalacji pakietu.

Rinzwind
źródło
9
Cieszę się, że moje problemy rok temu pomogły ci to naprawić;)
Rinzwind
1
Czy te ustawienia narodowe nie powinny być generowane domyślnie? To znaczy en, en_AU, en_CA, en_GBobecne są domyślnie ale nie en_US?
Daniel Serodio
@Rinzwind Dziękuję bardzo za twój wysiłek! Naprawdę przepraszam; Powinienem był lepiej sformułować moje pytanie. Chciałem zapytać: dlaczego konieczna jest ponowna konfiguracja pakietu ustawień narodowych po wygenerowaniu nowych ustawień narodowych? Wydaje mi się, że lokalizacje działają nawet bez nich dpkg-reconfigure.
Victor
Używanie Ubuntu 14.04 w kontenerze Docker, więc nic nie było ustawione. Django makemessagepotrzebuje tego. To działało idealnie! dzięki.
Justin
1
Zdaję sobie sprawę, że raspbian jest tutaj poza zasięgiem, ale pomyślałem, że wspomnę, że muszę się wylogować i zalogować, zanim LC_ALLzostanie poprawnie ustawiony.
MatrixManAtYrService
119

Po prostu dodaj następujące elementy do swojego .bashrcpliku (zakładając, że używasz bash)

export LC_ALL="en_US.UTF-8"
ratz
źródło
2
Ta słodka poprawka działała dla mnie na moim obrazie Amazon-EC2 (działał ich domyślny RHEL AMI) Dziękuję bardzo! :)
gideon
Ten działał dla mnie z obrazem Ubuntu 12.04 mojego digitalocean.
Inan
2
to naprawiło mój problem. Muszę zadać pytanie: dlaczego LC_ALL nie zostało ustawione przez polecenie locale-gen, jak inne odpowiedzi powiedziały powyżej?
alexserver
Dziwne, wszystkie powyższe rozwiązania nie działały dla mnie, ale to zadziałało! Po wyeksportowaniu LC_ALLmogłem w końcu użyć sudo dpkg-reconfigure locales.
sobi3ch
w końcu po wypróbowaniu wielu trików, to działa dla mnie na kubuntu 14.04.3 lts. dzięki!
Jonasz
94

Jest to częsty problem, jeśli łączysz się zdalnie, więc rozwiązaniem jest nie przekazywanie ustawień regionalnych. Edytuj /etc/ssh/ssh_configi komentuj SendEnv LANG LC_*linię.

użytkownik249697
źródło
6
Próbowałem innych odpowiedzi, ale zapomniałem, że łączyłem się zdalnie, dopóki nie zobaczyłem twojej odpowiedzi. Przyczyną problemu były różne lokalizacje na serwerze ssh i kliencie.
Hieu
2
W OSX (połączenie z ubuntu) jest to/etc/ssh_config
Michiel de Mare
One-liner, aby to zrobić: sed -e '/SendEnv/ s/^#*/#/' -i /etc/ssh/ssh_config(przydatne do udostępniania serwerów)
Albin
Nie mogłem ustawić LC_ALL na maszynie lokalnej, ale to naprawiło mój problem ze zdalnym serwerem, dzięki.
Alexander Shlenchack
1
Prawdopodobnie warto zauważyć, że musisz edytować plik na komputerze lokalnym, a nie na pilocie.
Clashsoft,
72

Jest na to polecenie:

sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8

Aktualizuje /etc/default/localesię podanymi wartościami.

sgtpep
źródło
4
To jest legalne! Nie zapomnij wylogować się / ponownie załadować powłoki, bo inaczej nie zobaczysz zmian. Nie zapomnij sprawdzić zatwierdzonej odpowiedzi dotyczącej generowania i rekonfiguracji ustawień narodowych.
Erik Zivkovic
1
Uruchomienie localenadal nie pokazuje żadnych wartości utf.
Cerin,
@Cerin: Myybe, brak połączenia locale-gen. Wcześniej trzeba to zrobić apt-get install locales.
koppor
1
Nie zmieni to LANG dla powłoki root na Ubuntu 16.04, ponieważ jest on zastąpiony w /root/.profile.
Willem
32

To, co zadziałało dla mnie 12.10, to:

apt-get install language-pack-en-base  

Po tym dpkg-reconfigure localesnie uzyskano żadnych wyników.

George Answerology
źródło
2
To najlepsza odpowiedź. Nie chodzi o to, że moje ustawienia regionalne były niepoprawnie skonfigurowane, ale tak naprawdę nie istniały. Myślę, że jest to również podobne do problemu OP („Brak takiego pliku lub katalogu” jest całkiem jasne, jeśli ustawienia regionalne prawidłowe!).
Przełom
1
Za każdym razem, gdy korzystałem z apt-get na Ubuntu 12.04, otrzymywałem problem z OP. To rozwiązało to doskonale bez konieczności edytowania jakichkolwiek plików.
Zależny
„language-pack-en-base jest już najnowszą wersją”.
karlingen,
Wylogowanie i logowanie może pomóc
SMMousavi
Pracowałem dla mnie w Ubuntu chrootpod Debianem. Dzięki :)
Wyatt8740,
18

Nie zapomnij wyjść z sesji SSH (lub X11), wychodząc i logując się ponownie. Wszystkie te sugestie nie działały dla mnie, chyba że zalogowałem się ponownie ....

Michael R. Hines
źródło
2
Ten komentarz powinien zyskać więcej głosów pozytywnych lub przynajmniej fakt powinien zostać podkreślony w każdej odpowiedzi.
ni8mr,
11

W przypadku Ubuntu 12.10 żadne z powyższych nie działało, z wyjątkiem rozwiązania ratzs. Zalecam dodanie tego do pliku /etc/bash.bashrc:

export LC_ALL="en_ZA.UTF-8"
export LC_CTYPE="en_ZA.UTF-8"
Lovemore Nalube
źródło
Ze wszystkich powyższych rozwiązań. Tylko to działało dla mnie.
JohnnyQ
11

Utknąłem w dziwnym stanie, w którym ustawiona jest moja lokalna maszyna, eswięc maszyna zdalna (via vagrant) została uruchomiona w stanie nieobsługiwanym. Dlatego musiałem korzystać z instrukcji export=tylko po to, by ułatwić sobie sukces dpkg-reconfigure. System jest w porządku.

export LC_ALL="en_US.UTF-8"
sudo dpkg-reconfigure locales
Charney Kaye
źródło
Najlepsza! Ze względu na dpkg-recofigurewyświetlacze mojibake.
Orient
9

Napisałem skrypt bash, aby rozwiązać powyższy problem. Powyższe odpowiedzi są przydatne, ale ustawienie zmiennych regionalnych przez proste wyeksportowanie wartości w zmiennej powłoki będzie działać tylko dla sesji. Rozwiązałem ten problem na stałe, eksportując zmienne regionalne w pliku .bash_profile. Możesz także użyć /etc/profilepliku zamiast .bash_profile.

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

Nie zapomnij i wykonaj skrypt w łatwej konfiguracji.source.bash_profile

Ajeet Khan
źródło
8

Możesz spróbować:

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

gdzie ru_RUjest twój kod kraju

Koss
źródło
7

Bieżąca zaakceptowana odpowiedź nie jest wystarczająca w strategii rozwiązywania problemów, ponieważ możesz popełnić błąd ludzki. Ty konfiguracji systemu do en_USale masz en_GBwłączony /etc/locale.genjak miałem w wątku tutaj na Raspberry Pi 3b. Powinieneś mieć włączone wszystkie używane ustawienia narodowe w /etc/locale.gen.

Włączyłem en_GB.UTF-8 UTF-8tylko /etc/locale.gen. Powinienem mieć tam włączone tylko z en_US.UTF-8 UTF-8powodu uruchomienia innych poleceń. Skomentowałem więc GB i niekomentowane USA i wszystko działa teraz

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

Teraz nie dostaję tych błędów ustawień regionalnych przy żadnych poleceniach.

System: Raspbian Jessie
Sprzęt: Raspberry Pi 3b

Léo Léopold Hertz 준영
źródło
6

Jak powiedziano tutaj na Wiki Debiana , możesz edytować /etc/locale.geni dodawać wszystkie ustawienia narodowe (lub cofnąć komentarz, miałem listę wszystkich ustawień narodowych, ale wszystkie oprócz tego, którego użyłem jako komentarza), dla których chcesz mieć wsparcie w swoim systemie. Następnie wykonaj

sudo dpkg-reconfigure locales

zaktualizować ustawienia regionalne w systemie. Teraz wszystkie ustawienia regionalne, które dodałeś / odkomentowałeś, /etc/locale.gensą dostępne w twoim systemie bez ostrzeżeń.

msrd0
źródło
3

Jeśli korzystasz ze środowiska KDE, sprawdź setlocale.shplik w ~/.kde/env/:

$ cat ~/.kde/env/setlocale.sh 
export LANG=en_US.UTF-8
export LANGUAGE=en_US:ru:en
MaximKostrikin
źródło
to uratowało mi tyłek .... dziękuję! Niewiarygodne, w ilu miejscach ustawia się te badziewie ... i jak na świecie KDE potrafi popsuć różne rzeczy, mieszając moje dwa różne ustawienia narodowe (is_IS dla lokalizacji, pieniędzy itp. I en_EN dla języka w nieistniejącym is_EN widownia)! Grmpfh.
StFS
2
  1. Może być konieczne uruchomienie sudo dpkg-reconfigureaplikacji zainstalowanej, gdy ustawienia „regionalne” są nieprawidłowe / niezgodne.

    Podczas gdy ustawienia regionalne systemu były nieprawidłowo skonfigurowane, zainstalowałem vim. Później, gdy poprawiono ustawienia narodowe systemu, zobaczyłem sytuację, w vimktórej znaki utf-8 były wyświetlane niepoprawnie jako dziwne symbole nanoi lessbyły wyświetlane poprawnie. Bieganie

    sudo dpkg-reconfigure vim
    

    wydawało się, aby rozwiązać problem po naprawieniu ustawień systemu.

  2. Zauważyłem również to samo, co już wspomniano: może być konieczne rozłączenie / ponowne połączenie SSH, aby zmiany były widoczne.

ajaaskel
źródło
2

Dodanie następującego tekstu do ~/.profilemnie działa:

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

Używam 64-bitowego serwera Ubuntu 16.04 LTS na Linode.

Jingguo Yao
źródło
2

To działało dla mnie, gdy miałem ten sam problem (w oparciu o rozwiązanie dostarczone przez dman ):

sudo sh -c "echo -e 'LC_ALL=en_US.UTF-8\nLANG=en_US.UTF-8' >> /etc/environment"
pythonhunter
źródło
Nie byłem pewien, jak dodać adres URL do komentarza. @EliahKagan
pythonhunter
1
Żaden problem - data / znacznik czasu obok komentarza to to, co prowadzi do niego bezpośrednio. ... Więc zauważyłem komentarz glarrain (wołanie >zamiast >>) wydaje się odpowiedzią na komentarz dmana . Właściwie nie wiem, która droga jest właściwa, czy najlepsza, ale jeśli masz wgląd w to, możesz rozszerzyć tę odpowiedź o więcej informacji. (Nie musisz jednak.)
Eliah Kagan