Existe uma maneira de forçar o programa a gerar erros em inglês?

1

Quando me deparo com erros, às vezes recebo erros no meu idioma definidos pela localidade. Existe uma maneira de mudar de local para forçar mensagens de erro em inglês para procurar a solução?

    
por wesalius 20.01.2017 / 18:10

4 respostas

1

As configurações de localidade são como a maioria dos programas decide qual idioma usar. Embora alguns programas tenham uma configuração diferente, a maneira mais comum de selecionar o idioma das mensagens é por localidades. Não há outra maneira que funcione em mais de um aplicativo (ou família de aplicativos relacionados).

Você não precisa definir nenhuma configuração do sistema, no entanto. Basta executar o programa desta vez com uma configuração diferente. A configuração do código do idioma para as mensagens é LC_MESSAGES (consulte ), para que você possa defini-la definindo a variável de ambiente LC_MESSAGES . O valor especial C é suportado em todos os sistemas e significa as mensagens padrão não traduzidas (normalmente em inglês).

De um shell, o comando a seguir executa myprogram com a variável de ambiente LC_MESSAGES definida como C , isto é, executa myprogram com mensagens em inglês e outras configurações de localidade inalteradas (para que o programa ainda use seu caractere favorito conjunto, ordem de classificação, formato de data, etc.).

LC_MESSAGES=C myprogram

Após o programa ser executado, outros programas executados a partir do mesmo shell usarão as configurações normais de localidade, a alteração não será mantida. Se você quiser que a mudança fique dentro de um terminal, execute

export LC_MESSAGES=C

Isso não afetará os programas iniciados em outros terminais.

    
por 21.01.2017 / 01:44
2

Para executar um utilitário (programa) com uma localidade modificada:

$ env LC_ALL=C somecommand

O utilitário env modifica o ambiente do utilitário que ele executa e a configuração da variável de ambiente LC_ALL to C (ou POSIX ) garantirá que você obtenha mensagens de erro localizadas no código do idioma POSIX. Também pode afetar a classificação, a data e o & formatos de hora e formatos numéricos.

O ambiente fora do utilitário (o shell ou o sistema como um todo) não será afetado por essa troca temporária de localidade.

Leia o manual locale(1) no seu sistema ( man 1 locale ).

    
por 20.01.2017 / 21:08
0

Faça isso antes de executar o programa:

export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8

Se o programa está sendo executado por um script como em /etc/init.d você precisa colocar isso dentro do script.

    
por 20.01.2017 / 18:34
0

"além de mudar de local" - Resposta curta: Não.

Resposta longa:

Se os desenvolvedores de um aplicativo decidirem imprimir todas as mensagens de erro em inglês, independentemente da localidade, com certeza poderão fazê-lo facilmente. Tudo o que eles precisam fazer é não enviar essas strings através das funções de tradução do gettext.

Se os desenvolvedores do aplicativo decidirem introduzir outra variável de ambiente (ou outros meios) de especificação de uma localidade diferente para mensagens de erro, eles também poderão implementá-la com relativa facilidade. As funções newlocale() e *_l() provavelmente serão úteis. Eu nunca vi um aplicativo desse tipo, e não vejo razão para os desenvolvedores se incomodarem com isso.

Um aplicativo normalmente apenas inicializa a localidade de acordo com as variáveis de ambiente e, quando quiser, traduz uma string de acordo com a localidade usada.

Assumindo um aplicativo normalizado e internacionalizado que traduza suas mensagens de erro (acredito que é com isso que você se importa), não há como enganar o uso de uma localidade para strings que irão para a saída padrão e outra localidade para as cadeias que aparecerão no erro padrão. Isso não pode ser "hackeado" por truques como uma biblioteca LD_PRELOAD ou algo assim. O motivo é muito simples: na hora de construir uma string traduzida, ainda não se sabe onde essa string irá aparecer (stdout, stderr, um arquivo de log, interface gráfica, enviada através de wire etc ..., talvez até mais desses ao mesmo tempo). No entanto, para ser capaz de processar, a string já deve ser criada em sua forma traduzida.

Para pesquisar a solução, se você preferir usar o aplicativo em um idioma diferente do inglês, eis a minha recomendação:

Tente localizar uma subseqüência grande da mensagem de erro que provavelmente virá de uma string fixa, ou seja, não tem números ou palavras substituídos. Faça um grep para esta string em / usr / share / locale / (yourlocale) / LC_MESSAGES para localizar de qual arquivo vem. Se não houver correspondência, repita com uma subcadeia que contenha apenas caracteres ASCII de 7 bits (inglês), pois os arquivos * .mo / * .gmo podem estar em qualquer codificação (embora, no software moderno, eles geralmente estejam em UTF-8). Depois de encontrar o arquivo de onde vem a mensagem de erro, execute msgunfmt nesse arquivo para encontrar a string original em inglês.

Atualização: Acabei de perceber que você mencionou em um comentário que está vendo problemas com o AUR e o makepkg.

Como outros já responderam, é fácil executar um programa específico com o idioma inglês. Para a construção de pacotes, isso é altamente recomendado.

Então, eu provavelmente entendi mal sua pergunta. Minha resposta acima responde à pergunta: "É possível ter um aplicativo em execução na minha localidade não inglesa preferida, mas [esse mesmo processo] imprime as mensagens de erro em inglês?"

    
por 20.01.2017 / 22:41