Estou usando o Arch Linux e segui as instruções no wiki sobre como definir meu local.
Quase todos os programas executados reclamam da localidade - mesmo locale
. Se parece com isso:
% locale
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=en-US
LC_TIME=en-US
LC_COLLATE="POSIX"
LC_MONETARY=en-US
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT=en-US
LC_IDENTIFICATION="POSIX"
LC_ALL=
ou:
% perl
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_TIME = "en-US",
LC_NUMERIC = "en-US",
LC_MONETARY = "en-US",
LC_MEASUREMENT = "en-US",
LC_CTYPE = "en_US.UTF-8",
LANG = (unset)
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C")
Algo um pouco confuso é que o /etc/locale.gen
arquivo possui vários exemplos; todas as linhas UTF-8 têm "something.UTF-8" e a execução é locale-gen
exibida en_US.UTF-8... done
enquanto está sendo executada, mas locale -a
, o que deve mostrar os locais disponíveis en_US.utf8
. Eu tentei várias combinações de ambos os formatos em /etc/locale-gen
e LOCALE=
em /etc/rc.conf
, mas nada resolveu o problema.
Informação adicional:
% locale -a
C
POSIX
en_US
en_US.iso88591
en_US.utf8
A sugestão de Bruce Ediger de definir LANG=C
e LC_ALL=en_US.UTF-8
trabalhar (de fato, definir LC_ALL
corrigiu, definir LANG
não importava), mas eu gostaria de saber o que está acontecendo. De acordo com o SUS , LC_ALL substituirá todas as outras variáveis LC_ * se estiver definida e não nula. No meu sistema, ele está definido, mas é nulo, portanto deve ser ignorado e outros valores devem ser usados. Isso não é o que está acontecendo, parece que as aplicações estão chamando setlocale
com LC_ALL
, recebendo uma NULL
volta, e gerando um erro, mesmo quando outras chamadas para setlocale
retornar uma seqüência boa.
Aqui está o topo de um ltrace
de locale
(role para a direita para ver os valores de retorno da função)
% ltrace locale
(0, 0, 0, -1, 0x7f5c1ae44510) = 0x7f5c1ae47140
__libc_start_main(0x401d70, 1, 0x7fff7c8cfbf8, 0x404610, 0x4046a0 <unfinished ...>
setlocale(0, "") = "en_US.UTF-8"
setlocale(5, "") = "en_US.UTF-8"
textdomain("libc") = "libc"
argp_parse(0x607280, 1, 0x7fff7c8cfbf8, 0, 0x7fff7c8cfad4) = 0
setlocale(6, "") = NULL
dcgettext(0, 0x405aa8, 5, 0, 0) = 0x405aa8
error(0, 2, 0x405aa8, 1, 0locale: Cannot set LC_ALL to default locale: No such file or directory)
fonte
locale -a
?.utf8
emLOCALE
eLC_*
, mas aparentemente.UTF-8
funciona aqui também ... Quanto pt-BR: ele aparece (sem.utf8
) emlocale -a
?export LANG=C
eexport LC_ALL=en_US.UTF-8
veja o que acontece. Meu laptop Arch Linux estáLOCALE="en_US.UTF-8"
no /etc/rc.conf e não consigo descobrir onde meu laptop define LANG = C./etc/locale.conf
? Parece que você escreveu acidentalmenteLANG=en-US
(com hífen) em vez deLANG=en_US
(com sublinhado)./etc/locale.gen
seria útil também.Respostas:
Você está faltando um arquivo que seria usado para o padrão da localidade, na ausência de
$LANG
ou$LC_ALL
(ou tudo do mais específico$LC_whatever
) sendo definido.No glibc antigo, é / usr / lib / locale / locale-archive. Como o GNU / Linux é caótico, você deve usar o strace para determinar quais arquivos são esperados nas versões específicas em uso na sua máquina:
---------------------- Comentários adicionados 1 dia depois:
"ltrace -S" deve estar bem, pois mostra syscalls.
Caso contrário, "ltrace" não é muito útil (isto é, contraproducente versus strace), porque mostra apenas as chamadas mais altas. Isso é óbvio (setlocale (3)), enquanto o verdadeiro problema acontece dentro da libc.
Parece que você tem os dados de localidade brutos instalados, pois o en_US.UTF-8 funciona.
Nesse caso, algo como isto deve resolver seu problema, definindo um padrão para todo o sistema:
fonte
sudo localedef -f UTF-8 -i en_US en_US.UTF-8
funciona no Raspbian 2018-11-13 Lite.Eu tive o mesmo problema depois de configurar
/etc/locale.conf
apenas hoje (relacionado às alterações recentes em/etc/rc.conf
. No meu caso, verificou-se que os locais não estavam instalados.Verifique
/etc/locale.gen
. Todas as localidades às quais as variáveis de ambiente referenciam devem ser ativadas (ou seja, não comentadas) lá. Depois de fazer as alterações, executesudo locale-gen
para instalar os locais selecionados.fonte
Seguir este link resolve meu problema:
ele gera um arquivo
/etc/locale.conf
que corrige esse problemafonte
Eu tive problemas semelhantes recentemente, todos os nomes de arquivos unicode foram exibidos incorretamente quando removi acidentalmente o 'LOCALE = en_US.utf8' em
/etc/rc.conf
. Então eu verifiquei o script de inicialização:A solução simples é fazer check
DAEMON_LOCALE
-LOCALE
in e check - in/etc/rc.conf
, verifique se o primeiro não estavano
e o segundo não estava vazio.fonte
Talvez uma das suas configurações seja inválida? Essas são minhas configurações de localidade para referência; eles não causam erros (KUbuntu 12.04):
fonte