Como corrijo meu problema de localidade?

506

Estou recebendo essa mensagem toda vez que faço algo como iniciar ou interromper um serviço.

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   

Como corrijo esse erro?

HackToHell
fonte
Relacionado: Como definir a localidade?
Lucio #
Correção fácil e permanente para todos os usuários: askubuntu.com/questions/881742/…
Galvani

Respostas:

513

Execute primeiro localepara listar quais localidades definidas atualmente para a conta de usuário atual:

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

Em seguida, gere o código de idioma ausente e reconfigure os códigos de idioma para observar:

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

Agora você não verá mais nenhum erro!

Otto Kekäläinen
fonte
220
não funcionou para mim
Umair
4
Isso funcionou para mim em vários sistemas. Existe uma maneira de evitar esse problema em sistemas recém-instalados?
Brylie Christopher Oxley
13
@UmairAyub pode ser que você tenha mais de uma localidade desconhecida, tente o seguinte: para y em $ (localidade | cut -d '=' -f 2 | ordenar | uniq); do locale-gen $ y; feito Isso vai gerar uma localidade para cada definição que você tem
Ivan Buttinoni
3
Logout e login pode ajudar
SMMousavi
4
@Umair Há um alto risco de erro humano neste problema. Seu sistema está configurado en_GBpor padrão, mas você o configura en_US. Você tem que comentar manualmente en_GBe remova o comentário en_USno /etc/locale.gen. Veja minha resposta askubuntu.com/a/790373/25388 no hardware Raspberry Pi 3b e no sistema Raspbian Jessie.
Léo Léopold Hertz 준영 22/0616
366

Nada sugerido acima funcionou no meu caso (Ubuntu Server 12.04LTS). O que finalmente ajudou foi colocar no arquivo /etc/environment:

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

Por alguma razão, estava faltando. As saídas para locale e outros comandos pareciam que as variáveis ​​foram definidas corretamente. Em outras palavras, não tome como certo todo o material básico é declarado onde deveria ser declarado.

Marcin
fonte
115
Sim, nenhum outro funcionou, exceto este, talvez devido à versão atualizada. Mas prefiro colocar isso /etc/default/locale.
Naveed
27
Atualizado /etc/default/localee sem mais avisos. Obrigado
ohho
7
Sim, os outros não funcionaram para mim. Este fez. Aqui está o one-liner que eu usei para atualização autônoma disso. sudo sh -c "echo 'LC_ALL=en_US.UTF-8\nLANG=en_US.UTF-8' >> /etc/environment"
dman
12
@ user163207 sua solução está incorreta porque anexa (em vez de sobrescrever), não é o arquivo recomendado e echoprecisa ser executada com a interpretação de escapes de barra invertida ativada. É o mesmo que o seu, mas com o mencionado anteriormente:sh -c "echo -e 'LANG=en_US.UTF-8\nLC_ALL=en_US.UTF-8' > /etc/default/locale"
glarrain
13
NÃO ESQUEÇA DE LOGIN E RE-LOGIN!
SMMousavi
149

Eles devem desaparecer após a emissão:

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

dpkg-reconfigurereconfigura os pacotes depois que eles já foram instalados. Passe os nomes de um pacote ou pacotes para reconfigurar. Ele fará perguntas de configuração, como quando o pacote foi instalado pela primeira vez.

Rinzwind
fonte
9
Eu estou contente meus problemas há um ano ajudou a obter este fixo;)
Rinzwind
1
Esse código do idioma não deve ser gerado por padrão? Quero dizer en, en_AU, en_CA, en_GBestão presentes por padrão, mas não en_US?
Daniel Serodio
@Rinzwind Muito obrigado pelo seu esforço! Eu peço desculpas; Eu deveria ter formulado minha pergunta melhor. O que eu queria perguntar é: Por que é necessário reconfigurar o pacote de localidades depois de gerar novas localidades? Parece-me que os locais funcionam mesmo sem dpkg-reconfigure.
Victor
Usando o Ubuntu 14.04, em um contêiner Docker, nada estava sendo definido. O Django makemessageprecisa disso. Isso funcionou perfeitamente! obrigado.
Justin
1
Percebo que o raspbian está fora do escopo aqui, mas pensei em mencionar que precisava sair e fazer login antes de LC_ALLestar definido corretamente.
MatrixManAtYrService
119

Basta adicionar o seguinte ao seu .bashrcarquivo (supondo que você esteja usando o bash)

export LC_ALL="en_US.UTF-8"
ratz
fonte
2
Essa correção agradável funcionou para mim na minha imagem do Amazon-EC2 (estava executando o RHEL AMI padrão) Muito obrigado! :)
gideon
Este funcionou para mim com a imagem Ubuntu 12.04 do meu digitalocean.
Inan
2
isso corrigiu meu problema. Eu tenho que fazer uma pergunta: como é que o LC_ALL não foi definido pelo comando locale-gen como outras respostas disseram acima desta?
alexserver
Estranho, todas as soluções acima não funcionaram para mim, mas esta funcionou! Depois de exportar LC_ALLeu finalmente poderia usar sudo dpkg-reconfigure locales.
Sobi3ch 18/11/2015
finalmente, depois de tentar muitos truques, este é o mais útil para mim no kubuntu 14.04.3 lts. obrigado!
Jonah
94

Esse é um problema comum se você estiver se conectando remotamente, portanto, a solução é não encaminhar seu código de idioma. Edite /etc/ssh/ssh_confige comente a SendEnv LANG LC_*linha.

user249697
fonte
6
Eu estava tentando outras respostas, mas esqueci que estava me conectando remotamente até ver sua resposta. Locais diferentes no servidor e no cliente ssh estavam causando o problema.
27715
2
No OSX (conectando-se ao ubuntu), está em/etc/ssh_config
Michiel de Mare
One-liner para fazer isso: sed -e '/SendEnv/ s/^#*/#/' -i /etc/ssh/ssh_config(útil para provisionamento de servidores)
Albin
Não consegui definir LC_ALL na máquina local, mas foi corrigido meu problema com o servidor remoto, obrigado.
Alexander Shlenchack
1
Provavelmente vale a pena notar que você precisa editar o arquivo na máquina local e não no controle remoto.
Clashsoft 9/07
72

Existe um comando para isso:

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

Ele atualiza /etc/default/localecom os valores fornecidos.

sgtpep
fonte
4
Isso é legítimo! Não se esqueça de sair / recarregar seu shell, caso contrário você não verá as alterações. Não se esqueça de verificar a resposta aprovada para gerar e reconfigurar localidades.
Erik Zivkovic
1
A execução localeainda não mostra nenhum valor utf.
Cerin
@ Cerin: Myybe, locale-genestá faltando uma chamada . Antes, é preciso fazer apt-get install locales.
precisa saber é
1
Isso não mudará o LANG para o shell raiz no Ubuntu 16.04, pois ele é substituído em /root/.profile.
Willem
32

O que funcionou para mim em 12.10 foi o seguinte:

apt-get install language-pack-en-base  

Isso foi depois dpkg-reconfigure localesproduzido sem resultados.

George Answerology
fonte
2
Esta é a melhor resposta. Não é que meus locais tenham sido configurados incorretamente, mas eles realmente não existiam. Eu acho que isso também é semelhante ao problema do OP ("Esse arquivo ou diretório" não está claro se o seu código de idioma estiver definido corretamente!).
Revelação
1
Eu estava recebendo o problema dos OPs sempre que estava usando o apt-get no Ubuntu 12.04. Isso resolveu perfeitamente, sem ter que editar nenhum arquivo.
Deepend
"language-pack-en-base já é a versão mais recente."
karlingen
Logout e login pode ajudar
SMMousavi
Trabalhou para mim em um ubuntu chrootno debian. Obrigado :)
Wyatt8740
18

Não se esqueça de sair da sua sessão SSH (ou do seu X11) saindo e fazendo login novamente. Todas essas sugestões não funcionaram para mim, a menos que eu tenha entrado novamente ....

Michael R. Hines
fonte
2
Esse comentário deve ser mais positivo ou pelo menos o fato precisa ser destacado em todas as respostas.
Ni8mr
11

Para o Ubuntu 12.10, nenhuma das opções acima funcionou, exceto a solução dos ratzs. Eu recomendo adicionar isso ao seu arquivo /etc/bash.bashrc:

export LC_ALL="en_ZA.UTF-8"
export LC_CTYPE="en_ZA.UTF-8"
Lovemore Nalube
fonte
De todas as soluções acima. Este é o único que funcionou para mim.
11116 JohnnyQ
11

Eu estava preso em um estado estranho em que minha máquina local está configurada ese, portanto, a máquina remota (via vagrant) foi provisionada em um estado não tratado. Portanto, eu tive que usar o manual export=apenas para facilitar um sucesso dpkg-reconfigure. Então o sistema está bom.

export LC_ALL="en_US.UTF-8"
sudo dpkg-reconfigure locales
Charney Kaye
fonte
Melhor! Devido a dpkg-recofigureexibições mojibake.
Orient
9

Eu escrevi um script bash para corrigir o problema acima. As respostas acima são úteis, mas definir as variáveis ​​de localidade simplesmente exportando os valores na variável de shell funcionará apenas para uma sessão. Resolvi esse problema permanentemente exportando as variáveis ​​de localidade no arquivo .bash_profile. Você também pode usar o /etc/profilearquivo em vez de .bash_profile.

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

Não se esqueça de sourceo .bash_profilee seguir o roteiro de configuração fácil.

Ajeet Khan
fonte
8

Podes tentar:

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

onde ru_RUestá o código do seu país?

Koss
fonte
7

A resposta atual aceita não é suficiente na estratégia de solução de problemas porque você pode ter um erro humano. Você configurou seu sistema para, en_USmas en_GBativou /etc/locale.gencomo eu havia no tópico aqui para Raspberry Pi 3b. Você deve ter todos os seus códigos de idioma usados ​​ativados /etc/locale.gen.

Eu en_GB.UTF-8 UTF-8só tinha ativado /etc/locale.gen. Eu deveria ter lá ativado apenas en_US.UTF-8 UTF-8por causa de outros comandos executados para ele. Então eu comentei GB e descomentei os EUA, e tudo funciona agora

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

Agora, não recebo esses erros de localidade com nenhum comando.

Sistema: Raspbian Jessie
Hardware: Raspberry Pi 3b

Léo Léopold Hertz 준영
fonte
6

Como dito aqui no Debian Wiki , você pode editar /etc/locale.gene adicionar todas as localidades (ou descomentá-las, eu tinha uma lista de todas as localidades, exceto todas as que eu usei como comentários) para as quais você deseja suporte no seu sistema. Então, execute

sudo dpkg-reconfigure locales

para atualizar os códigos de idioma no seu sistema. Agora, todos os códigos de idioma que você adicionou / não comentou /etc/locale.genestão disponíveis no seu sistema sem nenhum aviso.

msrd0
fonte
3

Se você usa o ambiente KDE, verifique o setlocale.sharquivo em ~/.kde/env/:

$ cat ~/.kde/env/setlocale.sh 
export LANG=en_US.UTF-8
export LANGUAGE=en_US:ru:en
MaximKostrikin
fonte
isso salvou minha bunda .... obrigado! Inacreditável em quantos lugares essa porcaria de localidade está sendo configurada ... e como no mundo o KDE consegue estragar tudo misturando meus dois locais diferentes (is_IS para localização, dinheiro, etc e en_EN para o idioma em um is_EN inexistente localidade)! Grmpfh.
StFS
2
  1. Pode ser necessário executar sudo dpkg-reconfiguretambém o aplicativo que você instalou enquanto as configurações de "localidade" foram inválidas / não correspondem.

    Enquanto a localidade do sistema foi configurada incorretamente, instalei vim. Mais tarde, quando o vimcódigo do idioma do sistema foi corrigido, vi uma situação que mostrava caracteres utf-8 incorretamente como símbolos estranhos nanoe os lessmostrava corretamente. Corrida

    sudo dpkg-reconfigure vim
    

    apareceu para corrigir o problema depois que as configurações do sistema foram corrigidas.

  2. Percebi também o mesmo que já mencionado: pode ser necessário desconectar / reconectar o SSH para tornar as alterações visíveis.

ajaaskel
fonte
2

A adição do texto a seguir ~/.profilefunciona para mim:

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

Estou usando o servidor Ubuntu 16.04 LTS de 64 bits no Linode.

Jingguo Yao
fonte
2

Isso funcionou para mim quando tive o mesmo problema (com base na solução fornecida pelo dman ):

sudo sh -c "echo -e 'LC_ALL=en_US.UTF-8\nLANG=en_US.UTF-8' >> /etc/environment"
pythonhunter
fonte
Eu não tinha certeza de como adicionar o URL ao comentário. @EliahKagan
pythonhunter
1
Não tem problema - a data / hora ao lado de um comentário é o que vincula diretamente a ele. ... Então, eu notei que o comentário de glarrain (pedindo em >vez de >>) parece uma resposta ao de dman. Na verdade, não sei qual é o caminho certo ou melhor, mas se você tiver alguma ideia, poderá expandir essa resposta com mais informações. (Você não tem que embora.)
Elias Kagan