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?


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

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

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


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.


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 .


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


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.


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

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

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.


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

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.


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"


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


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

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

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,


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

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.


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.


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 :)


3

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


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


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.


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


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

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

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.


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.