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?




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!


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.


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.


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"

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.


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.


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.


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


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"

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

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.


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?


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


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.


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

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.


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.


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"

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