Я пытаюсь увидеть локализованные сообщения об ошибках. Тем не менее, мне кажется, я получаю сообщение только из локали по умолчанию "C". Э.Г.
$ 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
Кроме того, глядя на вывод ltrace cat, он вызывает setlocale(LC_ALL, "")
и печатает сообщение об ошибке с помощью функции glibc error () (которая печатает сообщение об ошибке, возвращаемое strerror (), которое должно быть локализованное сообщение).
Глядя на вывод strace «LC_MESSAGES = fi_FI.utf8 cat / etc / shadow», можно увидеть, что он пытается открыть каталог сообщений libc, но для английской локали, а не для 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)
...
У меня есть файл /usr/share/locale-langpack/fi/LC_MESSAGES/libc.mo, который содержит каталог сообщений libc для локали fi_FI.utf8, однако, похоже, он не используется. Установлены пакеты language-pack-fi, language-pack-fi-base (как и соответствующие языковые пакеты gnome и kde, но я не вижу здесь их актуальности).
Чего мне не хватает?
Вам не хватает переменной окружения LANGUAGE
, которая чаще всего устанавливается в Ubuntu и переопределяет LC_MESSAGES
для программ, совместимых с GNU.
Попробуйте:
LANGUAGE=fi cat /etc/shadow