Como corrigir um aviso de configuração de local do Perl?

596

Quando corro perl, recebo o aviso:

perl: aviso: falha na configuração da localidade.
perl: warning: verifique se suas configurações de localidade:
    LANGUAGE = (não definido),
    LC_ALL = (não definido),
    LANG = "pt_BR.UTF-8"
são suportados e instalados no seu sistema.
perl: warning: Voltando ao código do idioma padrão ("C").

Como faço para corrigir isso?

xain
fonte
O que aconteceu quando você verificou as configurações de localidade, como a mensagem de erro disse?
Brian d foy
3
em vez de instalar o código do idioma, você também pode alterar o código do idioma. Na minha caixa de Ubuntu, isso é feito por um usuário editando~/.pam_environment
Janus Troelsen
No meu ODROID-C1 executando o Ubuntu, o problema era realmente o arquivo ~ / .pam_environment. Algumas das variáveis ​​foram es_US.UTF-8 em vez de en_US.UTF-8. Obrigado.
F1vefour
Eu peguei isso no Cygwin \ Babun. Apenas uma reinstalação do perl o corrigiu.
Lucas Soares

Respostas:

449

Seu sistema operacional não conhece en_US.UTF-8 .

Você não mencionou uma plataforma específica, mas posso reproduzir seu problema:

% uname -a
OSF1 hunter2 V5.1 2650 alpha
% perl -e exit
perl: aviso: falha na configuração da localidade.
perl: warning: verifique se suas configurações de localidade:
    LC_ALL = (não definido),
    LANG = "pt_BR.UTF-8"
    são suportados e instalados no seu sistema.
perl: warning: Voltando ao código do idioma padrão ("C").

Meu palpite é que você usou o ssh para conectar-se a esse host mais antigo a partir de uma máquina mais recente. É comum /etc/ssh/sshd_configconter

AcceptEnv LANG LC_*

que permite que os clientes propaguem os valores dessas variáveis ​​de ambiente em novas sessões.

O aviso fornece uma dica sobre como esmagá-lo, se você não precisar do local completo:

% env LANG = C perl -e saída
%

ou com bash:

$ LANG = C saída perl -e
$ 

Para uma correção permanente, escolha uma das

  1. No host mais antigo, defina a LANGvariável de ambiente no arquivo de inicialização do seu shell.
  2. Modificar o seu ambiente no lado do cliente, por exemplo , ao invés de ssh hunter2, use o comando LANG=C ssh hunter2.
  3. Se você possui direitos de administrador, pare o ssh de enviar as variáveis ​​de ambiente comentando a SendEnv LANG LC_*linha no arquivo local /etc/ssh/ssh_config . (Graças a esta resposta . Veja o Bug 1285 para OpenSSH para mais.)
Greg Bacon
fonte
22
Obrigado! Eu recebi essa mensagem de erro ao conectar-me com o git no meu servidor. Depois de adicionar de_CH.UTF-8 (não era suportado lá, mas usado localmente) com dpkg-reconfigure localesa mensagem desapareceu.
Simon A. Eugster
82
Eu tinha esse problema há muito tempo ... removendo "AcceptEnv LANG LC_ *" do sshd_config finalmente o resolveu. Obrigado pela dica!
MADC
2
@ Greg Bacon, também não haveria casos em que você desejasse definir as variáveis ​​de ambiente em todo o sistema, por exemplo, criando um arquivo / etc / environment? help.ubuntu.com/community/…
fraxture 08/02
25
@HermannIngjaldsson, pelo menos no Ubuntu (12.10), não havia necessidade de reiniciar o servidor (após remover "AcceptEnv LANG LC_ *"). Acabei de recarregar o ssh config:, service ssh reloadque leva uma fração de segundo e nem faz com que a sessão atual do ssh seja encerrada.
noamtm
3
acrescente 'export LC_ALL = C' e depois 'source ~ / .bashrc' no sistema do cliente resolva o problema.
EffectiveMatrix
476

Veja como resolvê-lo no Mac OS Lion (10.7) ou Cygwin (Windows 10):

Adicione as seguintes linhas ao seu bashrc ou bash_profile na máquina 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 você estiver usando o zsh, edite o zshrc:

# Setting for the new UTF-8 terminal support in Lion
LC_CTYPE=en_US.UTF-8
LC_ALL=en_US.UTF-8
Allen Bargi
fonte
6
Obrigado, eu pesquisei uma solução para esse problema por um longo tempo, e sempre achei que era um problema na configuração do meu servidor Ubuntu, e parecia que não havia solução que ajudasse (todo esse material dkpg-reconfigure (
Teemu Kurppa
5
Como LC_ALLsobrescreve todas as outras variáveis, prefiro definir LANG=de_AT.UTF-8variáveis ​​individuais como LC_MESSAGES=en_US.UTF-8. Se uma variável não estiver definida, ela retornará a LANG. Você também pode, por exemplo. unset LC_CTYPEpara forçá-lo a voltar a LANG.
David
4
Colocar essas linhas no .bashrc não funcionou, mas o bash_profile resolveu! Eu tive que criar o arquivo.
Hermann Ingjaldsson
5
Colocar essas linhas em ~/.bashrcresolvido para mim ... então deve recarregar usando source ~/.bashrc... Thnks <3
Enissay
5
Obrigado, isso funcionou bem no ZSH e no plugin oh-my-zsh no Mac OS X El Capitan, na parte inferior de ~ / .zshrc: LC_CTYPE = pt_BR.UTF-8 LC_ALL = pt_US.UTF-8
Valerio Schiavoni
207

Se você estiver criando um rootfs usando o debootstrap, precisará gerar os códigos de idioma. Você pode fazer isso executando:

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

# then regenerate
sudo locale-gen

Esta dica vem de, https://help.ubuntu.com/community/Xen

Marc
fonte
28
Esta é a verdadeira solução para mim.
Afriza N. Arief
6
locale-gen não aceita nenhum argumento (pelo menos no Debian estável). Em vez disso, editar /etc/locale.gen descomentar as localidades que você quer, sudo em seguida, executar locale-gen
Sam Watkins
2
corrigidoUbuntu Server
Paschalis
5
No Debian, você pode precisar fazer $ echo en_US UTF-8 >> /etc/locale.genprimeiro.
Akhmed
1
No Gentoo (pelo menos), locale-gennão aceita argumentos. Lê de /etc/locale.gen.
Pistos
142

Usar:

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

Funciona para o Debian . Não sei por que - mas a locale-gen não teve resultados.

Importante! É uma solução temporária. Tem que ser executado para cada sessão.

artemn
fonte
13
Este funcionou para mim. Eu apenas coloquei no meu .bashrcarquivo.
Anirudh Ramanathan
2
Trabalhou para mim também. Eu só tive que definir as duas configurações (LANGUAGE e LC_ALL) que pareciam não definidas nos avisos Perl
laurent
2
No Debian, local-genapenas processa localidades não comentadas /etc/local.gen. Você pode precisar fazer echo en_US UTF-8 >> /etc/locale.genprimeiro.
Akhmed
Isso funcionou para mim em Elementar OS Freaya (Ubuntu based)
valkirilov
1
LC_ C TYPE pode ser?
mixel 24/07
139

Isso geralmente significa que você não configurou corretamente os códigos de idioma na sua caixa Linux.

No Debian ou Ubuntu, isso significa que você precisa fazer

$ sudo locale-gen
localidades $ sudo dpkg-reconfigure

Veja também man locale-gen .

Paul Tomblin
fonte
30
não corrigir o problema aqui
Somatik
6
localidades do dpkg-reconfigure - corrigido o problema para mim, debian 7.1
newUserNameHere
4
As localidades do dpkg-reconfigure falham com as mesmas mensagens de erro de localidade perl que alguém está tentando corrigir em primeiro lugar !!!!
Matteo
10
Isso funcionou para mim no Ubuntu 14.04, embora eu tenha que adicionar primeiro o local ausente comsudo locale-gen es_UY.UTF-8
alf 27-27
2
@matteo Somente a primeira vez, antes de corrigir o erro. Tente novamente e deve ser corrigido.
Zero3
92

Apenas para usuários do macOS e Mac OS X

Eu estava recebendo o mesmo aviso enquanto usava o Git

Para resolver este aviso Desmarque a Set locale environment variable on startupopção e reinicie o seu terminal. A captura de tela abaixo representa minhas configurações de terminal.

insira a descrição da imagem aqui

Inder Kumar Rathore
fonte
3
Uau, tão simples e resolvi meus problemas! Obrigado!
Michal
3
Eu tentei todos os outros, mas este fez isso por mim. Eu uso o iTerm e tem a mesma opção de codificação de caracteres.
Michael Morrison
2
Infelizmente, isso interrompe o ZSH (as abas pararam de funcionar) #
Christian
1
Isso totalmente faz o truque para o Mac OS. A propósito, isso começou a acontecer comigo logo após o upgrade para o macOS Sierra. E isso corrigiu esse problema para mim.
Paulo Malvar
1
isso corrigiu meu problema. isso começou a acontecer comigo, depois de atualizar para o Mac OS X High Sierra da Sierra.
Lucian Irimie
36

É uma correção simples no Ubuntu. Você precisa gerar os códigos de idioma do zero, executando os seguintes comandos na linha de comando:

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

Isso deve criar os códigos de idioma e reconfigurá-los.

jfreak53
fonte
Isso funcionou bem para mim, mesmo usando pt_BR pt_BR.UTF-8- Obrigado.
Marcos Freitas
29

Adicionando o seguinte para /etc/environmentcorrigir o problema para mim no Debian e Ubuntu (é claro, modifique para corresponder ao local que você deseja usar):

LANGUAGE=en_US.UTF-8
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
joscarsson
fonte
7
.. Recebi um aviso dizendo que a configuração da localidade /etc/environmentestá obsoleta e, em vez disso, deve ser configurada /etc/default/locale. Ambos parecem funcionar por enquanto.
joscarsson
deve serLC_CTYPE
aexl 04/12/19
25

Agora estou usando isso:

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

Em seguida, efetue logout da sessão SSH e efetue login novamente.

Resposta antiga:

Só isso me ajudou:

$ 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
warvariuc
fonte
Isso funcionou bem para mim no Ubuntu 15.04, muito obrigado.
Goke Obasa
22

no Debian depois de muita pesquisa, isso fez o truque.

primeiro:

sudo apt-get purge locales

então:

sudo aptitude install locales

e os famosos:

sudo dpkg-reconfigure locales

Isso libera o sistema de códigos de idioma e, em seguida, reinstala os códigos de idioma e diminui a libc6 de 2.19 para 2.13, que é o problema. Em seguida, configura as localidades novamente.

tkjef
fonte
4
dpkg-reconfigure localesé tudo o que é necessário. sudose você é do tipo sudo, ou faça isso como root. Em seguida, selecione seu código do idioma de acordo com o que você possui em seu ambiente shell.
Mknaf #
6
O local do dpkg-reconfigure DEVE ser tudo o que for necessário. Depois de tentar isso 100 vezes e procurar na Internet, é tudo o que você viu e o problema ainda não se resolverá, tente o que foi dito acima. Então volte e vote isso de novo. :)
tkjef
1
Finalmente, uma resposta não-hack para esse problema, definitivamente deve ser a aceita!
php_nub_qq 28/01
17

Esta é uma resposta rápida. Definiremos localidades que não são definidas após a reinicialização. Primeiro abra o arquivo bash e edite-o:

nano .bashrc

adicione estas linhas ao arquivo:

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

ativar a alteração recarregando o bash:

source ~/.bashrc

Resultado dos testes :

locale
Alouani Younes
fonte
O único que funciona para mim, servidor Raspbian e ubuntu 16.04 :)
Liso
13

Para o Ubuntu, use isso,

#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

Trabalhou para mim.

Amjith
fonte
Ele também trabalhou para mim, removendo todo o conteúdo do arquivo /etc/default/localee colocando apenas a definição dos vars (removendo a palavra exportação) e reiniciar o servidor
Edenshaw
12

Se você usa o Mac OS X v10.10 (Yosemite) ou superior para conectar-se ao servidor Linux, pode tentar estas etapas.

  1. Mantenha seu arquivo / etc / ssh / sshd-config original

  2. Coloque no seu ~ / .bash_profile

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

    dpkg-reconfigure locales

    E selecione "en_US.UTF-8"

dsandrade
fonte
10
sudo nano /etc/locale.gen

Remova o comentário dos locais que você deseja usar (por exemplo en_US.UTF-8 UTF-8):

Então corra:

sudo /usr/sbin/locale-gen

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

Thomas Jensen
fonte
A empresa em que trabalho nos EUA hospeda um servidor git que possui clientes internacionais. A multidão do GB reclamou que seus clones git sobre ssh teriam problemas devido a diferenças de localidade. Isso foi aplicado no servidor e corrigiu esse problema para eles.
precisa saber é o seguinte
10

Você precisa locale configure apropriadamente em /etc/default/locale, logout, o login e execute os comandos regulares

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
glarrain
fonte
4
essas etapas funcionaram para mim (servidor Ubuntu 14.04). o ponto principal era sair e entrar novamente.
liberborn
9
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_ALL to default locale: No such file or directory

Solução:

Tente isso ( uk_UA.UTF-8 é meu local atual. Escreva seu local, por exemplo en_US.UTF-8 !)

sudo locale-gen uk_UA.UTF-8

e isto.

sudo dpkg-reconfigure locales
bogdanvlviv
fonte
Obrigado, isso resolveu o meu problema, depois de fazer isso e reinstalar.
madprops 16/09/16
8

para mim, eu corrijo esse erro ao editar o arquivo .bashrc e adicionar exportação. Adicionar após comentários iniciais.

Adicione suporte ao idioma.

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,

LandiLeite
fonte
6

Adicionando o local correto ~/.bashrc, ~/.bash_profile, /etc/environmente assim por diante vai resolver o problema, no entanto, não é recomendado, uma vez que substitui as configurações de /etc/default/locale, que é confuso na melhor das hipóteses e pode levar a localidades não ser aplicadas de forma consistente na pior das hipóteses.

Em vez disso, deve-se editar /etc/default/localediretamente, que pode ser algo como isto:

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

A alteração entrará em vigor na próxima vez que você efetuar login. Você pode obter o novo código do idioma em um shell existente, fornecendo o /etc/default/localeseguinte:

$ . /etc/default/locale
Nuvanda
fonte
1
precisa reiniciar o sistema após esta etapa
Ghanshyam Bagul
Você pode simplesmente comentar no local desejado em "/etc/locale.gen" e depois executar:locale-gen
Dave Everitt
5

Para qualquer pessoa que esteja se conectando ao DigitalOcean ou a outro provedor de hospedagem em nuvem do iTerm2.app no ​​MacOS High Sierra e recebendo este erro em alguns comandos:

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

Isso corrigiu o problema para mim:

insira a descrição da imagem aqui

Eu sei que esta discussão é antiga, mas talvez alguém ache isso útil. Eu sei como isso pode ser irritante.

Blago Eres
fonte
Sim, foi essa configuração no iterm2! Obrigado!
18718 Brian Brian Drein
4

Após a resposta aceita:

LANG = C ssh hunter2.

LC_ALL = C ssh hunter2

do lado do cliente fez o truque para mim.

Alex Kosenkov
fonte
Trabalhou para mim no OSX 10.10.3, enquanto apenas "LANG = C" não era suficiente. Obrigado Alex!
Christian
4

Com o zsh ohmyzsh, adicionei isso ao .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

Removendo a linha export LANG=en_US.UTF-8

Reabriu uma nova guia e SSHed, trabalhou para mim :)

Joseph Briggs
fonte
3

Adicionar LC_ALL="en_GB.utf8"a /etc/environmente reinicie. Isso é tudo.

zires
fonte
2

Como sempre, o diabo está nos detalhes ...

No Mac OS X 10.7.5 (Lion), para corrigir algum erro do Django , no meu ~/.bash_profileconjunto:

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

Por um longo tempo, recebi esse aviso ao usar Perl.

Foi mal! Como percebi muito mais tarde, meu sistema é en_US.UTF-8! Corrigi-o simplesmente mudando de

export LANG=en_EN.UTF-8

para

export LANG=en_US.UTF-8
Luca Bonavita
fonte
2

Se você não se importa com o problema da localidade, pode definirPERL_BADLANG=0 . Obviamente, isso pode resultar em localização incorreta.

Craig Ringer
fonte
2

Todas as respostas anteriores estão erradas. A mensagem é clara - falta de localidade. A solução é adicionar o código do idioma apropriado. Você faz isso editando o arquivo /etc/locale.gen, remova o sinal # na frente do código do idioma que está sendo relatado como ausente e, em seguida, emitindo o comando:

$ sudo locale-gen

Na verdade, isso irá gerar os códigos de idioma especificados em /etc/locale.gen e, portanto, a mensagem não será mostrada.

Matthias Hryniszak
fonte
Esta é simplesmente a resposta e funcionou no antigo Debian (6) para mim. Todo o resto é muito complicado e um pouco fora de pista.
Dave Everitt 12/04
2

no meu caso, com o debian8.6, tive que alterar as configurações em:

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

e sshd_configpara#SendEnv LANG LC_*

em seguida, reinicie o serviço ssh.

enfim, fez

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

java newbees
fonte
2

Adicionar localidades ausentes ao .bash_profile

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

Em seguida, forneça seu .bash_profile

source ~/.bash_profile
Parinda Rajapaksha
fonte
1

No meu caso, esta foi a saída:

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

A solução foi:

sudo locale-gen ro_RO.UTF-8
Rodislav Moldovan
fonte
1

sshsobrescreve variáveis ​​de localidade LC por padrão. Veja /etc/ssh/sshd_config:

AcceptEnv LANG LC_*

Então, talvez você precise definir essas variáveis ​​no shell local.

garaboncias
fonte
1

Para mim, no Ubuntu 16.04 (Xenial Xerus), funcionou o seguinte:

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

Então reinicie ...

Aleksandar Pavić
fonte