A resposta útil de Lekensteyn funciona muito bem se você quiser mudar para inglês americano on demand, como o OP solicitou, mas se você quiser mudar para uma diferente linguagem on demand , mais trabalho é necessário.
Antes de começar, você deve instalar as tabelas de mensagens com sudo apt-get install language-pack-<lang-tag>
, em que <lang-tag>
é uma simples linguagem RTF 5646 subtag , como es
para espanhol.
Informações de plano de fundo
Os utilitários GNU gettext dão prioridade à variável de ambiente LANGUAGE
não padrão [1]
sobre variáveis de ambiente de localidade definidas pelo POSIX LC_ALL
, LC_MESSAGES
e LANG
(nessa ordem).
Dado que LANGUAGE
é definido por padrão nos sistemas Ubuntu [2] , ou seja, em substring do valor LANG
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 cancelar ou substituir LANGUAGE
para que as mensagens de um idioma diferente entrem em vigor. > [3]
Opção 1: defina LANGUAGE
Exemplo : alternar para espanhol ( es
) mensagens ad-hoc:
$ LANGUAGE=es ls NoSuchFile
ls: no se puede acceder a NoSuchFile: No existe el archivo o el directorio
Observação : 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 charset (por exemplo, es_AR.UTF-8
).
No entanto, mensagens localizadas podem existir somente no nível idioma , e o fallback é usar mensagens que correspondam à parte idioma ( es
, neste caso).
Opção 2: desabilitar LANGUAGE
e definir LC_ALL
Esta solução alternativa undefines LANGUAGE
primeiro e, em seguida, usa a variável de ambiente do código de idioma 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 de localização para a localidade especificada (como LC_TIME
para formatos de data / hora) e definindo (implicitamente) LC_MESSAGES
também informa não -GNU programas do idioma desejado.
Observe como LC_ALL
requer que o nome de localidade exato, completo , incluindo o sufixo charset, seja efetivo ( es_ES.UTF-8
) (diferente de LANGUAGE
, para o qual uma tag de idioma simples é suficiente como es
)). O mesmo se aplica à configuração de LC_MESSSAGES
e LANG
. A especificação de um nome de localidade inválido / não instalado causa um fallback para o código do idioma POSIX e, portanto, para o inglês dos EUA.
Notas de rodapé
[1] Os motivos pelos quais a resposta de Lekensteyn funciona mesmo sem cancelar / substituir LANGUAGE
é uma exceção : se o valor (efetivo) LC_MESSAGES
(geralmente definido indiretamente via LANG
ou LC_ALL
) é C
ou (seu sinônimo) POSIX
, esse valor é respeitado, independentemente do valor de LANGUAGE
, se houver. Por outro lado, se o valor (efetivo) LC_MESSAGES
for qualquer outro, o específico localidade, LANGUAGE
terá precedência.
[2] Isso se aplica ao Ubuntu adequado , mas não necessariamente a outros sabores ; Lekensteyn afirma que o Kubuntu não define LANGUAGE
.
Indiscutivelmente, LANGUAGE
deve não ser definido por padrão, dado que, na sua ausência, o valor LC_MESSAGES
implícito pelo valor LANG
(que determina a localidade atual) é respeitado.
[3] Você também pode usar essa abordagem para alternar para [US] inglês atribuindo LANGUAGE=C
ou LANGUAGE=POSIX
(como uma alternativa a, LANG=C
/ LANG=POSIX
), embora não esteja claro se isso é ativamente reconhecido ou simplesmente um mecanismo fallback , dado que esses valores não começam com uma tag language ; talvez a melhor escolha seja en_US
.
[4] Há um caso de borda onde essa abordagem não funciona: Tentar chamar um executável com um caminho - relativo ou absoluto - NÃO muda para o idioma especificado , enquanto um mero nome de arquivo faz:
LANGUAGE= LC_ALL=es_ES.UTF-8 /path/to/no_such_utility
não não funciona (produz uma mensagem na localidade atual), enquanto que LANGUAGE= LC_ALL=es_ES.UTF-8 no_such_utility
faz (saídas uma mensagem de erro em espanhol).
Se alguém souber por que e se há uma boa razão para isso, avise-nos.