Respostas:
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 locale
comando Para alterar todas as configurações de localidade para inglês, use LANG=C
. Esse C
có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=
LANGUAGE
é uma exceção : o GNU gettext dá precedência ao LANGUAGE
valor, exceto se o LC_MESSAGES
valor ( efetivo) (normalmente definido indiretamente via LANG
ou LC_ALL
) for um C
ou (seu sinônimo) POSIX
. Observe também que LANGUAGE
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 para nl
, 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 , como es
para o espanhol.
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-definidos LC_ALL
, LC_MESSAGES
e LANG
(nesta ordem).
Dado que LANGUAGE
é definido por padrão nos sistemas Ubuntu [2] , ou seja, uma substring do LANG
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 substituir LANGUAGE
para que as mensagens de um idioma diferente entrem em vigor. [3]
LANGUAGE
Exemplo : Alterne para as es
mensagens 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_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).
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 POSIX LC_ALL
para 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_TIME
para formatos de data / hora) e por (implicitamente) a configuração LC_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
) (diferentemente LANGUAGE
do qual uma tag de idioma simples é suficiente (como es
)). O mesmo se aplica à configuração LC_MESSSAGES
e 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.
[1] As razões pelas quais a resposta de Lekensteyn funciona mesmo sem desabilitar / substituir LANGUAGE
são uma exceção : se o LC_MESSAGES
valor (efetivo) (geralmente definido indiretamente via LANG
ou LC_ALL
) for um C
ou (seu sinônimo) POSIX
, esse valor será respeitado, independentemente do valor de LANGUAGE
, caso existam. Por outro lado, se o LC_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, o LC_MESSAGES
valor implícito no LANG
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
ou 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_utility
faz não trabalho (saídas de uma mensagem no local atual), enquanto o
LANGUAGE= 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.
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?