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.