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
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?
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