Come risolvere un avviso di impostazione locale da Perl?


596

Quando corro perl, ricevo l'avvertimento:

perl: avviso: impostazione delle impostazioni locali non riuscita.
perl: avviso: si prega di verificare che le impostazioni locali:
    LINGUA = (non impostato),
    LC_ALL = (non impostato),
    LANG = "en_US.UTF-8"
sono supportati e installati sul tuo sistema.
perl: avviso: ritorno alla locale standard ("C").

Come lo aggiusto?


Che cosa è successo quando hai controllato le impostazioni locali come ti ha detto il messaggio di errore?
brian d foy,

3
invece di installare la locale, puoi anche cambiare la locale. Sulla mia casella Ubuntu, questo viene fatto per un utente modificando~/.pam_environment
Janus Troelsen l'

Sul mio ODROID-C1 con Ubuntu il problema era in effetti il ​​file ~ / .pam_environment. Alcune delle variabili erano es_US.UTF-8 anziché en_US.UTF-8. Grazie.
f1vefour

L'ho preso su Cygwin \ Babun. Solo una reinstallazione di perl l'ha risolto.
Lucas Soares,

Risposte:


449

Il tuo sistema operativo non lo sa en_US.UTF-8.

Non hai menzionato una piattaforma specifica, ma posso riprodurre il tuo problema:

% uname -a
OSF1 hunter2 V5.1 2650 alpha
% perl -e uscita
perl: avviso: impostazione delle impostazioni locali non riuscita.
perl: avviso: si prega di verificare che le impostazioni locali:
    LC_ALL = (non impostato),
    LANG = "en_US.UTF-8"
    sono supportati e installati sul tuo sistema.
perl: avviso: ritorno alla locale standard ("C").

Suppongo che tu abbia usato ssh per connetterti a questo vecchio host da una nuova macchina desktop. È comune /etc/ssh/sshd_configcontenere

AcceptEnv LANG LC_*

che consente ai client di propagare i valori di tali variabili di ambiente in nuove sessioni.

L'avvertimento ti dà un suggerimento su come schiacciarlo se non hai bisogno delle impostazioni internazionali complete:

% env LANG = C perl -e exit
%

o con bash:

$ LANG = C perl -e uscita
$ 

Per una correzione permanente, scegli una delle

  1. Sull'host precedente, imposta la LANGvariabile di ambiente nel file di inizializzazione della shell.
  2. Modifica il tuo ambiente sul lato client, ad es . Anziché ssh hunter2utilizzare il comando LANG=C ssh hunter2.
  3. Se si dispone dei diritti di amministratore, impedire a ssh di inviare le variabili di ambiente commentando SendEnv LANG LC_* riga nel file locale /etc/ssh/ssh_config . (Grazie a questa risposta . Vedi Bug 1285 per OpenSSH per di più.)

22
Grazie! Ho ricevuto questo messaggio di errore durante la connessione con git al mio server. Dopo aver aggiunto de_CH.UTF-8 (non era supportato lì ma usato localmente) con dpkg-reconfigure localesil messaggio sparito.
Simon A. Eugster,

82
Ho avuto questo problema per anni, ... rimuovendo "AcceptEnv LANG LC_ *" da sshd_config finalmente risolto. Grazie per il suggerimento!
madc,

2
@Greg Bacon, Non ci sarebbero anche casi in cui vorresti impostare le variabili di ambiente a livello di sistema, ad esempio creando un file / etc / environment? help.ubuntu.com/community/…
fraxture

25
@HermannIngjaldsson, almeno su Ubuntu (12.10), non era necessario riavviare il server (dopo aver rimosso "AcceptEnv LANG LC_ *"). Ho appena ricaricato ssh config:, service ssh reloadche richiede una frazione di secondo e non fa nemmeno terminare l'attuale sessione ssh.
noamtm,

3
aggiungi 'export LC_ALL = C' quindi 'source ~ / .bashrc' sul sistema client risolve il problema.
EffectiveMatrix,

476

Ecco come risolverlo su Mac OS Lion (10.7) o Cygwin (Windows 10):

Aggiungi le seguenti righe al tuo bashrc o bash_profile sul computer host:

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

Se stai usando zsh, modifica zshrc:

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

6
Grazie, ho cercato una soluzione per questo problema per molto tempo e ho sempre pensato che fosse un problema nella configurazione del mio server Ubuntu, e sembrava che non ci fosse alcuna soluzione che potesse aiutare (tutto quel dkpg-riconfigurare roba (
Teemu Kurppa

5
Perché LC_ALLsovrascrive tutte le altre variabili, preferirei impostare LANG=de_AT.UTF-8e variabili individuali come LC_MESSAGES=en_US.UTF-8. Se una variabile non è impostata, torna a LANG. Puoi anche ad es. unset LC_CTYPEper costringerlo a ricadere LANG.
David

4
Posizionare quelle linee in .bashrc non ha funzionato, ma bash_profile ha risolto! Ho dovuto creare il file.
Hermann Ingjaldsson,

5
Mettendo queste righe in ~/.bashrcrisolto per me ... quindi devo ricaricare usando source ~/.bashrc... Grazie <3
Enissay

5
Grazie, ha funzionato perfettamente su ZSH e sul plugin oh-my-zsh su Mac OS X El Capitan, in fondo a ~ / .zshrc: LC_CTYPE = en_US.UTF-8 LC_ALL = en_US.UTF-8
Valerio Schiavoni

207

Se stai creando un rootfs usando debootstrap dovrai generare le localizzazioni. Puoi farlo eseguendo:

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

# then regenerate
sudo locale-gen

Questo suggerimento proviene da https://help.ubuntu.com/community/Xen


28
Questa è la vera soluzione per me.
Afriza N. Arief,

6
locale-gen non accetta alcun argomento (almeno in Debian stable). Invece, modifica /etc/locale.gen per rimuovere il commento dalle impostazioni locali desiderate, quindi esegui sudo locale-gen
Sam Watkins,

2
fissato ilUbuntu Server
Paschalis il

5
Su Debian potresti dover fare $ echo en_US UTF-8 >> /etc/locale.genprima di tutto.
akhmed,

1
Su Gentoo (almeno), locale-gennon accetta argomenti. Si legge da /etc/locale.gen.
Pistos,

142

Uso:

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

Funziona per Debian . Non so perché - ma locale-gen non ha prodotto risultati.

Importante! È una soluzione temporanea. Deve essere eseguito per ogni sessione.


13
Questo ha funzionato per me. L'ho appena inserito nel mio .bashrcfile.
Anirudh Ramanathan,

2
Ha funzionato anche per me. Ho dovuto solo impostare le due impostazioni (LANGUAGE e LC_ALL) che apparivano non impostate negli avvertimenti Perl
laurent

2
Su Debian, local-genelabora solo le versioni locali senza commento /etc/local.gen. Potrebbe essere necessario echo en_US UTF-8 >> /etc/locale.genprima fare .
akhmed,

questo ha funzionato per me su OS elementare Freaya (basato su Ubuntu)
valkirilov

1
LC_ C TYPE potrebbe essere?
mixel

139

Questo generalmente significa che non hai impostato correttamente le impostazioni locali sul tuo box Linux.

Su Debian o Ubuntu, ciò significa che devi farlo

$ sudo locale-gen
$ sudo dpkg-reconfigure locales

Vedi anche man locale-gen .


30
non risolve il problema qui
Somatik,

6
dpkg-reconfigure locales - risolto il problema per me, debian 7.1
newUserNameHere

4
dpkg-reconfigure locales non riesce con gli stessi messaggi di errore perl locale che si sta tentando di correggere in primo luogo !!!!
matteo,

10
Questo ha funzionato per me in Ubuntu 14.04, anche se ho dovuto aggiungere prima le impostazioni locali mancantisudo locale-gen es_UY.UTF-8
alf

2
@matteo Solo la prima volta, prima di correggere l'errore. Riprova e dovrebbe essere risolto.
Zero3,

92

Solo per utenti macOS e Mac OS X.

Stavo ricevendo lo stesso avviso durante l'utilizzo di Git

Per risolvere questo avviso Deseleziona l' Set locale environment variable on startupopzione e riavvia il terminale. Di seguito la schermata rappresenta le impostazioni del mio terminale.

inserisci qui la descrizione dell'immagine


3
Caspita, così semplice e risolto i miei problemi! Grazie!
Michal,

3
Ho provato tutti gli altri, ma questo lo ha fatto per me. Uso iTerm e ha la stessa opzione di codifica dei caratteri.
Michael Morrison,

2
Sfortunatamente questo rompe ZSH (la tabulazione ha smesso di funzionare)
Christian,

1
Questo fa totalmente il trucco per Mac OS. A proposito, questo inizio mi sta succedendo subito dopo l'aggiornamento a macOS Sierra. E questo ha risolto questo problema per me.
Paulo Malvar,

1
questo risolto il mio problema. ha iniziato a succedere a me, dopo l'aggiornamento a Mac OS X High Sierra da Sierra.
Lucian Irimie,

36

È una soluzione semplice in Ubuntu. Devi generare le impostazioni locali da zero, eseguendo i seguenti comandi dalla riga di comando:

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

Questo dovrebbe creare le localizzazioni e quindi riconfigurarle.


Questo ha funzionato bene anche usando pt_BR pt_BR.UTF-8- Grazie.
Marcos Freitas,

29

Aggiungendo quanto segue per /etc/environmentrisolvere il problema per me su Debian e Ubuntu (ovviamente, modificare in modo che corrispondano al locale che si desidera utilizzare):

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

7
.. Ho ricevuto un avviso che dice che l'impostazione delle impostazioni locali /etc/environmentè obsoleta e dovrebbe essere impostata /etc/default/locale. Entrambi sembrano funzionare per ora.
Joscarsson,

dovrebbe essereLC_CTYPE
aexl il

25

Ora sto usando questo:

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

Quindi disconnettersi dalla sessione SSH e accedere nuovamente.

Vecchia risposta:

Solo questo mi ha aiutato:

$ 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

Questo ha funzionato bene per me su Ubuntu 15.04, grazie mille.
Goke Obasa,

22

su Debian dopo molte ricerche questo ha funzionato.

primo:

sudo apt-get purge locales

poi:

sudo aptitude install locales

e il famoso:

sudo dpkg-reconfigure locales

Questo elimina il sistema delle versioni locali, quindi reinstalla le versioni locali e esegue il downgrade di libc6 da 2.19 a 2.13, che è il problema. Quindi configura nuovamente le impostazioni locali.


4
dpkg-reconfigure localesè tutto ciò che serve. sudose sei un tipo sudo o fallo come root. Quindi seleziona la tua locale in base a ciò che hai nel tuo ambiente shell.
mknaf,

6
dpkg-reconfigure locales DOVREBBE essere tutto ciò che è necessario. Dopo averlo provato 100 volte e aver guardato in giro per Internet ed è tutto ciò che hai visto e il problema non si risolverà da solo, prova quanto sopra. Quindi torna indietro e vota questo. :)
tkjef,

1
finalmente una risposta non hack a questo problema, sicuramente dovrebbe essere quella accettata!
php_nub_qq

17

Questa è una risposta veloce Imposteremo le impostazioni locali che non saranno disinserite dopo il riavvio. Per prima cosa apri il file bash e modificalo:

nano .bashrc

aggiungi queste righe al file:

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

attiva il cambiamento ricaricando bash:

source ~/.bashrc

risultati del test :

locale

L'unico che funziona per me, Raspbian e Ubuntu Server 16.04 :)
Liso,

13

Per Ubuntu usa questo,

#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

Ha funzionato per me.


Ha funzionato anche per me, rimuovendo tutto il contenuto nel file /etc/default/localee mettendo solo la definizione dei var (rimuovendo la parola export) e riavviando il server
Edenshaw,

12

Se usi Mac OS X v10.10 (Yosemite) o superiore per connetterti al tuo server Linux, puoi provare questi passaggi.

  1. Mantieni il tuo file / etc / ssh / sshd-config originale

  2. Metti il ​​tuo ~ / .bash_profile

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

    dpkg-reconfigure locales

    E seleziona "en_US.UTF-8"


10
sudo nano /etc/locale.gen

Rimuovi il commento dalle impostazioni locali che desideri utilizzare (ad es. en_US.UTF-8 UTF-8):

Quindi eseguire:

sudo /usr/sbin/locale-gen

Fonte: http://people.debian.org/~schultmc/locales.html


La società per cui lavoro negli Stati Uniti ospita un server git con clienti internazionali. La folla di GB si è lamentata del fatto che i loro cloni git su SSH avrebbero avuto problemi a causa delle differenze locali. Questo applicato sul server ha risolto questo problema per loro.
Therealstubot,

10

È necessario configurare le impostazioni internazionali in modo appropriato /etc/default/locale, disconnettersi, accedere e quindi eseguire i comandi regolari

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
questi passaggi hanno funzionato per me (server Ubuntu 14.04). il punto principale era disconnettersi e riconnettersi.
liberborn,

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

Soluzione:

Prova questo ( uk_UA.UTF-8 è la mia locale attuale. Scrivi la tua locale, ad esempio en_US.UTF-8 !)

sudo locale-gen uk_UA.UTF-8

e questo.

sudo dpkg-reconfigure locales

Grazie a questo ho risolto il mio problema, dopo averlo fatto e reinstallato.
madprops,

8

per me correggo questo errore modificando il file .bashrc aggiungi esportazione. Aggiungi dopo i commenti iniziali.

Aggiungi supporto lingua.

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

Kind Regads,


6

Aggiungendo il locale corretto ~/.bashrc, ~/.bash_profile, /etc/environmente simili risolverà il problema, ma non è consigliabile, in quanto sostituisce le impostazioni /etc/default/locale, che viene a confondere e può portare alle zone non essere applicata in modo coerente nella peggiore.

Invece, si dovrebbe modificare /etc/default/localedirettamente, che potrebbe assomigliare a questo:

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

La modifica avrà effetto al prossimo accesso. È possibile ottenere la nuova locale in una shell esistente acquistando in /etc/default/localequesto modo:

$ . /etc/default/locale

1
è necessario riavviare il sistema dopo questo passaggio
Ghanshyam Bagul,

Puoi semplicemente commentare la locale desiderata in "/etc/locale.gen" quindi eseguire:locale-gen
Dave Everitt il

5

Per chiunque si colleghi a DigitalOcean o qualche altro provider di hosting cloud da iTerm2.app su MacOS High Sierra e ottenga questo errore su alcuni comandi:

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

Ciò ha risolto il problema per me:

inserisci qui la descrizione dell'immagine

So che questo thread è vecchio ma forse qualcuno lo troverà utile. So quanto possa essere fastidioso.


Sì, questa impostazione era in iterm2! Grazie!
Brian Olsen,

4

A seguito della risposta accettata:

LANG = C ssh hunter2.

LC_ALL = C ssh hunter2

dal lato client ha fatto il trucco per me.


Ha funzionato per me su OSX 10.10.3, mentre solo "LANG = C" non era abbastanza. Grazie Alex!
Christian,

4

Con zsh ohmyzsh ho aggiunto questo a .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

Rimuovendo la linea export LANG=en_US.UTF-8

Riaperto una nuova scheda e SSHed, ha funzionato per me :)


3

Aggiungere LC_ALL="en_GB.utf8"al /etc/environmente riavviare. È tutto.


2

Come sempre, il diavolo è nei dettagli ...

Su Mac OS X v10.7.5 (Lion), per correggere alcuni errori di Django , nel mio ~/.bash_profileho impostato:

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

E a sua volta per molto tempo ho ricevuto quell'avvertimento quando ho usato Perl.

Colpa mia! Come ho capito molto più tardi, il mio sistema è en_US.UTF-8! L'ho risolto semplicemente cambiando da

export LANG=en_EN.UTF-8

per

export LANG=en_US.UTF-8


2

Tutte le risposte precedenti sono sbagliate. Il messaggio è chiaro: impostazioni locali mancanti. La soluzione è aggiungere la locale appropriata. Puoi farlo modificando il file /etc/locale.gen, rimuovi il segno # davanti alla locale che viene segnalato come mancante e quindi eseguendo il comando:

$ sudo locale-gen

Questo in realtà genererà le localizzazioni specificate in /etc/locale.gen e quindi il messaggio non verrà mostrato.


Questa è semplicemente la risposta e ha funzionato sull'antica Debian (6) per me. Tutto il resto è troppo complicato e un po 'fuori strada.
Dave Everitt,

2

nel mio caso, con debian8.6, ho dovuto modificare le impostazioni in:

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

e sshd_config per#SendEnv LANG LC_*

quindi riavviare il servizio ssh.

alla fine lo ha fatto

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


2

Aggiungi le localizzazioni mancanti a .bash_profile

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

Quindi fonte il tuo .bash_profile

source ~/.bash_profile

1

Nel mio caso, questo è stato l'output:

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

La soluzione era:

sudo locale-gen ro_RO.UTF-8

1

sshsovrascrive le variabili locali LC per impostazione predefinita. Vedi /etc/ssh/sshd_config:

AcceptEnv LANG LC_*

Quindi forse hai bisogno di impostare queste variabili nella tua shell locale.


1

Per me, su Ubuntu 16.04 (Xenial Xerus) ha funzionato:

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

Quindi riavviare ...

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.