Como obter mensagens de erro localizadas?

2

Estou tentando ver mensagens de erro localizadas. No entanto, parece que recebo apenas a mensagem da localidade padrão "C". Por exemplo,

$ cat /etc/shadow
cat: /etc/shadow: Permission denied

$ locale -a|grep fi
fi_FI.utf8

$ LC_MESSAGES=fi_FI.utf8 cat /etc/shadow
cat: /etc/shadow: Permission denied

Além disso, olhando para a saída ltrace de cat ele chama setlocale(LC_ALL, "") e imprime a mensagem de erro com a função glibc error () (que imprime a mensagem de erro retornada por strerror (), que deve ser uma mensagem localizada) .

Olhando para a saída strace de "LC_MESSAGES = fi_FI.utf8 cat / etc / shadow", vemos que ele tenta abrir o catálogo de mensagens libc, mas para o idioma inglês em vez de fi_FI.utf8:

...
open("/usr/share/locale/en_US/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en_US/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
...

Eu tenho um arquivo /usr/share/locale-langpack/fi/LC_MESSAGES/libc.mo que contém o catálogo de mensagens libc para o locale fi_FI.utf8, no entanto, ele não parece ser usado. Os pacotes language-pack-fi e language-pack-fi-base estão ambos instalados (assim como os pacotes de idioma gnome e kde correspondentes, mas não consigo vê-los relevantes aqui).

O que estou perdendo?

    
por janneb 28.11.2013 / 10:33

1 resposta

1

Você está perdendo a variável de ambiente LANGUAGE , que é definida no Ubuntu com mais frequência do que não, e substitui LC_MESSAGES para programas compatíveis com GNU.

Tente:

LANGUAGE=fi cat /etc/shadow
    
por Gunnar Hjalmarsson 28.11.2013 / 11:24