Wie behebe ich mein Gebietsschema?

506

Ich erhalte diese Meldung jedes Mal, wenn ich einen Dienst starte oder stoppe.

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   

Wie behebe ich diesen Fehler?

HackToHell
quelle

Antworten:

513

Führen Sie zunächst localedie folgenden Schritte aus, um die aktuell für das aktuelle Benutzerkonto definierten Ländereinstellungen aufzulisten:

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

Generieren Sie dann das fehlende Gebietsschema und konfigurieren Sie die Gebietsschemas neu, um dies zu beachten:

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

Jetzt sehen Sie keine Fehler mehr!

Otto Kekäläinen
quelle
220
hat bei mir nicht funktioniert
Umair
4
Dies hat für mich auf einer Reihe von Systemen funktioniert. Gibt es eine Möglichkeit, dieses Problem auf neu installierten Systemen zu vermeiden?
Brylie Christopher Oxley
13
@UmairAyub Möglicherweise haben Sie mehr als ein unbekanntes Gebietsschema. Versuchen Sie Folgendes: für y in $ (Gebietsschema | cut -d '=' -f 2 | sort | uniq); do locale-gen $ y; done Es wird ein Gebietsschema für jede Definition generiert, die Sie haben
Ivan Buttinoni
3
Logout und Login können helfen
SMMousavi
4
@Umair Bei diesem Problem besteht ein hohes Risiko für menschliches Versagen. Ihr System ist en_GBstandardmäßig auf konfiguriert , aber Sie haben es auf eingerichtet en_US. Sie müssen manuell kommentieren en_GBund Kommentar- en_USin /etc/locale.gen. Siehe meine Antwort askubuntu.com/a/790373/25388 in der Hardware Raspberry Pi 3b und dem System Raspbian Jessie.
Léo Léopold Hertz 준영
366

In meinem Fall hat nichts oben vorgeschlagenes funktioniert (Ubuntu Server 12.04LTS). Was schließlich geholfen hat, war das Ablegen der Datei /etc/environment:

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

Aus irgendeinem Grund fehlte es. Die Ausgaben für das Gebietsschema und andere Befehle schienen so zu sein, als wären die Variablen richtig definiert. Mit anderen Worten, nehmen Sie nicht als selbstverständlich an, dass alle grundlegenden Dinge dort deklariert werden, wo sie deklariert werden sollen.

Marcin
quelle
115
Ja, keine andere funktionierte außer dieser, möglicherweise aufgrund einer aktualisierten Version. Aber ich ziehe es eher vor, dies einzutragen /etc/default/locale.
Naveed
27
Aktualisiert /etc/default/localeund keine Warnungen mehr. Danke
ohho
7
Ja, die anderen haben nicht für mich gearbeitet. Dieser hat es getan. Hier ist der Einzeiler, den ich für die unbeaufsichtigte Aktualisierung verwendet habe. sudo sh -c "echo 'LC_ALL=en_US.UTF-8\nLANG=en_US.UTF-8' >> /etc/environment"
dman
12
@ user163207 Ihre Lösung ist falsch, weil sie angehängt wird (anstatt sie zu überschreiben), nicht die empfohlene Datei ist und echomit aktivierter Interpretation von umgekehrten Schrägstrichen ausgeführt werden muss. Dies ist das gleiche wie bei Ihnen, jedoch mit dem oben genannten Fix:sh -c "echo -e 'LANG=en_US.UTF-8\nLC_ALL=en_US.UTF-8' > /etc/default/locale"
Glarrain
13
VERGESSEN SIE NICHT, SICH EINZULOGGEN UND EINZULOGGEN!
SMMousavi
149

Sie sollten nach der Ausstellung verschwinden:

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

dpkg-reconfigurekonfiguriert Pakete neu, nachdem sie bereits installiert wurden. Übergeben Sie ihm die Namen eines Pakets oder von Paketen, die neu konfiguriert werden sollen. Es werden Konfigurationsfragen gestellt, ähnlich wie bei der Erstinstallation des Pakets.

Rinzwind
quelle
9
Ich bin froh, dass meine Probleme vor einem Jahr Ihnen geholfen haben, dies zu
beheben
1
Sollte dieses Gebietsschema nicht standardmäßig generiert werden? Ich meine en, en_AU, en_CA, en_GBsind standardmäßig vorhanden , aber nicht en_US?
Daniel Serodio
@Rinzwind Vielen Dank für deine Mühe! Ich entschuldige mich; Ich hätte meine Frage besser formulieren sollen. Was ich fragen wollte, ist: Warum muss das locales-Paket nach dem Generieren neuer Gebietsschemas neu konfiguriert werden? Scheint mir, als würden die Locales auch ohne funktionieren dpkg-reconfigure.
Victor
Unter Verwendung von Ubuntu 14.04 wurde in einem Docker-Container nichts festgelegt. Django makemessagebraucht das. Das hat perfekt funktioniert! Vielen Dank.
Justin
1
Mir ist klar, dass Raspbian hier außerhalb des Bereichs liegt, aber ich dachte, ich würde erwähnen, dass ich mich abmelden und einloggen musste, bevor LC_ALLes richtig eingestellt war.
MatrixManAtYrService
119

.bashrcFügen Sie Ihrer Datei einfach Folgendes hinzu (vorausgesetzt, Sie verwenden bash)

export LC_ALL="en_US.UTF-8"
ratz
quelle
2
Dieses süße Update hat für mich auf meinem Amazon-EC2-Image funktioniert (lief standardmäßig mit RHEL AMI). Vielen Dank! :)
Gideon
Dieser funktionierte für mich mit dem Ubuntu 12.04-Image meines Digitaloceans.
Inan
2
das hat mein Problem behoben. Ich muss eine Frage stellen: Warum wurde LC_ALL nicht vom Befehl locale-gen gesetzt, wie andere Antworten oben angegeben haben?
Alexserver
Komisch, alle oben genannten Lösungen haben bei mir nicht funktioniert, aber diese haben es geschafft! Nach dem Export LC_ALLkonnte ich endlich nutzen sudo dpkg-reconfigure locales.
sobi3ch
Nachdem ich eine Menge Tricks ausprobiert habe, ist dies für mich der funktionierende Trick für Kubuntu 14.04.3. Vielen Dank!
Jonah
94

Dies ist ein häufiges Problem, wenn Sie eine Remoteverbindung herstellen. Daher besteht die Lösung darin, Ihr Gebietsschema nicht weiterzuleiten. Zeile bearbeiten /etc/ssh/ssh_configund auskommentieren SendEnv LANG LC_*.

user249697
quelle
6
Ich habe versucht, andere Antworten zu finden, habe aber vergessen, dass ich eine Fernverbindung hergestellt habe, bis ich Ihre Antwort gesehen habe. Verschiedene Gebietsschemas auf dem SSH-Server und dem Client haben das Problem verursacht.
Hieu
2
Unter OSX (Verbindung zu Ubuntu) ist es um/etc/ssh_config
Michiel de Mare
Einzeiler, um dies zu tun: sed -e '/SendEnv/ s/^#*/#/' -i /etc/ssh/ssh_config(nützlich für die Serverbereitstellung)
Albin
Ich konnte LC_ALL nicht auf dem Gebietsschemacomputer festlegen, aber es hat mein Problem mit dem Remote-Server behoben, danke.
Alexander Shlenchack
1
Wahrscheinlich ist es erwähnenswert, dass Sie die Datei auf dem lokalen Computer und nicht auf der Fernbedienung bearbeiten müssen.
Clashsoft
72

Dafür gibt es einen Befehl:

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

Es wird /etc/default/localemit den angegebenen Werten aktualisiert .

sgtpep
quelle
4
Das ist echt! Vergiss nicht, dich abzumelden / deine Shell neu zu laden, sonst wirst du die Änderungen nicht sehen. Vergessen Sie nicht, die genehmigte Antwort zum Generieren und Neukonfigurieren von Gebietsschemas zu lesen.
Erik Zivkovic
1
Beim Ausführen werden localenoch keine utf-Werte angezeigt.
Cerin
@Cerin: Myybe, ein Anruf locale-genfehlt. Vorher muss man machen apt-get install locales.
koppor
1
Hierdurch wird LANG für die Root-Shell unter Ubuntu 16.04 nicht geändert, da es in /root/.profile außer Kraft gesetzt wird.
Willem
32

Was für mich am 12.10 funktioniert hat war:

apt-get install language-pack-en-base  

Damit wurden nachher dpkg-reconfigure localeskeine Ergebnisse erzielt.

George Answerology
quelle
2
Das ist die beste Antwort. Es ist nicht so, dass meine Gebietsschemas falsch eingerichtet wurden, aber sie existierten tatsächlich nicht. Ich denke , das auf das Problem des OP auch ähnlich ist ( „Keine solche Datei oder das Verzeichnis“ ist ziemlich klar , wenn Ihr locale ist richtig gesetzt!).
Durchbruch
1
Ich bekam das OP-Problem immer, wenn ich apt-get unter Ubuntu 12.04 verwendete. Dies löste es perfekt, ohne dass ich irgendwelche Dateien bearbeiten musste.
Deepend
"language-pack-en-base ist bereits die neueste Version."
Karlingen
Logout und Login können helfen
SMMousavi
Arbeitete für mich in einem Ubuntu chrootunter Debian. Danke :)
Wyatt8740
18

Vergessen Sie nicht, Ihre SSH-Sitzung (oder Ihre X11-Sitzung) durch Beenden und erneutes Anmelden zu beenden. Alle diese Vorschläge haben bei mir nur funktioniert, wenn ich mich erneut angemeldet habe.

Michael R. Hines
quelle
2
Dieser Kommentar sollte mehr positive Stimmen erhalten oder zumindest die Tatsache muss in jeder Antwort hervorgehoben werden.
Ni8Mr
11

Für Ubuntu 12.10 funktionierte bis auf Ratzs 'Lösung nichts. Ich empfehle, dies zu Ihrer /etc/bash.bashrc-Datei hinzuzufügen:

export LC_ALL="en_ZA.UTF-8"
export LC_CTYPE="en_ZA.UTF-8"
Lovemore Nalube
quelle
Von allen oben genannten Lösungen. Dies ist das einzige, was bei mir funktioniert hat.
JohnnyQ
11

Ich war in einem seltsamen Zustand festgefahren, in dem mein lokaler Computer auf eingestellt ist, esund daher wurde der Remote-Computer (über vagrant) in einem unbehandelten Zustand bereitgestellt. Daher musste ich das Handbuch export=nur nutzen, um einen erfolgreichen Ablauf zu ermöglichen dpkg-reconfigure. Dann ist das System in Ordnung.

export LC_ALL="en_US.UTF-8"
sudo dpkg-reconfigure locales
Charney Kaye
quelle
Beste! Aufgrund dpkg-recofigurezeigt Mojibake.
Orient
9

Ich habe ein Bash-Skript geschrieben , um dieses Problem zu beheben. Die obigen Antworten sind nützlich, aber das Festlegen der Gebietsschemavariablen durch einfaches Exportieren der Werte in die Shell-Variable funktioniert nur für eine Sitzung. Ich habe dieses Problem dauerhaft gelöst, indem ich die Gebietsschemavariablen in die Datei .bash_profile exportiert habe. Sie können /etc/profileanstelle von auch file verwenden .bash_profile.

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

Vergessen Sie nicht, sourcedie .bash_profileund die folgen Skript in einfache Einrichtung.

Ajeet Khan
quelle
8

Du kannst es versuchen:

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

Wo ru_RUist deine Landesvorwahl?

Koss
quelle
7

Die aktuell akzeptierte Antwort ist in der Problembehandlungsstrategie nicht ausreichend, da ein menschliches Versagen auftreten kann. Sie richten Ihr System so ein, en_USaber Sie haben es en_GBaktiviert, /etc/locale.genwie ich es im Thread hier für Raspberry Pi 3b getan habe. Sie sollten alle verwendeten Gebietsschemas in aktiviert haben /etc/locale.gen.

Ich hatte en_GB.UTF-8 UTF-8nur aktiviert /etc/locale.gen. Ich sollte dort nur en_US.UTF-8 UTF-8wegen anderer dafür ausgeführter Befehle freigeschaltet haben . Also habe ich GB kommentiert und US unkommentiert, und jetzt funktioniert alles

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

Jetzt erhalte ich diese Gebietsschemafehler nicht mit irgendwelchen Befehlen.

System: Raspbian Jessie
Hardware: Raspberry Pi 3b

Léo Léopold Hertz 준영
quelle
6

Wie hier im Debian-Wiki gesagt , können /etc/locale.genSie alle Gebietsschemas bearbeiten und hinzufügen (oder sie auskommentieren, ich hatte eine Liste aller Gebietsschemas, aber aller, die ich als Kommentare verwendet habe), für die Sie Unterstützung auf Ihrem System wünschen. Führen Sie dann aus

sudo dpkg-reconfigure locales

um die Ländereinstellungen auf Ihrem System zu aktualisieren. Jetzt sind alle von Ihnen hinzugefügten / nicht kommentierten Gebietsschemas /etc/locale.genauf Ihrem System ohne Warnungen verfügbar.

msrd0
quelle
3

Wenn Sie eine KDE-Umgebung verwenden, überprüfen Sie die setlocale.shDatei in ~/.kde/env/:

$ cat ~/.kde/env/setlocale.sh 
export LANG=en_US.UTF-8
export LANGUAGE=en_US:ru:en
MaximKostrikin
quelle
das hat meinen arsch gerettet .... danke! Unglaublich, an wie vielen Orten dieses Gebietsschema gesetzt wird ... und wie um alles in der Welt es KDE schafft, Dinge durch Mischen meiner zwei verschiedenen Gebietsschemata (is_IS für Ort, Geld usw. und en_EN für Sprache in ein nicht existierendes is_EN) zu vermasseln Gebietsschema)! Grmpfh.
StFS
2
  1. Sie müssen möglicherweise sudo dpkg-reconfigureauch für die Anwendung ausgeführt werden, die Sie installiert haben, während die Einstellungen für "Gebietsschema" ungültig / nicht übereinstimmend waren.

    Während das Systemgebietsschema falsch eingerichtet war, habe ich es installiert vim. Später , als Systemgebietsschema festgelegt wurde , sah ich eine Situation , die vimwährend utf-8 - Zeichen fälschlicherweise als seltsame Symbole zeigte nanound lesssich richtig zeigte. Laufen

    sudo dpkg-reconfigure vim
    

    schien das Problem zu beheben, nachdem die Systemeinstellungen behoben wurden.

  2. Das Gleiche ist mir auch aufgefallen, wie bereits erwähnt: Möglicherweise müssen Sie SSH trennen / erneut verbinden, um die Änderungen sichtbar zu machen.

ajaaskel
quelle
2

Den folgenden Text ~/.profilehinzufügen, um für mich zu arbeiten:

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

Ich benutze Ubuntu 16.04 LTS 64-Bit-Server unter Linode.

Jingguo Yao
quelle
2

Dies funktionierte für mich, als ich das gleiche Problem hatte (basierend auf der von dman bereitgestellten Lösung ):

sudo sh -c "echo -e 'LC_ALL=en_US.UTF-8\nLANG=en_US.UTF-8' >> /etc/environment"
Pythonjäger
quelle
Ich war mir nicht ganz sicher, wie ich die URL zum Kommentar hinzufügen sollte. @EliahKagan
pythonhunter
1
Kein Problem - das Datum / der Zeitstempel neben einem Kommentar verweist direkt darauf. ... Also, ich habe bemerkt, dass der Kommentar von Glarrain (der >statt dessen >>verlangt) wie eine Antwort auf dmans scheint. Ich weiß eigentlich nicht, welcher Weg richtig oder am besten ist, aber wenn Sie einen Einblick haben, können Sie diese Antwort mit weiteren Informationen erweitern. (
Musst