Existem várias variáveis de ambiente disponíveis para alterar as configurações de idioma. Você pode visualizar as configurações atuais do código de idioma executando o localecomando Para alterar todas as configurações de localidade para inglês, use LANG=C. Esse Ccódigo do idioma está sempre disponível sem a instalação de pacotes de idiomas adicionais. (Para alterar temporariamente para localidades diferentes do inglês, consulte a postagem de @ mklement0 .)
Exemplos:
Executando um comando com as configurações de idioma padrão e imprima as configurações atuais de localidade:
$ /nonexistent
bash: /nonexistent: Bestand of map bestaat niet
$ locale
LANG=nl_NL.UTF-8
LANGUAGE=
LC_CTYPE="nl_NL.UTF-8"
LC_NUMERIC="nl_NL.UTF-8"
LC_TIME="nl_NL.UTF-8"
LC_COLLATE="nl_NL.UTF-8"
LC_MONETARY="nl_NL.UTF-8"
LC_MESSAGES="nl_NL.UTF-8"
LC_PAPER="nl_NL.UTF-8"
LC_NAME="nl_NL.UTF-8"
LC_ADDRESS="nl_NL.UTF-8"
LC_TELEPHONE="nl_NL.UTF-8"
LC_MEASUREMENT="nl_NL.UTF-8"
LC_IDENTIFICATION="nl_NL.UTF-8"
LC_ALL=
Substitua temporariamente o idioma de um programa e mostre que é realmente temporário:
$ LANG=C ls /nonexistent
ls: cannot access /nonexistent: No such file or directory
$ ls /nonexistent
ls: kan geen toegang krijgen tot /nonexistent: Bestand of map bestaat niet
Altere o código do idioma para todos os comandos executados no shell atual e inclua provas novamente:
$ LANG=C
$ ls /nonexistent
ls: cannot access /nonexistent: No such file or directory
$ locale
LANG=C
LANGUAGE=
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=
@ gertvdijk: Obrigado por isso; a razão pela qual essa resposta funciona mesmo sem definir LANGUAGEé uma exceção : o GNU gettext dá precedência ao LANGUAGEvalor, exceto se o LC_MESSAGESvalor ( efetivo) (normalmente definido indiretamente via LANGou LC_ALL) for um Cou (seu sinônimo) POSIX. Observe também que LANGUAGEestá desabilitado nesta resposta, enquanto está definido por padrão e, se estiver definido, você deve substituí- lo para alternar para o idioma de uma localidade específica (em oposição a "C" / "POSIX"), que é o que você achou.
precisa
Sua resposta funciona muito bem ao mudar para o código de idioma "C" (com mensagens em inglês dos EUA, conforme solicitado), mas não funcionará para outros códigos de idioma, a menos que LANGUAGEseja explicitamente desconfigurado ou substituído. Dado o título genérico da pergunta, é provável que as pessoas encontrem esta resposta procurando mudar para um idioma que não seja o inglês. Por isso, considere adicionar essas informações à sua resposta.
precisa
@ mklement0 Dado o contexto da pergunta (postando mensagens de erro em inglês), acho que a postagem atual é suficiente. Você pode adicionar outra resposta para explicar os detalhes em torno de LANGUAGEse você quiser :)
Lekensteyn
Eu adicionei minha própria resposta , como você sugeriu. Se você concorda com minha avaliação de que futuros leitores poderão vir aqui procurando mudar para qualquer idioma (como várias pessoas já indicaram ativamente), adicione um link à minha resposta à sua pergunta. Além disso, sugiro alterar o valor de LANGUAGEem sua saída de amostra para nl, que é o valor padrão real quando sua localidade é nl_NL.UTF-8.
usar o seguinte comando
9
A resposta útil de Lekensteyn funciona muito bem se você deseja mudar para o inglês dos EUA sob demanda, conforme solicitado pelo OP, mas se deseja mudar para um idioma diferente sob demanda , é necessário mais trabalho.
Antes de iniciar, você deve instalar tabelas de mensagens com sudo apt-get install language-pack-<lang-tag>, onde <lang-tag>está uma sub-etiqueta simples do idioma RTF 5646 , como espara o espanhol.
Informação de fundo
GNU gettext utilitários baseados dar precedência para a fora do padrão LANGUAGEvariável ambiente [1]
sobre as variáveis ambiente localidade POSIX-definidos LC_ALL, LC_MESSAGESe LANG(nesta ordem).
Dado que LANGUAGEé definido por padrão nos sistemas Ubuntu [2] , ou seja, uma substring do LANGvalor que reflete uma tag de idioma simples (por exemplo, espara espanhol) ou uma tag de região de idioma (por exemplo, de_DEpara a variante alemã do alemão), você deve desmarcar ou substituir LANGUAGEpara que as mensagens de um idioma diferente entrem em vigor. [3]
Opção 1: Definir LANGUAGE
Exemplo : Alterne para as esmensagens em espanhol ( ) ad-hoc:
$ LANGUAGE=es ls NoSuchFile
ls: no se puede acceder a NoSuchFile: No existe el archivo o el directorio
Nota : Uma tag de idioma simples como esé suficiente, mas você pode adicionar um identificador de região (por exemplo, es_ARpara a Argentina) e até mesmo um sufixo de conjunto de caracteres (por exemplo, es_AR.UTF-8).
No entanto, as mensagens localizadas podem existir apenas no nível do idioma , e o fallback é usar mensagens que correspondam à parte do idioma ( esneste caso).
Opção 2: Desativar LANGUAGEe definirLC_ALL
Esta solução alternativa define primeiro a definição indefinidaLANGUAGE e, em seguida, usa a variável de ambiente locale POSIX LC_ALLpara definir implicitamente LC_MESSAGES[4] :
$ LANGUAGE= LC_ALL=es_ES.UTF-8 ls NoSuchFile
ls: no se puede acceder a NoSuchFile: No existe el archivo o el directorio
Esta solução tem a vantagem de definir todos os aspectos da localização para o código do idioma especificado (como LC_TIMEpara formatos de data / hora) e por (implicitamente) a configuração LC_MESSAGEStambém informa os programas que não são do GNU no idioma desejado.
Observe como LC_ALLexige que o nome completo e exato do local, incluindo o sufixo charset, seja eficaz ( es_ES.UTF-8) (diferentemente LANGUAGEdo qual uma tag de idioma simples é suficiente (como es)). O mesmo se aplica à configuração LC_MESSSAGESe LANG. A especificação de um nome de localidade inválido / não instalado causa fallback para a localidade POSIX e, portanto, inglês dos EUA.
Notas de rodapé
[1] As razões pelas quais a resposta de Lekensteyn funciona mesmo sem desabilitar / substituir LANGUAGEsão uma exceção : se o LC_MESSAGESvalor (efetivo) (geralmente definido indiretamente via LANGou LC_ALL) for um Cou (seu sinônimo) POSIX, esse valor será respeitado, independentemente do valor de LANGUAGE, caso existam. Por outro lado, se o LC_MESSAGESvalor (efetivo) for qualquer outro local específico , LANGUAGEterá precedência.
[2] Isso se aplica ao Ubuntu propriamente , mas não necessariamente a outros sabores ; Lekensteyn afirma que Kubuntu se não definido LANGUAGE.
Pode-se argumentar LANGUAGEque não deve ser definido por padrão, uma vez que, na sua ausência, o LC_MESSAGESvalor implícito no LANGvalor (que determina a localidade atual) é respeitado.
[3] Você também pode usar essa abordagem para mudar para o inglês [EUA] atribuindo um LANGUAGE=Cou LANGUAGE=POSIX(como uma alternativa a LANG=C/ / LANG=POSIX), embora não esteja claro se isso é reconhecido ativamente ou simplesmente um mecanismo de fallback , uma vez que esses valores não comece com uma tag de idioma ; talvez a melhor escolha seria en_US.
[4] Há uma borda caso em que esta abordagem não funciona: Tentar invocar um executável com uma caminho - seja relativo ou absoluto - não muda para o idioma especificado, enquanto que uma mera filename faz: LANGUAGE= LC_ALL=es_ES.UTF-8 /path/to/no_such_utilityfaz não trabalho (saídas de uma mensagem no local atual), enquanto o LANGUAGE= LC_ALL=es_ES.UTF-8 no_such_utilityfaz (gera uma mensagem de erro em espanhol).
Se alguém souber o porquê e se há uma boa razão para isso, informe-nos.
LANG
ouLANG_ALL
não está funcionando para mim, aindaLANGUAGE
é. Consulte Por que a substituição da variável de ambiente LANG não está alterando o idioma para mim?LANGUAGE
é uma exceção : o GNU gettext dá precedência aoLANGUAGE
valor, exceto se oLC_MESSAGES
valor ( efetivo) (normalmente definido indiretamente viaLANG
ouLC_ALL
) for umC
ou (seu sinônimo)POSIX
. Observe também queLANGUAGE
está desabilitado nesta resposta, enquanto está definido por padrão e, se estiver definido, você deve substituí- lo para alternar para o idioma de uma localidade específica (em oposição a "C" / "POSIX"), que é o que você achou.LANGUAGE
seja explicitamente desconfigurado ou substituído. Dado o título genérico da pergunta, é provável que as pessoas encontrem esta resposta procurando mudar para um idioma que não seja o inglês. Por isso, considere adicionar essas informações à sua resposta.LANGUAGE
se você quiser :)LANGUAGE
em sua saída de amostra paranl
, que é o valor padrão real quando sua localidade énl_NL.UTF-8
.A resposta útil de Lekensteyn funciona muito bem se você deseja mudar para o inglês dos EUA sob demanda, conforme solicitado pelo OP, mas se deseja mudar para um idioma diferente sob demanda , é necessário mais trabalho.
Antes de iniciar, você deve instalar tabelas de mensagens com
sudo apt-get install language-pack-<lang-tag>
, onde<lang-tag>
está uma sub-etiqueta simples do idioma RTF 5646 , comoes
para o espanhol.Informação de fundo
GNU gettext utilitários baseados dar precedência para a fora do padrão
LANGUAGE
variável ambiente [1] sobre as variáveis ambiente localidade POSIX-definidosLC_ALL
,LC_MESSAGES
eLANG
(nesta ordem).Dado que
LANGUAGE
é definido por padrão nos sistemas Ubuntu [2] , ou seja, uma substring doLANG
valor que reflete uma tag de idioma simples (por exemplo,es
para espanhol) ou uma tag de região de idioma (por exemplo,de_DE
para a variante alemã do alemão), você deve desmarcar ou substituirLANGUAGE
para que as mensagens de um idioma diferente entrem em vigor. [3]Opção 1: Definir
LANGUAGE
Exemplo : Alterne para as
es
mensagens em espanhol ( ) ad-hoc:Nota : Uma tag de idioma simples como
es
é suficiente, mas você pode adicionar um identificador de região (por exemplo,es_AR
para a Argentina) e até mesmo um sufixo de conjunto de caracteres (por exemplo,es_AR.UTF-8
).No entanto, as mensagens localizadas podem existir apenas no nível do idioma , e o fallback é usar mensagens que correspondam à parte do idioma (
es
neste caso).Opção 2: Desativar
LANGUAGE
e definirLC_ALL
Esta solução alternativa define primeiro a definição indefinida
LANGUAGE
e, em seguida, usa a variável de ambiente locale POSIXLC_ALL
para definir implicitamenteLC_MESSAGES
[4] :Esta solução tem a vantagem de definir todos os aspectos da localização para o código do idioma especificado (como
LC_TIME
para formatos de data / hora) e por (implicitamente) a configuraçãoLC_MESSAGES
também informa os programas que não são do GNU no idioma desejado.Observe como
LC_ALL
exige que o nome completo e exato do local, incluindo o sufixo charset, seja eficaz (es_ES.UTF-8
) (diferentementeLANGUAGE
do qual uma tag de idioma simples é suficiente (comoes
)). O mesmo se aplica à configuraçãoLC_MESSSAGES
eLANG
. A especificação de um nome de localidade inválido / não instalado causa fallback para a localidade POSIX e, portanto, inglês dos EUA.Notas de rodapé
[1] As razões pelas quais a resposta de Lekensteyn funciona mesmo sem desabilitar / substituir
LANGUAGE
são uma exceção : se oLC_MESSAGES
valor (efetivo) (geralmente definido indiretamente viaLANG
ouLC_ALL
) for umC
ou (seu sinônimo)POSIX
, esse valor será respeitado, independentemente do valor deLANGUAGE
, caso existam. Por outro lado, se oLC_MESSAGES
valor (efetivo) for qualquer outro local específico ,LANGUAGE
terá precedência.[2] Isso se aplica ao Ubuntu propriamente , mas não necessariamente a outros sabores ; Lekensteyn afirma que Kubuntu se não definido
LANGUAGE
.Pode-se argumentar
LANGUAGE
que não deve ser definido por padrão, uma vez que, na sua ausência, oLC_MESSAGES
valor implícito noLANG
valor (que determina a localidade atual) é respeitado.[3] Você também pode usar essa abordagem para mudar para o inglês [EUA] atribuindo um
LANGUAGE=C
ouLANGUAGE=POSIX
(como uma alternativa aLANG=C
/ /LANG=POSIX
), embora não esteja claro se isso é reconhecido ativamente ou simplesmente um mecanismo de fallback , uma vez que esses valores não comece com uma tag de idioma ; talvez a melhor escolha seriaen_US
.[4] Há uma borda caso em que esta abordagem não funciona: Tentar invocar um executável com uma caminho - seja relativo ou absoluto - não muda para o idioma especificado, enquanto que uma mera filename faz:
LANGUAGE= LC_ALL=es_ES.UTF-8 /path/to/no_such_utility
faz não trabalho (saídas de uma mensagem no local atual), enquanto oLANGUAGE= LC_ALL=es_ES.UTF-8 no_such_utility
faz (gera uma mensagem de erro em espanhol).Se alguém souber o porquê e se há uma boa razão para isso, informe-nos.
fonte