Come posso risolvere il mio problema di localizzazione?


506

Ricevo questo messaggio ogni volta che faccio qualcosa come l'avvio o l'arresto di un servizio.

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   

Come posso correggere questo errore?




Risposte:


513

Prima esecuzione localeper elencare le impostazioni locali attualmente definite per l'account utente corrente:

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

Quindi genera le impostazioni locali mancanti e riconfigura le impostazioni locali per renderle note:

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

Ora non vedrai più alcun errore!


220
non ha funzionato per me
Umair

4
Questo ha funzionato per me su diversi sistemi. C'è un modo per evitare questo problema sui sistemi appena installati?
Brylie Christopher Oxley,

13
@UmairAyub potrebbe essere che hai più di una locale sconosciuta, prova questo: per y in $ (locale | cut -d '=' -f 2 | sort | uniq); do locale-gen $ y; done Genererà un locale per ogni definizione che hai
Ivan Buttinoni,

3
La disconnessione e l'accesso possono essere d'aiuto
SMMousavi

4
@Umair Esiste un alto rischio di errore umano in questo problema. Il sistema è configurato per en_GBimpostazione predefinita, ma è stato impostato su en_US. Dovete lasciare un commento, manualmente en_GBe rimuovere il commento en_USin /etc/locale.gen. Vedi la mia risposta askubuntu.com/a/790373/25388 nell'hardware Raspberry Pi 3b e nel sistema Raspbian Jessie.
Léo Léopold Hertz 준영

366

Nulla ha suggerito sopra ha funzionato nel mio caso (Ubuntu Server 12.04LTS). Ciò che alla fine ha aiutato è stato mettere nel file /etc/environment:

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

Per qualche motivo mancava. Gli output per la locale e altri comandi apparivano come se le variabili fossero state definite correttamente. In altre parole, non dare per scontato tutto il materiale di base è dichiarato dove dovrebbe essere dichiarato.


115
Sì, nessun altro ha funzionato tranne questo, forse a causa della versione aggiornata. Preferisco piuttosto inserirlo /etc/default/locale.
Naveed

27
Aggiornato /etc/default/localee non più avvisi. Grazie
ohho, il

7
Sì, gli altri non hanno funzionato per me. Questo ha fatto. Ecco il one-liner che ho usato per l'aggiornamento automatico di questo. sudo sh -c "echo 'LC_ALL=en_US.UTF-8\nLANG=en_US.UTF-8' >> /etc/environment"
Dman il

12
@ user163207 la soluzione non è corretta perché si aggiunge (anziché sovrascrivere), non è il file consigliato e echodeve essere eseguita con l'interpretazione degli escape backslash abilitati. Questo è uguale al tuo ma con il già citato sh -c "echo -e 'LANG=en_US.UTF-8\nLC_ALL=en_US.UTF-8' > /etc/default/locale"
problema

13
NON DIMENTICARE DI REGISTRARE E REGISTRARE DI nuovo!
SMMousavi,

149

Dovrebbero scomparire dopo l'emissione:

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

dpkg-reconfigurericonfigura i pacchetti dopo che sono già stati installati. Passagli i nomi di un pacchetto o pacchetti da riconfigurare. Porrà domande sulla configurazione, proprio come quando il pacchetto è stato installato per la prima volta.


9
Sono contento che i miei problemi un anno fa ti abbiano aiutato a risolvere il problema;)
Rinzwind,

1
Questo locale non dovrebbe essere generato per impostazione predefinita? Voglio dire en, en_AU, en_CA, en_GBsono presenti di default, ma non en_US?
Daniel Serodio,

@Rinzwind Grazie mille per il tuo impegno! Mi scuso; Avrei dovuto formulare meglio la mia domanda. Quello che intendevo chiedere è: perché è necessario riconfigurare il pacchetto locales dopo aver generato nuove locales? Mi sembra che i locali funzionino anche senza dpkg-reconfigure.
Victor,

Usando Ubuntu 14.04, in un contenitore Docker, quindi non veniva impostato nulla. Django ha makemessagebisogno di questo. Questo ha funzionato perfettamente! Grazie.
Giustino,

1
Mi rendo conto che qui raspbian non rientra nell'ambito di applicazione, ma ho pensato di menzionare che dovevo disconnettermi e accedere prima che LC_ALLfosse impostato correttamente.
MatrixManAtYrService

119

Aggiungi semplicemente quanto segue al tuo .bashrcfile (supponendo che stai usando bash)

export LC_ALL="en_US.UTF-8"

2
Questa dolce correzione ha funzionato per me sulla mia immagine Amazon-EC2 (era in esecuzione la loro AMI RHEL predefinita) Grazie mille! :)
Gideon,

Questo ha funzionato per me con l'immagine Ubuntu 12.04 del mio digitalocean.
Inan,

2
questo risolto il mio problema. Devo porre una domanda: come mai LC_ALL non è stato impostato dal comando locale-gen come altre risposte hanno detto sopra questo?
alexserver,

Strano, tutta la soluzione sopra non ha funzionato per me, ma questa ha funzionato! Dopo l'esportazione LC_ALLho potuto finalmente usare sudo dpkg-reconfigure locales.
sobi3ch,

finalmente dopo aver provato molti trucchi, questo è quello che funziona per me su Kubuntu 14.04.3 lts. Grazie!
Giona

94

Questo è un problema comune se ci si connette in remoto, quindi la soluzione è non inoltrare le impostazioni internazionali. Modifica /etc/ssh/ssh_confige commenta la SendEnv LANG LC_*linea.


6
Stavo cercando altre risposte, ma ho dimenticato di collegarmi in remoto fino a quando ho visto la tua risposta. Il problema era causato da diverse versioni locali sul server e sul client ssh.
Hieu,

2
Su OSX (connettendosi a Ubuntu) è su/etc/ssh_config
Michiel de Mare il

One-liner per fare questo: sed -e '/SendEnv/ s/^#*/#/' -i /etc/ssh/ssh_config(utile per il provisioning del server)
Albin

Non sono riuscito a impostare LC_ALL sulla macchina locale ma ha risolto il mio problema con il server remoto, grazie.
Alexander Shlenchack,

1
Probabilmente vale la pena notare che è necessario modificare il file sul computer locale e non sul telecomando.
Clashsoft,

72

C'è un comando per quello:

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

Si aggiorna /etc/default/localecon i valori forniti.


4
Questo è legittimo! Non dimenticare di uscire / ricaricare la shell, altrimenti non vedrai le modifiche. Non dimenticare di controllare la risposta approvata per la generazione e la riconfigurazione dei locali.
Erik Zivkovic,

1
L'esecuzione localecontinua non mostra alcun valore utf.
Cerin,

@Cerin: Myybe, manca una chiamata a locale-gen. Prima bisogna fare apt-get install locales.
Koppor,

1
Questo non cambierà LANG per la shell di root su Ubuntu 16.04, dato che viene sovrascritto in /root/.profile.
Willem,

32

Ciò che ha funzionato per me il 12.10 è stato questo:

apt-get install language-pack-en-base  

Questo dopo dpkg-reconfigure localesnon ha prodotto risultati.


2
Questa è la risposta migliore Non è che le mie impostazioni locali siano state configurate in modo errato, ma in realtà non esistevano. Penso che questo sia simile anche al problema dell'OP ("Nessun file o directory di questo tipo" è abbastanza chiaro se le impostazioni internazionali sono corrette!).
Breakthrough

1
Stavo ricevendo il problema dei PO ogni volta che stavo usando apt-get su Ubuntu 12.04 Ciò ha risolto perfettamente senza dover modificare alcun file.
Approfondisci il

"language-pack-en-base è già la versione più recente."
karlingen,

La disconnessione e l'accesso possono essere d'aiuto
SMMousavi

Ha funzionato per me in Ubuntu chrootsotto debian. Grazie :)
Wyatt8740,

18

Non dimenticare di uscire dalla sessione SSH (o X11) uscendo e riconnettendosi. Tutti questi suggerimenti non hanno funzionato per me a meno che non abbia effettuato nuovamente l'accesso ....


2
Questo commento dovrebbe ottenere più voti o almeno il fatto deve essere evidenziato in ogni risposta.
ni8mr

11

Per Ubuntu 12.10 nessuno dei precedenti ha funzionato tranne la soluzione di Ratzs. Consiglio di aggiungere questo al tuo file /etc/bash.bashrc:

export LC_ALL="en_ZA.UTF-8"
export LC_CTYPE="en_ZA.UTF-8"

Di tutte le soluzioni sopra. Questo è l'unico che ha funzionato per me.
JohnnyQ,

11

Ero bloccato in uno stato strano in cui è impostata la mia macchina locale ese quindi la macchina remota (via vagrant) era stata fornita in uno stato non gestito. Pertanto, ho dovuto usare il manuale export=solo per facilitare un successo dpkg-reconfigure. Quindi il sistema va bene.

export LC_ALL="en_US.UTF-8"
sudo dpkg-reconfigure locales

Migliore! A causa di dpkg-recofiguredisplay mojibake.
Orienta il

9

Ho scritto uno script bash per risolvere il problema sopra. Le risposte sopra sono utili ma l'impostazione delle variabili locali semplicemente esportando i valori nella variabile shell funzionerà solo per una sessione. Ho risolto definitivamente questo problema esportando le variabili locali nel file .bash_profile. Puoi anche usare /etc/profilefile invece di .bash_profile.

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

Non dimenticate di sourcela .bash_profilee seguire la sceneggiatura in una facile configurazione.


8

Puoi provare:

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

dov'è il ru_RUtuo prefisso internazionale.


7

La risposta attualmente accettata non è sufficiente nella strategia di risoluzione dei problemi perché è possibile che si verifichi un errore umano. Hai configurato il tuo sistema en_USma hai en_GBabilitato /etc/locale.gencome nel thread qui per Raspberry Pi 3b. Dovresti avere tutte le tue localizzazioni usate abilitate in /etc/locale.gen.

Avevo en_GB.UTF-8 UTF-8abilitato solo in /etc/locale.gen. Avrei dovuto abilitarlo solo a en_US.UTF-8 UTF-8causa di altri comandi eseguiti per questo. Così ho commentato GB e gli Stati Uniti senza commento, e ora tutto funziona

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

Ora, non ricevo quegli errori di localizzazione con nessun comando.

Sistema: Raspbian Jessie
Hardware: Raspberry Pi 3b


6

Come detto qui nel Debian Wiki , puoi modificare /etc/locale.gene aggiungere tutte le localizzazioni (o rimuoverle, avevo un elenco di tutte le localizzazioni ma tutte tranne quella che ho usato come commenti) per cui desideri avere supporto sul tuo sistema. Quindi, esegui

sudo dpkg-reconfigure locales

per aggiornare le impostazioni locali sul tuo sistema. Ora, tutte le impostazioni locali aggiunte / decommentate /etc/locale.gensono disponibili sul sistema senza alcun avviso.


3

Se usi l'ambiente KDE, controlla il setlocale.shfile in ~/.kde/env/:

$ cat ~/.kde/env/setlocale.sh 
export LANG=en_US.UTF-8
export LANGUAGE=en_US:ru:en

questo mi ha salvato il culo .... grazie! Incredibile il numero di posti in cui si sta sistemando questa schifezza locale ... e in che modo KDE riesce a rovinare le cose mescolando i miei due diversi locali (is_IS per posizione, denaro, ecc. Ed en_EN per lingua in un inesistente is_EN locale)! Grmpfh.
StFS,

2
  1. Potrebbe essere necessario eseguire sudo dpkg-reconfigureanche per l'applicazione installata mentre le impostazioni di "locale" sono state non valide / non corrispondenti.

    Mentre la localizzazione del sistema è stata configurata in modo errato, ho installato vim. Più tardi, quando il sistema locale è stato fissato ho visto una situazione che vimstava mostrando caratteri UTF-8 in modo errato come strani simboli, mentre nanoe lesssono stati mostrando loro in modo corretto. In esecuzione

    sudo dpkg-reconfigure vim
    

    sembrava risolvere il problema dopo aver corretto le impostazioni di sistema.

  2. Ho anche notato la stessa cosa già menzionata: potrebbe essere necessario disconnettere / riconnettere SSH per rendere visibili le modifiche.


2

Aggiungendo il seguente testo ~/.profileper me funziona:

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

Sto usando Ubuntu 16.04 LTS server a 64 bit su Linode.


2

Questo ha funzionato per me quando ho avuto lo stesso problema (basato sulla soluzione fornita da dman ):

sudo sh -c "echo -e 'LC_ALL=en_US.UTF-8\nLANG=en_US.UTF-8' >> /etc/environment"

Non ero abbastanza sicuro di come aggiungere l'URL al commento. @EliahKagan
pythonhunter il

1
Nessun problema: la data / il timestamp accanto a un commento è ciò che lo collega direttamente. ... Quindi, ho notato che il commento di Glarrain (chiedendo >invece di >>) sembra una risposta a Dman. In realtà non so quale sia la strada giusta o migliore, ma se hai qualche idea in merito potresti espandere questa risposta con ulteriori informazioni. (Non è necessario però.)
Eliah Kagan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.